Last updated: 2021-08-02
Checks: 7 0
Knit directory: 2021/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20210412)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version 36a88d7. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .Rhistory
Ignored: .Rproj.user/
Ignored: analysis/hero-image.html
Ignored: analysis/poke_logo.png
Untracked files:
Untracked: Curso_Bioestadistica_MTripp_cuatriII.docx
Untracked: Curso_Bioestadistica_MTripp_cuatriII.pdf
Untracked: Diapositivas/
Untracked: Prueba_markdown.Rmd
Untracked: Prueba_markdown.pdf
Untracked: README.html
Untracked: Resources/
Untracked: Tarea_Tstudent.Rmd
Untracked: Tarea_Tstudent.docx
Untracked: Tarea_Tstudent.html
Untracked: Tarea_Tstudent.pdf
Untracked: analysis/Clase13_noParam.Rmd
Untracked: analysis/hero_backgroud.jpg
Untracked: analysis/images/
Untracked: analysis/style.css
Untracked: analysis/test.Rmd
Untracked: code/tarea_macrograd.R
Untracked: data/CS_subset.csv
Untracked: data/Consumo_oxigeno_wide.csv
Untracked: data/Darwin_esp.csv
Untracked: data/Data_enzimas_Experimento1.txt
Untracked: data/Data_enzimas_Experimento2.txt
Untracked: data/Data_enzimas_Experimento3.txt
Untracked: data/Data_enzimas_Experimento4.txt
Untracked: data/DownloadFestival(No Outlier).dat
Untracked: data/Festival.csv
Untracked: data/Hful_metabolitos_ver2.csv
Untracked: data/Longitud_noParam.csv
Untracked: data/LungCapData.txt
Untracked: data/LungCapDataEsp.csv
Untracked: data/PalmerPenguins.csv
Untracked: data/Pokemon_tabla.csv
Untracked: data/Pokemon_tabla.xls
Untracked: data/RExam.dat
Untracked: data/Rexamendat.csv
Untracked: data/Tabla1_Muestreo.txt
Untracked: data/Transcriptome_Anotacion.csv
Untracked: data/Transcriptome_DGE.csv
Untracked: data/Vinogradov_2004_Titanic.tab
Untracked: data/Vinogradov_2004_Titanic.tab.csv
Untracked: data/data_tukey.txt
Untracked: data/exp_macrogard_growth.tab
Untracked: data/exp_macrogard_rna-dna.tab
Untracked: data/fertilizantes_luz.csv
Untracked: data/gatos_sueno.csv
Untracked: data/macrogard_crecimiento.csv
Untracked: data/pokemon_extended.csv
Untracked: output/Plot_all_penguins.pdf
Untracked: output/Plot_all_penguins.tiff
Untracked: output/graficos/
Unstaged changes:
Modified: analysis/_site.yml
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/Clase10_correlacion.Rmd
) and HTML (docs/Clase10_correlacion.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
File | Version | Author | Date | Message |
---|---|---|---|---|
html | 6d3594c | Miguel Tripp | 2021-08-02 | Build site. |
html | c8dbd17 | Miguel Tripp | 2021-08-01 | Build site. |
html | 5aafed2 | Miguel Tripp | 2021-08-01 | Build site. |
html | 2bc601a | Miguel Tripp | 2021-07-31 | Build site. |
html | 03db7ff | Miguel Tripp | 2021-07-25 | Build site. |
Rmd | fbb2514 | Miguel Tripp | 2021-07-25 | workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”, |
html | fcb9047 | Miguel Tripp | 2021-07-25 | Build site. |
Rmd | 9a992a0 | Miguel Tripp | 2021-07-25 | workflowr::wflow_publish(c(“analysis/index.Rmd”, “analysis/about.Rmd”, |
html | 2adc7a9 | Miguel Tripp | 2021-07-24 | Build site. |
html | 9d09420 | Miguel Tripp | 2021-07-22 | Build site. |
html | 0f7eb2d | Miguel Tripp | 2021-07-12 | Build site. |
html | 82e4deb | Miguel Tripp | 2021-07-08 | Build site. |
html | bc7c1d7 | Miguel Tripp | 2021-07-07 | Build site. |
html | 01ac301 | Miguel Tripp | 2021-07-04 | Build site. |
html | 392444f | Miguel Tripp | 2021-07-04 | Build site. |
Rmd | 4150ad4 | Miguel Tripp | 2021-07-04 | Publish the initial files for myproject |
La correlación lineal y la regresión lineal simple son métodos estadísticos que estudian la relación lineal existente entre dos variables.
La correlación cuantifica como dos variables estan correlacionadas sin considerar dependencias. A nivel experimental, la correlación se suele emplear cuando ninguna de las variables se ha controlado, simplemente se han medido ambas y se desea saber si estan relacionadas.
Los coeficientes de correlación se pueden calcular mediante métodos paramétricos y no paramétricos. Un coeficiente paramétrico es el Coeficiente de Correlación de Pearson, que se usa para observaciones obtenidas sobre una escala de intervalos y esta sujeto a condiciones mas restrictivas que las alternativas no paramétricas. De estas, una de las mas ampliamente utilizadas es el Coeficiente de Correlación por Rangos de Spearman.
Todos los coeficientes de corelación varían entre +1 y -1, siendo +1 una correlación positiva perfecta y -1 una correlación negativa perfecta:
Además del valor obtenido para el coeficiente de correlación, es necesario calcular su significancia. Solo si el valor p es significativo se puede aceptar que existe correlación, y esta será de la magnitud que indique el coeficiente.
Por muy cercano que sea el valor del coeficiente de correlación a +1 o −1, si no es significativo, se ha de interpretar que la correlación de ambas variables es 0, ya que el valor observado puede deberse a simple aleatoriedad.
Como primer ejemplo para el análisis de correlación, supongamos que una heladería realiza un seguimiento de la cantidad de helado que venden en relación con la temperatura de ese día. A continuación se muestran sus cifras de los últimos 12 días:
library(tidyverse)
library(rstatix)
library(ggpubr)
temp <- c(14.2, 16.4, 11.9, 15.2, 18.5, 22.1, 19.4, 25.1, 23.4, 18.1, 22.6, 17.2)
ventas <- c(215, 325, 185, 332, 406, 522, 412, 614, 544, 421, 445, 408)
helados <- data.frame(temp, ventas)
helados
temp ventas
1 14.2 215
2 16.4 325
3 11.9 185
4 15.2 332
5 18.5 406
6 22.1 522
7 19.4 412
8 25.1 614
9 23.4 544
10 18.1 421
11 22.6 445
12 17.2 408
En primer lugar se representan las dos variables mediante un diagrama de dispersión. Este se puede construir simplemte con la función plot o con la función pairs()
plot(helados)
pairs(helados$temp ~ helados$ventas)
ggplot(helados, aes(x = temp, y = ventas))+
geom_point()+
labs(x = "Temperatura (°C)", y = "Ventas ($)",
title = "ventas de helados")
El diagrama de dispersión parecer indicar que existe una posible relación entre la temperatura del día con el número de ventas de helado.
Para poder elegir el coeficiente de correlación adecuando, se tiene que analizar el tipo de variable que se esta analizando y la distribución que presenta.
Utilizando métodos visuales con R base:
par(mfrow = c(2,2))
hist(helados$temp, col = "darkred")
qqnorm(helados$temp, col = "darkred")
qqline(helados$temp)
hist(helados$ventas, col = "blue")
qqnorm(helados$ventas, col = "blue")
qqline(helados$ventas)
Realizando una prueba de Shapiro
sapply(helados, shapiro_test)
temp ventas
variable "X[[i]]" "X[[i]]"
statistic 0.9759308 0.9615932
p.value 0.9620426 0.8063125
El análisis gráfico y el contraste de normalidad muestran que para ambas variables se puede asumir normalidad. En caso contrario, se debe considerar el uso de alternativas como el calculo del coeficiente de Spearman o de Kendall.
Para realizar la estimación de la correlación se puede utilizar la función cor()
. Dentro del parámetro method podemos establecer cual coeficiente queremos utilizar (Pearson, Kendall o Spearman).
cor(helados$ventas, helados$temp, method = "pearson")
[1] 0.9575066
#La función tambien acepta data.frame o matrices, lo que nos arroja los coeficientes para todas las variables contenidas en la tabla
cor(helados)
temp ventas
temp 1.0000000 0.9575066
ventas 0.9575066 1.0000000
La función nos arroja un coeficiente de correlación bastante alta (0.957). Sin embargo, por muy alto que pudiera ser, si no es significativa se ha de considerar inexistente. Para realizar la prueba de significancía de la correlación, se utiliza la función cor.test()
cor.test(helados$temp, helados$ventas, method = "pearson", alternative = "two.sided")
Pearson's product-moment correlation
data: helados$temp and helados$ventas
t = 10.499, df = 10, p-value = 1.016e-06
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.8515370 0.9883148
sample estimates:
cor
0.9575066
El coeficiente de correlación es altamente significativo por lo que podemos concluir que hay una correlación significativa entre la temperatura del día y la venta de helados en el dia (\(r = 0.957, valor p < 0.0001\))
library(pastecs)
Attaching package: 'pastecs'
The following objects are masked from 'package:dplyr':
first, last
The following object is masked from 'package:tidyr':
extract
ascombe <- datasets::anscombe
sapply(ascombe, stat.desc)
x1 x2 x3 x4 y1 y2
nbr.val 11.0000000 11.0000000 11.0000000 11.0000000 11.0000000 11.0000000
nbr.null 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
nbr.na 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
min 4.0000000 4.0000000 4.0000000 8.0000000 4.2600000 3.1000000
max 14.0000000 14.0000000 14.0000000 19.0000000 10.8400000 9.2600000
range 10.0000000 10.0000000 10.0000000 11.0000000 6.5800000 6.1600000
sum 99.0000000 99.0000000 99.0000000 99.0000000 82.5100000 82.5100000
median 9.0000000 9.0000000 9.0000000 8.0000000 7.5800000 8.1400000
mean 9.0000000 9.0000000 9.0000000 9.0000000 7.5009091 7.5009091
SE.mean 1.0000000 1.0000000 1.0000000 1.0000000 0.6125408 0.6125676
CI.mean.0.95 2.2281389 2.2281389 2.2281389 2.2281389 1.3648260 1.3648856
var 11.0000000 11.0000000 11.0000000 11.0000000 4.1272691 4.1276291
std.dev 3.3166248 3.3166248 3.3166248 3.3166248 2.0315681 2.0316567
coef.var 0.3685139 0.3685139 0.3685139 0.3685139 0.2708429 0.2708547
y3 y4
nbr.val 11.0000000 11.0000000
nbr.null 0.0000000 0.0000000
nbr.na 0.0000000 0.0000000
min 5.3900000 5.2500000
max 12.7400000 12.5000000
range 7.3500000 7.2500000
sum 82.5000000 82.5100000
median 7.1100000 7.0400000
mean 7.5000000 7.5009091
SE.mean 0.6121958 0.6122425
CI.mean.0.95 1.3640571 1.3641612
var 4.1226200 4.1232491
std.dev 2.0304236 2.0305785
coef.var 0.2707231 0.2707110
Ahora estimamos los coeficientes de correlación para cada par de variables (x1, y1; x2, y2; x3, y3, etc)
cor(ascombe)
x1 x2 x3 x4 y1 y2 y3
x1 1.0000000 1.0000000 1.0000000 -0.5000000 0.8164205 0.8162365 0.8162867
x2 1.0000000 1.0000000 1.0000000 -0.5000000 0.8164205 0.8162365 0.8162867
x3 1.0000000 1.0000000 1.0000000 -0.5000000 0.8164205 0.8162365 0.8162867
x4 -0.5000000 -0.5000000 -0.5000000 1.0000000 -0.5290927 -0.7184365 -0.3446610
y1 0.8164205 0.8164205 0.8164205 -0.5290927 1.0000000 0.7500054 0.4687167
y2 0.8162365 0.8162365 0.8162365 -0.7184365 0.7500054 1.0000000 0.5879193
y3 0.8162867 0.8162867 0.8162867 -0.3446610 0.4687167 0.5879193 1.0000000
y4 -0.3140467 -0.3140467 -0.3140467 0.8165214 -0.4891162 -0.4780949 -0.1554718
y4
x1 -0.3140467
x2 -0.3140467
x3 -0.3140467
x4 0.8165214
y1 -0.4891162
y2 -0.4780949
y3 -0.1554718
y4 1.0000000
Ahora gráficamos cada uno de los pares
par(mfrow = c(2,2))
plot(ascombe$x1, ascombe$y1, col = "red", pch = 19)
plot(ascombe$x2, ascombe$y2, col = "blue", pch = 19)
plot(ascombe$x3, ascombe$y3, col = "darkorange", pch = 19)
plot(ascombe$x4, ascombe$y4, col = "salmon", pch = 19)
dev.off()
null device
1
Ahora vamos a análizar la correlación entre las distintas variables de la bases de datos de pokemon
pokemon<- readxl::read_excel("data/Pokemon_tabla.xls")
plot(pokemon)
Seleccionar el nombre y todas las variables numéricas
pokemon_sub <- pokemon %>%
select(where(is.numeric), -Generation, -ID)
plot(pokemon_sub)
Ivestigar variables correlacionadas
cor(pokemon_sub)
Total HP Attack Defense Sp_Atk Sp_Def Speed
Total 1.0000000 0.6187484 0.7362107 0.6127874 0.7472499 0.7176095 0.5759427
HP 0.6187484 1.0000000 0.4223860 0.2396223 0.3623799 0.3787181 0.1759521
Attack 0.7362107 0.4223860 1.0000000 0.4386871 0.3963618 0.2639896 0.3812397
Defense 0.6127874 0.2396223 0.4386871 1.0000000 0.2235486 0.5107466 0.0152266
Sp_Atk 0.7472499 0.3623799 0.3963618 0.2235486 1.0000000 0.5061214 0.4730179
Sp_Def 0.7176095 0.3787181 0.2639896 0.5107466 0.5061214 1.0000000 0.2591331
Speed 0.5759427 0.1759521 0.3812397 0.0152266 0.4730179 0.2591331 1.0000000
Podemos usar la funcion pairs.panel()
del paquete psych para visualziar los diagramas de disperción entre todas las variables asi como su valor de correlación.
psych::pairs.panels(pokemon_sub, method = "pearson", show.points = TRUE,stars = TRUE)
El paquete Psych tambien contien la función multi.hist()la cual nos ayudaria a evaluar la distribución de los datos: Donde la linea roja corresponde a la distribución normal ajustada y la linea azul a la densidad observada.
psych::multi.hist(pokemon_sub, density = TRUE, dcol = c("blue", "red"))
La función corrplot()
del paquete corrplot recibe como argumento la matriz de correlaciones generada por la función cor() y genera diferentes tipos de heat maps mucho más visuales que la matriz numérica.
library(corrplot)
corrplot 0.84 loaded
corrplot(corr = cor(x = pokemon_sub, method = "pearson"), method = "number", type = "upper")
La función ggpairs()
del paquete GGally basada en ggplot2 representa los diagramas de dispersión, el valor de la correlación e incluso interpreta el tipo de variable para que, en caso de ser categórica, representarla en forma de boxplot.
library(GGally)
Registered S3 method overwritten by 'GGally':
method from
+.gg ggplot2
ggpairs(pokemon_sub, lower = list(continuous = "smooth"),
diag = list(continuous = "bar"), axisLabels = "none")
Warning in check_and_set_ggpairs_defaults("diag", diag, continuous =
"densityDiag", : Changing diag$continuous from 'bar' to 'barDiag'
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Esta sección esta tomada del libro de Motuslky. Intuitive Biostatistics
No. X y Y son completamente simétricas en los calculo de correlación. Sin embargo, esto no es cierto en el caso de la regresión (siguiente capitulo).
X y Y no tienen que ser medidas en la misma unidad pero pueden serlo.
La correlación cuantifica la relación entre dos variables pero no ajusta un modelo a los datos, a diferencia de la regresión.
No. X y Y son completamente simetricos en el calculo e interpretación del coeficiente de correlación.
No. El valor de r va de -1 a 1. No es una fracción por lo que no puede expresarse en porcentaje.
sessionInfo()
R version 4.0.5 (2021-03-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19043)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] GGally_2.1.0 corrplot_0.84 pastecs_1.3.21 ggpubr_0.4.0
[5] rstatix_0.7.0 forcats_0.5.1 stringr_1.4.0 dplyr_1.0.5
[9] purrr_0.3.4 readr_1.4.0 tidyr_1.1.3 tibble_3.0.4
[13] ggplot2_3.3.5 tidyverse_1.3.1 workflowr_1.6.2
loaded via a namespace (and not attached):
[1] nlme_3.1-152 fs_1.5.0 lubridate_1.7.10 RColorBrewer_1.1-2
[5] httr_1.4.2 rprojroot_2.0.2 tools_4.0.5 backports_1.2.1
[9] bslib_0.2.5.1 utf8_1.2.1 R6_2.5.0 mgcv_1.8-33
[13] DBI_1.1.0 colorspace_2.0-0 withr_2.4.2 tidyselect_1.1.1
[17] mnormt_2.0.2 curl_4.3 compiler_4.0.5 git2r_0.27.1
[21] cli_2.5.0 rvest_1.0.0 xml2_1.3.2 labeling_0.4.2
[25] sass_0.4.0 scales_1.1.1 psych_2.0.12 digest_0.6.27
[29] foreign_0.8-81 rmarkdown_2.9 rio_0.5.16 pkgconfig_2.0.3
[33] htmltools_0.5.1.1 dbplyr_2.1.1 rlang_0.4.11 readxl_1.3.1
[37] rstudioapi_0.13 jquerylib_0.1.4 farver_2.0.3 generics_0.1.0
[41] jsonlite_1.7.2 zip_2.1.1 car_3.0-10 magrittr_2.0.1
[45] Matrix_1.3-2 Rcpp_1.0.5 munsell_0.5.0 fansi_0.4.2
[49] abind_1.4-5 lifecycle_1.0.0 stringi_1.5.3 whisker_0.4
[53] yaml_2.2.1 carData_3.0-4 plyr_1.8.6 grid_4.0.5
[57] parallel_4.0.5 promises_1.1.1 crayon_1.4.1 lattice_0.20-41
[61] splines_4.0.5 haven_2.3.1 hms_1.0.0 tmvnsim_1.0-2
[65] knitr_1.30 ps_1.5.0 pillar_1.6.0 boot_1.3-27
[69] ggsignif_0.6.0 reprex_2.0.0 glue_1.4.2 evaluate_0.14
[73] data.table_1.13.6 modelr_0.1.8 vctrs_0.3.8 httpuv_1.5.4
[77] cellranger_1.1.0 gtable_0.3.0 reshape_0.8.8 assertthat_0.2.1
[81] xfun_0.23 openxlsx_4.2.3 broom_0.7.6 later_1.1.0.1
[85] ellipsis_0.3.1