Regresion lineal simple

La regresión lineal es una técnica de modelado estadístico que se emplea para describir una variable de respuesta continua como una función de una o varias variables predictoras. Puede ayudar a comprender y predecir el comportamiento de sistemas complejos o a analizar datos experimentales, financieros y biológicos.

Importar datos

library(readr)
busquedas = read_csv("Prodmiel2018muni.csv")
## Rows: 1549 Columns: 2
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (2): Volumen, Valor
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
names(busquedas)
## [1] "Volumen" "Valor"

Matriz de diagramas de dispersión

pairs(busquedas)

Matriz de coeficientes de correlacion

En estadística, el coeficiente de correlación de Pearson es una medida de dependencia lineal entre dos variables aleatorias cuantitativas. A diferencia de la covarianza, la correlación de Pearson es independiente de la escala de medida de las variables. De manera menos formal, podemos definir el coeficiente de correlación de Pearson como un índice que puede utilizarse para medir el grado de relación de dos variables siempre y cuando ambas sean cuantitativas y continuas.

cor(busquedas)
##           Volumen     Valor
## Volumen 1.0000000 0.9920269
## Valor   0.9920269 1.0000000

Estimacion y representacion de la recta de minimos cuadrados

El comando básico es lm (linear models). El primer argumento de este comando es una fórmula y ~ x en la que se especifica cuál es la variable respuesta o dependiente (y ) y cuál es la variable regresora o independiente (x). El segundo argumento, llamado data especifica cuál es el fichero en el que se encuentran las variables. El resultado lo guardamos en un objeto llamado regresion. Este objeto es una lista que contiene toda la información relevante sobre el análisis. Mediante el comando summary obtenemos un resumen de los principales resultados:

regresion = lm(Volumen ~ Valor, data = busquedas )
summary(regresion)
## 
## Call:
## lm(formula = Volumen ~ Valor, data = busquedas)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -186.740   -0.829    2.678    3.754  188.181 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -4.113e+00  4.101e-01  -10.03   <2e-16 ***
## Valor        2.564e-02  8.281e-05  309.60   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 15.06 on 1547 degrees of freedom
## Multiple R-squared:  0.9841, Adjusted R-squared:  0.9841 
## F-statistic: 9.585e+04 on 1 and 1547 DF,  p-value: < 2.2e-16

Representacion de la recta de minimos cuadrados

plot(busquedas$Valor, busquedas$Volumen, xlab="Valor", ylab = "Volumen")
abline(regresion)

El coeficiente de determinación (es decir, el coeficiente de correlación al cuadrado) mide la bondad del ajuste de la recta a los datos. A partir de la salida anterior, vemos que su valor en este caso es Multiple R-squared: 0.701.

Estimacion de predicciones

nuevas.valor = data.frame(Valor = seq(0, 60))
predict(regresion, nuevas.valor)
##         1         2         3         4         5         6         7         8 
## -4.112989 -4.087350 -4.061712 -4.036073 -4.010434 -3.984795 -3.959156 -3.933517 
##         9        10        11        12        13        14        15        16 
## -3.907878 -3.882239 -3.856600 -3.830961 -3.805322 -3.779683 -3.754045 -3.728406 
##        17        18        19        20        21        22        23        24 
## -3.702767 -3.677128 -3.651489 -3.625850 -3.600211 -3.574572 -3.548933 -3.523294 
##        25        26        27        28        29        30        31        32 
## -3.497655 -3.472017 -3.446378 -3.420739 -3.395100 -3.369461 -3.343822 -3.318183 
##        33        34        35        36        37        38        39        40 
## -3.292544 -3.266905 -3.241266 -3.215627 -3.189989 -3.164350 -3.138711 -3.113072 
##        41        42        43        44        45        46        47        48 
## -3.087433 -3.061794 -3.036155 -3.010516 -2.984877 -2.959238 -2.933599 -2.907961 
##        49        50        51        52        53        54        55        56 
## -2.882322 -2.856683 -2.831044 -2.805405 -2.779766 -2.754127 -2.728488 -2.702849 
##        57        58        59        60        61 
## -2.677210 -2.651571 -2.625933 -2.600294 -2.574655

Intervalos de confianza

confint(regresion)
##                   2.5 %      97.5 %
## (Intercept) -4.91742252 -3.30855615
## Valor        0.02547648  0.02580135
confint(regresion, level=0.90)
##                     5 %        95 %
## (Intercept) -4.78796695 -3.43801171
## Valor        0.02550262  0.02577521
nuevas.valor = data.frame(Valor = seq(0, 80000))
# Grafico de dispersion y recta 
plot(busquedas$Valor, busquedas$Volumen, xlab="Valor", ylab = "Volumen")
abline(regresion)

# Intervalos de confianza de la respuesta media
# ic es una matriz con tres columnas: prediccion, las otras 2 son los extremos del intervalo

ic = predict(regresion, nuevas.valor, interval = "confidence")
lines(nuevas.valor$Valor, ic[, 2], lty = 2    )  #lwr
lines(nuevas.valor$Valor, ic[, 3], lty = 3    )  #upr

# Intervalos de prediccion

ic = predict(regresion, nuevas.valor, interval = "prediction")
lines(nuevas.valor$Valor, ic[, 2], lty = 2, col="red"   )  #lwr
lines(nuevas.valor$Valor, ic[, 3], lty = 3, col="red"   )  #upr

* La tabla de analisis de Varianza

anova(regresion)
## Analysis of Variance Table
## 
## Response: Volumen
##             Df   Sum Sq  Mean Sq F value    Pr(>F)    
## Valor        1 21752771 21752771   95855 < 2.2e-16 ***
## Residuals 1547   351068      227                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1