3.1 Objetivos generales
Calcular la r de Pearson entre dos variables usando software
Discutir el posible significado de las correlaciones.
.
3.2.1 cor para correlación
Es necesario tener dos variables con numeros para usar la correlacion de pearson. A su vez, R te permite utilizarla con la funcion “cor” para realizar la correlacion.
x <- c(1,3,2,5,4,6,5,8,9)
y <- c(6,5,8,7,9,7,8,10,13)
cor(x,y)
## [1] 0.76539
Es posible graficar el resultado de la correlacion mediante un diagrama de dispersion con ggplot 2. Devolviendo la correlacion e imprimiendola en el diagrama.
library(ggplot2)
# create data frame for plotting
my_df <- data.frame(x,y)
# plot it
ggplot(my_df, aes(x=x,y=y))+
geom_point()+
geom_text(aes(label = round(cor(x,y), digits=2), y=12, x=2 ))
## Warning in geom_text(aes(label = round(cor(x, y), digits = 2), y = 12, x = 2)): All aesthetics have length 1, but the data has 9 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
í.
3.2.1.2 muchos diagramas de dispersión
Es posible dividir las medidas de x e y en diferentes condiciones, de modo en que queden como A, B, C Y D. En este caso, se utilizaran datos falsos para cada una de las medidas y condiciones, mientras se utiliza la funcion “facet_wrapping” para analizar los cuatro diagramas de dispersion a la vez.
#Diagrama de dispersion teniendo en cuenta las diferentes condiciones
x<-rnorm(40,0,1)
y<-rnorm(40,0,1)
#Crear condiciones
conditions<-rep(c("A","B","C","D"), each=10)
all_df <- data.frame(conditions, x, y)
ggplot(all_df, aes(x=x,y=y))+
geom_point()+
facet_wrap(~conditions)
3.2.1.3 calcular todas las correlaciones a la vez
Facet_wrao creara tantos grafucos como condiciones individuales se encuentren en cada columna. Por esto mismo, es que al haber cuatro, se obtuvieron cuatro. Estos diagramas no muestran los valores de correlacion (r). Debido a que para obtener esos numeros primero es necesario calcularlo.
3.2.1.4 Correlaciones aleatorias.
.
3.2.1.4 Correlaciones aleatorias
Las correlaciones pueden ser encontradas solo por casualidad, incluso si no existe una correlacion real entre las variables.
Esto es comprobable al muestrear aleatoriamente x y luego numeros aleatorias que sabemos que no estan relacionados. En este ejemplo es posible que se crean correlaciones a pesar de no existir relacion alguna.
Para comprobarlo, se utilizaran 20 condiciones, con números aleatorios para x e y en cada una. Con un tamaño de muestra de 10 en cada uno. Esto contendra datos falsos. Despues se creara un grafico que permita ilustrar este ejemplo.
x<-rnorm(10*20,0,1)
y<-rnorm(10*20,0,1)
conditions<-rep(1:20, each=10)
all_df <- data.frame(conditions, x, y)
ggplot(all_df, aes(x=x,y=y))+
geom_point()+
geom_smooth(method=lm, se=FALSE)+
facet_wrap(~conditions)+
theme_classic()
## `geom_smooth()` using formula = 'y ~ x'
A pesar de que son datos falsos sin relacion alguna, se puede observar
que la pendiente de la linea azul no siempre es plana, incluso en
ocasiones, parece haber una correlacion, incluso si no deberia
haberla.
Esto demuestra que se debe tener cuiado en interpretar los datos como verdad, debido a que siempre existe el riesgo de que las correlaciones que se encuentren hayan ocurrido por casualidad y no por una asociacion significativa entre las variables x e y.
3.2.2 Informe mundial sobre la felicidad
Se utilizara el informe mundial sobre la felicidad para analizar algunas correlaciones con datos reales.
3.2.2.1 Cargar los datos
library(data.table)
## Warning: package 'data.table' was built under R version 4.4.3
whr_data <- fread("https://raw.githubusercontent.com/CrumpLab/statisticsLab/master/data/WHR2018.csv")
library(summarytools)
## Warning: package 'summarytools' was built under R version 4.4.3
view(dfSummary(whr_data))
## Switching method to 'browser'
## Output file written: C:\Users\USUARIO\AppData\Local\Temp\RtmpKWfHRJ\file126064ee45df.html
.
3.2.2.3 Mi pregunta n.° 1
Se plantea la pregunta:
Solo para el año 2017, ¿la medida de un país para “libertad para tomar decisiones de vida” se correlaciona con la medida de ese país para “Confianza en el gobierno nacional”?
#Se crea la correlacion de las variables usando la funcion "cor"
cor(whr_data$`Freedom to make life choices`,
whr_data$`Confidence in national government`)
## [1] NA
Se grafica el resultado
ggplot(whr_data, aes(x=`Freedom to make life choices`,
y=`Confidence in national government`))+
geom_point()+
theme_classic()
## Warning: Removed 167 rows containing missing values or values outside the scale range
## (`geom_point()`).
Del resultado se observa que aunque podemos ver algunos puntos, el resultado de la correlacion fue NA (indefinido). Lo cual ocurrio por la falta de algunos puntos de datos. Por lo que es importante eliminar las filas con datos faltantes y luego realizar la correlacion: Esto mediante la creacion de un data.frame propio solo con los numeros de interes para el analisis.
# Se seleccionaron las columnas que se querian mantener con la funcion select y se uso filter para eliminar las filas con NA.
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:data.table':
##
## between, first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
smaller_df <- whr_data %>%
select(country,
`Freedom to make life choices`,
`Confidence in national government`) %>%
filter(!is.na(`Freedom to make life choices`),
!is.na(`Confidence in national government`))
cor(smaller_df$`Freedom to make life choices`,
smaller_df$`Confidence in national government`)
## [1] 0.4080963
Con este proceso hecho, se obtuvo una correlacion de 0.408, esto muestra que aunque en el diagrama de dispersion los puntos esten por todas partes, tambien muestra que, a medida en que aumenta la libertad para tomar decisiones vitales en un pais, tambien aumenta la confianza en su gobiierno. Mostrando asi una correlacion positiva.
Esto se repetira pero añadiendo la linea de mejor ajuste para vizualizar de mejor manera la tendencia.
# Seleccionar DS y filtrar NA
smaller_df <- whr_data %>%
select(country,
`Freedom to make life choices`,
`Confidence in national government`) %>%
filter(!is.na(`Freedom to make life choices`),
!is.na(`Confidence in national government`))
# Calcular correlacion
cor(smaller_df$`Freedom to make life choices`,
smaller_df$`Confidence in national government`)
## [1] 0.4080963
# plot the data with best fit line
ggplot(smaller_df, aes(x=`Freedom to make life choices`,
y=`Confidence in national government`))+
geom_point(alpha=.5)+
geom_smooth(method=lm, se=FALSE)+
theme_classic()
## `geom_smooth()` using formula = 'y ~ x'
Esta grafica ilustra la interpretacion realizada de la dispersion, demostrando que existen en algun grado una correlacion entre ambas variables, correlacion observable en la linea azul.
3.2.2.4 Mi pregunta n.° 2
La siguiente pregunta es: ¿cuál es la relación entre el afecto positivo y el afecto negativo en un país? No me sorprendería que hubiera una correlación negativa: si los sentimientos positivos suelen aumentar, ¿no deberían los negativos disminuir?
Para responder a esta pregunta, se utilizara el siguiente codigo:
# seleccionar DVs y filtrar NAs
smaller_df <- whr_data %>%
select(country,
`Positive affect`,
`Negative affect`) %>%
filter(!is.na(`Positive affect`),
!is.na(`Negative affect`))
# calcular correlacion
cor(smaller_df$`Positive affect`,
smaller_df$`Negative affect`)
## [1] -0.3841123
# plot the data with best fit line
ggplot(smaller_df, aes(x=`Positive affect`,
y=`Negative affect`))+
geom_point(alpha=.5)+
geom_smooth(method=lm, se=FALSE)+
theme_classic()
## `geom_smooth()` using formula = 'y ~ x'
Con estos resultados, podemos encontrar que existe una correlacion negativa debil. En la que a medida que el efecto positivo aumenta, el efecto negativo disminutye.
3.2.3 Ejercicio de generalización
Ejercicio que refuerza y explora la idea de que ciertas correlaciones se pueden dar unicamente por casualidad. Con esto, para cada pregunta, se tomarán muestras de números aleatorios de una distribución uniforme. Para realizar la estimación, se ejecutará una simulación 100 veces. Las preguntas son:
Estimar el rango (mínimo y máximo) de correlaciones (utilizando la r de Pearon) que podrían ocurrir por azar entre dos variables con n=10.
Estimar el rango (mínimo y máximo) de correlaciones (utilizando la r de Pearon) que podrían ocurrir por casualidad entre dos variables con n = 100.
x <- runif(n=10, min=0, max=10)
Se utiliza la funcion “runif” para muestrear numero aleatorios entre un valor mínimo y un valor máximo.
Se puede calcular la correlación entre dos conjuntos de números aleatorios muestreando primero números aleatorios en cada variable y luego ejecutando la cor()función.
x <- runif(n=10, min=0, max=10)
y <- runif(n=10, min=0, max=10)
cor(x,y)
## [1] -0.5153836
Al ejecutar estos codigos, siempre apareceran resultados diferentes, ya que los numeros x e y varian aleatoriamente, por lo que para estimar el rango de correlaciones que el azar puede producir se repetira el código anterior varias veces. Por ejemplo, si se ejecuta el código 100 veces, se podrían guardar las correlaciones cada vez y luego observar la correlación más pequeña y la más grande.
Esto es posible mediante un for bucle. El código a continuación muestra cómo repetir todo dentro del bucle for 100 veces. La variable i es un índice, que va de 1 a 100. La saved_valuevariable comienza como una variable vacía, y luego le ponemos un valor (en la posición de índice i, de 1 a 100). En este código, ponemos la suma de los productos de x e y en la saved_valuevariable. Al final de la simulación, la save_valuevariable contiene 100 números. Las funciones min()y max()se utilizan para encontrar los valores mínimo y máximo para cada una de las 100 simulaciones. Debería poder modificar este código reemplazando sum(x*y)con cor(x,y). Hacer esto le permitirá ejecutar la simulación 100 veces y encontrar la correlación mínima y la correlación máxima que surge por casualidad. Esta será la estimación para la pregunta 1. Para proporcionar una estimación para la pregunta 2, deberá cambiar n=10a n=100.
Esta parte la deje exactamente como en el crumplab debido a que esta explicado de una forma en que es entendible y apropiado para la actividad que busca que realice.
saved_value <- c() #make an empty variable
for (i in 1:100){
x <- runif(n=10, min=0, max=10)
y <- runif(n=10, min=0, max=10)
saved_value[i] <- cor (x,y)
}
min(saved_value)
## [1] -0.7714484
max(saved_value)
## [1] 0.8171923
Este resultado responde a la primera pregunta, con un rango en el que su valor minimo es -0.774 y un valor maximo de 0.871 despues de repetir el codigo durante 100 veces
x <- runif(n=100, min=0, max=100)
x <- runif(n=100, min=0, max=100)
y <- runif(n=100, min=0, max=100)
cor(x,y)
## [1] 0.1226013
saved_value <- c() #make an empty variable
for (i in 1:100){
x <- runif(n=100, min=0, max=100)
y <- runif(n=100, min=0, max=100)
saved_value[i] <- cor(x,y)
}
min(saved_value)
## [1] -0.2497962
max(saved_value)
## [1] 0.261024
En lo que respecta a la segunda pregunta, con un rango en el que su valor minimo es -0.272 y un valor maximo de 0.230 despues de repetir el codigo durante 100 veces
Se observa que aunque aun se den correlaciones, estas son debiles a comparacion de las de N= 10, demostrando que entre mas alta sea la muestra, menor es la posibilidad de que se presente una casualidad en las correlaciones.
3.2.4 Tarea de escritura
Una posibilidad alternativa que explique el resultado de +0.3 entre las dos variables es que el valor obtenido haya surgido del azar debido al muestreo. Esto gracias a que en ciertos casos, cuando la muestra no es demasiado grande y por lo tanto, no es representativa, se presenta una alta probabilidad de obtener una correlación entre valores aleatorios, incluso cuando se sabe que esos valores no tienen ninguna relación entre sí.
La diferencia radica en la fuerza de la correlación, ya que una correlación de 0.3 o menor, se suele considerar una correlación positiva débil entre dos variables. Mientras que una correlación de 0.7 o más, se suele considerar una correlación positiva fuerte entre ambas variables. Por esto mismo un valor mayor de “r” representa una asociación lineal más fuerte y una menor probabilidad de que la relación observada se deba al azar.
Una correlacion de 0.5 indica una correlacion positiva en donde a medida que los datos de una variable aumentan, los de la otra variable tambien aumentan. Mientras que -0.5 indica una correlacion negativa en donde a medida que los datos de una variable aumentan, los de la otra disminuyen.