#install.packages("readxl")
library(readxl)
library(ggplot2)

Correlación

Coeficiente de correlación de Pearson

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.

Coeficiente de Determinación R2

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

Coeficiente de Correlación de Spearman

  • Dudas en la normalidad de las variables
  • Las varibles estan en una escala ordinal
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.

Analicemos la base de datos mtcars de R

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:

  • mpg: Millas por galón (miles per gallon).
  • cyl: Número de cilindros.
  • disp: Desplazamiento (pulgadas cúbicas).
  • hp: Potencia bruta (caballos de fuerza).
  • drat: Relación del eje trasero (rear axle ratio).
  • wt: Peso del automóvil (en miles de libras).
  • qsec: Tiempo del cuarto de milla (en segundos).
  • vs: Forma del motor (0 = en V, 1 = en línea).
  • am: Tipo de transmisión (0 = automática, 1 = manual).
  • gear: Número de marchas (cambios).
  • carb: Número de carburadores.
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”),

Tipos

“full”, “lower”, “upper”

ANALISIS DE REGRESION

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.

SUPUESTOS DEL MODELO DE REGRESION LINEAL

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

Forma grafica de la regresion

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.

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**

La interpretacion de los resultados es:

En promedio, cada incremento en una unidad en el puntaje de matematicas, corresponde a un incremento de 4 unidades en el putaje global.

Prueba sobre los residuos

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 el valor p < nivel de significancia: Hay evidencia de heterocedasticidad en el modelo de regresión.
  • Si el valor p > nivel de significancia: No hay suficiente evidencia para concluir que hay heterocedasticidad en el modelo de regresión.

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.

Mas graficos

plot(A$P.Mat, A$P.Glo, xlab = "Puntaje de matematica", 
     ylab = "Puntaje global", col='green4') # Grafico sencillo

Otra opcion de grafico mas agradable ggplot

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'

Cálculo de predicciones

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.

consideraciones importantes que debemos tener en cuenta.

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

La base de datos fue recolectada en el ano 2015.

  • Las variables precio, avaluo y administracion estan en millones de pesos.
  • La variable administracion corresponde al valor mensual en pesos por el servicio de administracion del edificio.
  • La variable terminado hace referencia a si el apto tiene reformas o mejoras en relacion al estado del apto nuevo.