#install.packages("readxl")
library(readxl)
library(ggplot2)
El estimador muestral más utilizado para evaluar la asociación lineal entre dos variables X e Y es el coeficiente de correlación de Pearson (r).
Se trata de un índice que mide si los puntos tienen tendencia a disponerse en una línea recta. Puede tomar valores entre -1 y +1. Es un método estadístico paramétrico, ya que utiliza la media, la varianza,y por tanto, requiere criterios de normalidad para las variables analizadas.
peso <- c(51, 59, 49, 54, 50, 55, 48, 53, 52, 57)
long <- c(33.5, 38, 32, 37.5, 31.5, 33, 31, 36.5, 34, 35)
pairs(long ~ peso) #permite elaborar un plot de correlación
Otra forma de hacerlo de una forma elegante es a través del paquete “PerformanceAnalytics”
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
Calculo de correlación
## [1] 0.7794691
La funcion “cor.test” analiza la significancia de la correlacion, utilizando el contraste t-student.
##
## Pearson's product-moment correlation
##
## data: peso and long
## t = 3.5194, df = 8, p-value = 0.007853
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2942560 0.9452104
## sample estimates:
## cor
## 0.7794691
Antes de continuar, para saber que tipo correlación aplicar es importante revisar los supuestos de las pruebas.
La función “shapiro.test” permite realizar una prueba de normalidad de las variables.
##
## Shapiro-Wilk normality test
##
## data: peso
## W = 0.97343, p-value = 0.9207
##
## Shapiro-Wilk normality test
##
## data: long
## W = 0.93757, p-value = 0.5263
Ambas variables presentan una distribución normal, por lo que Pearson es la prueba adecuada para nuestros datos.
Una pregunta importante que se plantea en el análisis de regresión es la siguiente: Que porcentaje de la variación total en Y se debe a la variación en X? En otras palabras, cual es la proporción de la variación total en Y que puede ser explicada por la variación en X?
El cuadrado del coeficiente de correlación de Pearson es, en si mismo, un estadístico de gran utilidad denominado coeficiente de determinación. Es una medida de la proporción de la variabilidad en una variable, atribuible a la variabilidad de la otra. En una correlación perfecta donde r = +1 o -1, la variación de variable se corresponde con una variación exacta en el valor de la otra. Esta situación no se suele dar en biología, puesto que son muchos los factores que, por lo general, regulan las relaciones entre variables entre organismos.
En el ejemplo anterior el coeficiente de determinación es 0.6075721 = 0,60.75 o 60.75%, de lo que se deduce que aproximadamente el 40% del peso de las aves no esta relacionado con la longitud del pico.
## [1] 0.607572
x <- c(44.4, 45.9, 41.9, 53.3, 44.7, 44.1, 40.7, 45.2, 60.1)
y <- c(2.6, 3.1, 2.5, 3, 3.6, 4, 3.2, 2.8, 3.8)
shapiro.test(x)
##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.80304, p-value = 0.02212
shapiro.test(y)
##
## Shapiro-Wilk normality test
##
## data: y
## W = 0.94856, p-value = 0.6743
pairs(x~y)
cor(x,y)
## [1] 0.3585207
Una de las dos variables es asimétrica, por lo que tendremos que utilizar una correlación no paramétrica de Spearman
cor(x, y, method = "spearman")
## [1] 0.1666667
Prueba de significancia
cor.test(x, y, method = "spearman")
##
## Spearman's rank correlation rho
##
## data: x and y
## S = 100, p-value = 0.6777
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.1666667
Utilice la base de datos “women”. Que tipo de correlacion debe aplicar para mostrar si existe una asociacion entre la altura (height) y el peso (weight)
data(women)
head(women)
## height weight
## 1 58 115
## 2 59 117
## 3 60 120
## 4 61 123
## 5 62 126
## 6 63 129
Se recomienda dar un vista al paquete “corrplot”, dado que permite ejecutar gráficas y correlaciones muy elegantes para ser usadas en publicación o presentaciones de sus trabajos. Además de que permite al lector hacer una lectura rápida del comportamiento de las variables en cuanto a su asociación.
La base de datos mtcars es un conjunto de datos incluido en R que contiene información sobre varias características de automóviles. Las variables de esta base de datos son las siguientes:
library(corrplot)
## corrplot 0.94 loaded
data(mtcars)
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Calculamos la matriz de correlación
M <- cor(mtcars) #permite ejecutar una matriz de correlación
pairs(M)
Aplicación gráfica
corrplot(M, method = "ellipse")
corrplot(M, method = "square")
corrplot(M, method = "circle",type="lower",is.corr = F)
## Metodos para colocar estilos del grafico
“circle”, “square”, “ellipse”, “number”, “shade”, “color”, “pie”),
“full”, “lower”, “upper”
El Análisis de Regresión se usa cuando el investigador sabe que existe una relación entre las variables porque hay una teoría o investigaciones previas que la han descubierto. Por ejemplo, la relación entre espacio y tiempo ya se sabe que es la velocidad, o como la relación entre voltaje e intensidad de corriente eléctrica. En estos casos, el investigador suele estar interesado en verificar experimentalmente tal relación y el objeto de la regresión es encontrar la curva que mejor ajuste a sus datos experimentales.
Utilizando un diagrama de dispersión de puntos podemos resaltar las características de dos variables relacionadas, la linea que se genera denomina linea de mejor ajuste.
Observar que el anova es significativo. Muy importante tener este resultado en las pruebas de la regresión, dado que esto se ajusta a lo que buscamos en la hipótesis de la regresión.
Ho = pendientes es igual a cero
H1 = pendientes es diferente a cero
A<-read_excel("RESULTADOS ICFES 2019.xlsx")
regresion <- lm(P.Glo ~ P.Mat, data = A)
Exploraremos el uso de dos paquetes visreg y ggplot2 para traficar. Usted decide cual es su preferido.
library(visreg)
# Notese que solo requiere incluir la variable independiente, para graficar.
visreg(regresion, "P.Mat", partial = T) #regresion es nuestro vector que contiene la ecuación de regresión.
summary(regresion)
##
## Call:
## lm(formula = P.Glo ~ P.Mat, data = A)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.869 -16.897 -0.902 13.103 58.150
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 39.0726 14.9793 2.608 0.0111 *
## P.Mat 3.9953 0.3831 10.429 5.73e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.2 on 71 degrees of freedom
## Multiple R-squared: 0.605, Adjusted R-squared: 0.5995
## F-statistic: 108.8 on 1 and 71 DF, p-value: 5.732e-16
La ecuacion de prediccion obtenida por la regresion seria:
**Puntaje global=39.07+3.99*puntaje de matematicas**
En promedio, cada incremento en una unidad en el puntaje de matematicas, corresponde a un incremento de 4 unidades en el putaje global.
shapiro.test(resid(regresion)) #Normalidad
##
## Shapiro-Wilk normality test
##
## data: resid(regresion)
## W = 0.99263, p-value = 0.9503
library(car)
## Warning: package 'car' was built under R version 4.3.0
## Loading required package: carData
ncvTest(regresion) #Prueba de heterocedasticidad, Ho=varianzas son constantes
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 10.7006, Df = 1, p = 0.001071
Si la prueba indica que hay heterocedasticidad en el modelo de regresión, es importante investigar y abordar este problema, ya que puede afectar la validez de los resultados del modelo. Algunas posibles soluciones incluyen transformaciones de variables, usar modelos alternativos que manejen mejor la heterocedasticidad (como modelos de regresión robustos) o considerar la inclusión de variables adicionales en el modelo.
plot(A$P.Mat, A$P.Glo, xlab = "Puntaje de matematica",
ylab = "Puntaje global", col='green4') # Grafico sencillo
ggplot(data = A, mapping = aes(x = P.Mat, y = P.Glo)) +
geom_point(color = "firebrick", size = 2) +
geom_smooth(method = "lm", se = F, color = "black")+
labs(title = "Diagrama de dispersión", x = "Puntaje de matematicas", y = "Puntaje global") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5))
## `geom_smooth()` using formula = 'y ~ x'
Supongamos que queremos utilizar la recta de mínimos cuadrados para predecir el puntaje global de los puntajes en matematicas entre 60 y 90 Para ello:
Basta crear un fichero de datos que contenga las nuevas variables regresoras y usar el comando predict:
La función predict() necesita al menos dos argumentos para un modelo de regresión lineal.
1.Un objeto modelo. 2.Nuevos datos.
1.Los datos deben data.frame 2. El nombre de la variable respuesta debe ser el mismo al de los datos originales.
nuevos.puntajes <- data.frame(P.Mat = seq(80, 90))
predict(regresion, nuevos.puntajes)
## 1 2 3 4 5 6 7 8
## 358.6935 362.6888 366.6840 370.6793 374.6746 378.6698 382.6651 386.6603
## 9 10 11
## 390.6556 394.6509 398.6461