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.
Fuente: https://la.mathworks.com/discovery/linear-regression.html
library(readr)
Prodmiel2018muni <- 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.
View(Prodmiel2018muni)
pairs(Prodmiel2018muni)
cor(Prodmiel2018muni)
## Volumen Valor
## Volumen 1.0000000 0.9920269
## Valor 0.9920269 1.0000000
regresion <- lm(Valor ~ Volumen, data = Prodmiel2018muni)
summary(regresion)
##
## Call:
## lm(formula = Valor ~ Volumen, data = Prodmiel2018muni)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6163.6 -168.9 -121.8 20.0 7667.8
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 186.117 15.677 11.87 <2e-16 ***
## Volumen 38.384 0.124 309.60 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 582.9 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
Los parámetros de la de ka ecuacuación que relacion el volumen de miel por municicpio en funcion de su peso vienen dados en el apartado “Intercept” de la tabla anterior, la recta de cuadrados minimos seria:
$$ y = 186.117 + 38.384x
$$ ## Representacion de la recta de minimos cuadrados
plot(Prodmiel2018muni$Valor, Prodmiel2018muni$Valor, xlab="Valor", ylab = "Volumen")
abline(regresion)
Según al ajuste de la recta en cuestion, la salida anterior se ve que el valor Multiple R-squared es: 0.9841
nuevo.valor <- data.frame(Volumen = seq(70, 150))
predict(regresion,nuevo.valor)
## 1 2 3 4 5 6 7 8
## 2872.979 2911.362 2949.746 2988.130 3026.514 3064.897 3103.281 3141.665
## 9 10 11 12 13 14 15 16
## 3180.049 3218.432 3256.816 3295.200 3333.583 3371.967 3410.351 3448.735
## 17 18 19 20 21 22 23 24
## 3487.118 3525.502 3563.886 3602.270 3640.653 3679.037 3717.421 3755.805
## 25 26 27 28 29 30 31 32
## 3794.188 3832.572 3870.956 3909.340 3947.723 3986.107 4024.491 4062.875
## 33 34 35 36 37 38 39 40
## 4101.258 4139.642 4178.026 4216.410 4254.793 4293.177 4331.561 4369.945
## 41 42 43 44 45 46 47 48
## 4408.328 4446.712 4485.096 4523.480 4561.863 4600.247 4638.631 4677.014
## 49 50 51 52 53 54 55 56
## 4715.398 4753.782 4792.166 4830.549 4868.933 4907.317 4945.701 4984.084
## 57 58 59 60 61 62 63 64
## 5022.468 5060.852 5099.236 5137.619 5176.003 5214.387 5252.771 5291.154
## 65 66 67 68 69 70 71 72
## 5329.538 5367.922 5406.306 5444.689 5483.073 5521.457 5559.841 5598.224
## 73 74 75 76 77 78 79 80
## 5636.608 5674.992 5713.376 5751.759 5790.143 5828.527 5866.911 5905.294
## 81
## 5943.678
Los datos vienen de esta ecuacion:
\[ y_i = \beta_0 + \beta_1 x_i + \epsilon_i, \ \ \ \ i=1,\ldots,n, \]
confint(regresion)
## 2.5 % 97.5 %
## (Intercept) 155.36564 216.86758
## Volumen 38.14056 38.62692
confint(regresion, level=0.99)
## 0.5 % 99.5 %
## (Intercept) 145.68472 226.54850
## Volumen 38.06401 38.70348
confint(regresion, level=0.90)
## 5 % 95 %
## (Intercept) 160.3143 211.91889
## Volumen 38.1797 38.58779
Bajo este modelo
Los errores típicos de los estimadores de los parámetros β0 y β1 se encuentran en la columna Std Error de la salida anterior. En el ejemplo, sus valores son 15.677 y 0.9841 respectivamente.
La columna t value contiene el estadístico t, es decir, cociente entre cada estimador y su error típico. Estos cocientes son la base para llevar a cabo los contrastes H0:β0=0 y H0:β1=0
. Los correspondientes p-valores aparecen en la columna Pr(>|t|). En este caso son muy pequeños por lo que se rechazan ambas hipótesis para los niveles de significación habituales.
El estimador de la desviación típica de los errores σ aparece como Residual standard error y su valor en el ejemplo es 15.677
Los intervalos de confianza para los parámetros se obtienen con el comando confint. El parámetro level permite elegir el nivel de confianza (por defecto es 0.95):
Los intervalos de confianza para la respuesta media y los intervalos de predicción para la respuesta se pueden obtener usando el comando predict. Por ejemplo, el siguiente código calcula y representa los dos tipos de intervalos para el rango de volumen que va de 70 a 150 Litros (los de predicción en rojo):
nuevas.valores <- data.frame(Volumen = seq(70, 150))
# Grafico de dispersion y recta
plot(Prodmiel2018muni$Volumen, Prodmiel2018muni$Valor, xlab ="Volumen", ylab = "Valor")
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, nuevo.valor, interval = "confidence")
lines(nuevo.valor$Volumen, ic[, 2], lty = 2 ) #lwr
lines(nuevo.valor$Volumen, ic[, 3], lty = 3 ) #upr
# Intervalos de prediccion
ic <- predict(regresion, nuevo.valor, interval = "prediction")
lines(nuevo.valor$Volumen, ic[, 2], lty = 2, col="red" ) #lwr
lines(nuevo.valor$Volumen, ic[, 3], lty = 3, col="red" ) #upr
anova(regresion)
## Analysis of Variance Table
##
## Response: Valor
## Df Sum Sq Mean Sq F value Pr(>F)
## Volumen 1 3.2566e+10 3.2566e+10 95855 < 2.2e-16 ***
## Residuals 1547 5.2558e+08 3.3974e+05
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1