# install.packages("reticulate")
library(reticulate)
use_python("C:/Users/Cesar Corregidor/anaconda3/python.exe")INSTRUCCIONES
- Resuelva el taller en R(o en Jupyter Notebooks). El entregable deberá ser el archivo pdf con código .R(o el archivo .ipynb)
- Interprete las salidas oportunamente. Asuma poco y no deje detalles sin resolver.
- Plazo Máximo de entrega: Domingo 21 de Noviembre de 2021 (23h59)
Considere la base de datos housing.csv adjunta. La misma es descrita en detalle en Boston house prices dataset del repositorio que se encuentra artículo. A partir de la misma resuelva lo siguiente:
- Realice una corta presentación del conjunto de datos asegurándose de entender cada variable.
CONTENIDO
Cada registro de la base de datos describe un suburbio o una ciudad de Boston. Los datos se obtuvieron del Área Estadística Metropolitana Estándar de Boston (SMSA) en 1970. Los atributos se definen de la siguiente manera (tomados del Repositorio de Aprendizaje Automático de la UCI1):
| Variable | descripción |
|---|---|
| CRIM: | tasa de criminalidad per cápita por ciudad. |
| ZN: | proporción de terrenos residenciales con una superficie superior a 25.000 pies cuadrados. |
| INDUS: | proporción de acres comerciales no minoristas por ciudad |
| CHAS: | Variable ficticia de Charles River (= 1 si el tramo limita con el río; 0 en caso contrario) |
| NOX: | concentración de óxidos nítricos (partes por 10 millones) 1https: //archive.ics.uci.edu/ml/datasets/Housing 20.2. Cargar el conjunto de datos 124 |
| RM: | número medio de habitaciones por vivienda |
| EDAD: | proporción de unidades ocupadas por sus propietarios construidas antes de 1940 |
| DIS: | distancias ponderadas a cinco centros de empleo de Boston |
| RAD: | índice de accesibilidad a carreteras radiales |
| TAX: | tasa del impuesto sobre la propiedad por cada 10.000 dólares |
| PTRATIO: | proporción alumno-maestro por ciudad |
| B: | 1000 (Bk − 0,63) 2 donde Bk es la proporción de negros por ciudad 13. |
| LSTAT: | % de estatus inferior de la población |
| MEDV: | Valor medio de las viviendas ocupadas por sus propietarios en miles de dólares. |
Podemos ver que los atributos de entrada tienen una mezcla de unidades.
Cargamos la base de datos y validamos datos faltantes
data <- read.csv("D:/Cesar Corregidor/Documents/especializacion/ANALISIS_DE_REGRESION/Regresion-Aplicada-main/Talleres/Taller1/housing.csv", sep = "", header = F,
col.names = c("CRIM","ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B","LSTAT", "MEDV"))
data_r <- read.csv("D:/Cesar Corregidor/Documents/especializacion/ANALISIS_DE_REGRESION/Regresion-Aplicada-main/Talleres/Taller1/housing.csv", sep = "", header = F,
col.names = c("CRIM","ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B","LSTAT", "MEDV"))
library(DT)
DT::datatable(data_r)str(data_r)## 'data.frame': 506 obs. of 14 variables:
## $ CRIM : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...
## $ ZN : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
## $ INDUS : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
## $ CHAS : int 0 0 0 0 0 0 0 0 0 0 ...
## $ NOX : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
## $ RM : num 6.58 6.42 7.18 7 7.15 ...
## $ AGE : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
## $ DIS : num 4.09 4.97 4.97 6.06 6.06 ...
## $ RAD : int 1 2 2 3 3 3 5 5 5 5 ...
## $ TAX : num 296 242 242 222 222 222 311 311 311 311 ...
## $ PTRATIO: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
## $ B : num 397 397 393 395 397 ...
## $ LSTAT : num 4.98 9.14 4.03 2.94 5.33 ...
## $ MEDV : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
data_py = r_to_py(data_r)
data_py$head()## CRIM ZN INDUS CHAS NOX ... TAX PTRATIO B LSTAT MEDV
## 0 0.00632 18.0 2.31 0 0.538 ... 296.0 15.3 396.90 4.98 24.0
## 1 0.02731 0.0 7.07 0 0.469 ... 242.0 17.8 396.90 9.14 21.6
## 2 0.02729 0.0 7.07 0 0.469 ... 242.0 17.8 392.83 4.03 34.7
## 3 0.03237 0.0 2.18 0 0.458 ... 222.0 18.7 394.63 2.94 33.4
## 4 0.06905 0.0 2.18 0 0.458 ... 222.0 18.7 396.90 5.33 36.2
##
## [5 rows x 14 columns]
data_py$isnull()$sum()## CRIM 0
## ZN 0
## INDUS 0
## CHAS 0
## NOX 0
## RM 0
## AGE 0
## DIS 0
## RAD 0
## TAX 0
## PTRATIO 0
## B 0
## LSTAT 0
## MEDV 0
## dtype: int64
data_r = py_to_r(data_py)Puesto que no hay datos faltantes omitimos el paso de agregar datos. Cuando revisamos la estructura con str() de r. Observamos que CHAS y RAD toma valores enteros. CHAS representa por números variables categóricas siendo 1: limita con el río y 0: en caso contrario y RAD: índice de accesibilidad a carreteras radiales también sería una variable categórica pero ordinal. Veamos los niveles de categória de estas variables.
data_r$CHAS <- factor(data_r$CHAS)
data_r$RAD <- factor(data_r$RAD)
levels(data_r$CHAS)## [1] "0" "1"
levels(data_r$RAD)## [1] "1" "2" "3" "4" "5" "6" "7" "8" "24"
- Presente los principales resultados de un Análisis Descriptivo y Exploratorio de los datos. Haga énfasis en la relación que pueda existir entre las variables
Como tenemos una categoría de “24” en la variable RAD que me hace dudar que pueda ser un dato atípico entonces realizo un diagrama de barras
library(ggplot2)
RAD_cont = as.data.frame(table(data_r$RAD))
colnames(RAD_cont) = c("RAD","Frecuencia")
#Gráfico
ggplot(data=RAD_cont, aes(x=RAD, y=Frecuencia))+
geom_bar(stat = "identity", fill="steelblue", position = position_dodge())+
geom_text(aes(label=Frecuencia), vjust=1.6, color="white", size=4.5)+
ggtitle ("Diagrama de barras para la \nvariable RAD")+
theme (plot.title = element_text(#family="Comic Sans MS",
size=rel(2),
vjust=2,
hjust = 0.5,
face="bold",
color="#8B3626",
lineheight=1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-1.5, colour="black", size=rel(1.5)))+
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="black", size=rel(1.5))) No es un dato atípico, es más, es la categoría con mayor frecuencia.
Revisemos el diagrama de barra para la variable CHAS
library(ggplot2)
CHAS_cont = as.data.frame(table(data_r$CHAS))
colnames(CHAS_cont) = c("Chas","Frecuencia")
#Gráfico
ggplot(data=CHAS_cont, aes(x=Chas, y=Frecuencia))+
geom_bar(stat = "identity", fill="steelblue")+
geom_text(aes(label=Frecuencia), vjust=1.6, color="white", size=4.5)+
ggtitle ("Diagrama de barras para la \nvariable CHAS")+
theme (plot.title = element_text(#family="Comic Sans MS",
size=rel(2),
vjust=2,
hjust = 0.5,
face="bold",
color="#8B3626",
lineheight=1.5)) +
theme(axis.title.x = element_text(face="bold", vjust=-1.5, colour="black", size=rel(1.5)))+
theme(axis.title.y = element_text(face="bold", vjust=1.5, colour="black", size=rel(1.5))) CHAS_cont## Chas Frecuencia
## 1 0 471
## 2 1 35
Hay muchas casas más que no limitan con el río
Veamos el comportamiento del pago en función de estas variables categóricas usando box plots y diagramas de violin
library(gridExtra)
options(repr.plot.width=8, repr.plot.height=8)
fig1 <- ggplot(data_r, aes(x=RAD, y=MEDV))+geom_boxplot()
fig2 <- ggplot(data_r, aes(x=CHAS, y=MEDV))+geom_boxplot()
grid.arrange(fig1,fig2, ncol=2, nrow=2)library(ggplot2)
library(gridExtra)
options(repr.plot.width=8, repr.plot.height=8)
violin1 <- ggplot(data_r, aes(x = RAD, y = MEDV, fill = RAD)) +
geom_violin(trim = FALSE) +
geom_boxplot(width = 0.02) +
theme(legend.position = "none")
violin2 <- ggplot(data_r, aes(x = CHAS, y = MEDV, fill = CHAS)) +
geom_violin(trim = FALSE) +
geom_boxplot(width = 0.02) +
theme(legend.position = "none")
grid.arrange(violin1,violin2, ncol=1, nrow=2)De acuerdo al análisis del precio promedio en función de la variable CHAS las casas que limitan con el río tienen mayor precio que las que no lo hacen. Además estas que no limitan con el río tienen una fuerte concentración en la media de modo que el rango intercuartílico es menor, esto quire decir que tienden a tener un promedio de precio similar, pero a simple vista se ve que hay demasiados valores atípicos con precio muy similares los de CHAS = 1. Para las casas que limitan con el río tienen un fuerte sesgo y valores muy concentrados por encima del 75% pero que no llegan a ser datos atípicos.
Para la variable RAD lo que podemos observar es muchas diferencias en las medias para cada categoría. Algo muy interesante es el cambio de la categoría 8 a 24. Para 8 de índice de accesibilidad a carreteras radiales se encuentran los valores más altos y para 24 se encuentran los valores más bajos.
Revisamos los diagramas de frecuencia para todas las variables cuantitativas
library(dplyr)
library(gridExtra)
library(tidyverse) # metapackage of all tidyverse packages
options(repr.plot.width=12, repr.plot.height=12)
f1 <- ggplot(data_r, aes(x=CRIM)) + geom_histogram()
f2 <- ggplot(data_r, aes(x=ZN)) + geom_histogram()
f3 <- ggplot(data_r, aes(x=INDUS)) + geom_histogram()
f4 <- ggplot(data_r, aes(x=NOX)) + geom_histogram()
f5 <- ggplot(data_r, aes(x=RM)) + geom_histogram()
f6 <- ggplot(data_r, aes(x=AGE)) + geom_histogram()
f7 <- ggplot(data_r, aes(x=DIS)) + geom_histogram()
f8 <- ggplot(data_r, aes(x=TAX)) + geom_histogram()
f9 <- ggplot(data_r, aes(x=PTRATIO)) + geom_histogram()
f10 <- ggplot(data_r, aes(x=B)) + geom_histogram()
f11 <- ggplot(data_r, aes(x=LSTAT)) + geom_histogram()
f12 <- ggplot(data_r, aes(x=MEDV)) + geom_histogram()
grid.arrange(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12, ncol=3, nrow=4)A grandes rasgos podemos observar cada una del comportamiento de las variables numéricas. Veamos las gráficas de dispersión
options(repr.plot.width=12, repr.plot.height=12)
dis1 <- ggplot(data_r, aes(x=CRIM, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis2 <- ggplot(data_r, aes(x=ZN, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis3 <- ggplot(data_r, aes(x=INDUS, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis4 <- ggplot(data_r, aes(x=NOX, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis5 <- ggplot(data_r, aes(x=RM, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis6 <- ggplot(data_r, aes(x=AGE, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis7 <- ggplot(data_r, aes(x=DIS, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis8 <- ggplot(data_r, aes(x=TAX, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis9 <- ggplot(data_r, aes(x=PTRATIO, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis10 <- ggplot(data_r, aes(x=B, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
dis11 <- ggplot(data_r, aes(x=LSTAT, y=MEDV)) + geom_point()+ geom_smooth(method=lm)
#grid.arrange(dis1,dis2,dis3,dis4,dis5,dis6,dis7,dis8,dis9,dis10,dis11, ncol=3, nrow=4)
grid.arrange(dis1,dis2,dis3,dis4, ncol=2, nrow=2)grid.arrange(dis5,dis6,dis7,dis8, ncol=2, nrow=2)grid.arrange(dis9,dis10,dis11,ncol=2, nrow=2)library(corrplot)## Warning: package 'corrplot' was built under R version 4.1.2
## corrplot 0.92 loaded
correlacion<-round(cor(data), 2)
corrplot(correlacion, method="number", type="upper")Observando estas gráficas de dispersión y la tabla que muestra la correlación de Pearson. Existen dos variables numéricas que tienen una correlación de 0.7 y 0.74 que son RM Y LSTAT respectivamente. El RM indica que el precio promedio de las casas son directamente proporcional al número de baños. Y LSTAT, con pendiente negativa indica que entre más grande es el porcentaje de estatus inferior de la población el precio es menor, en otras palabras el estatus es a simple vista un fuerte indicador lineal para valorar el precio de una casa.
Estas son las relaciones más fuertes en contraste con la variable de interés “MEDV” sin embargo en el gráfico vemos que DIS parece tener una fuerte relación lineal con INDUS, NOX y AGE con pendiente negativa.
Proponga el mejor modelo de regresión lineal simple posible para la última columna de la base de datos (valor medio comercial de casas de uso residencial en miles de dólares).
Proponga el mejor modelo de regresión lineal simple posible para la última columna de la base de datos (valor medio comercial de casas de uso residencial en miles de dólares).
Verifique los supuestos del modelo. Implemente anális de Residuos(figuras), calcule y dibuje los residuos estudentizados.
Reporte los p_valores de las pruebas de hipótesis que fueron usadas, además del planteamiento de tales pruebas.
Veamos los parámetros y analicemos los estadísticos para encontrar el mejor modelo para la variable MEDV en función de RM y LSTAT independientemente.
- LSTAT vs MEDV
modelo1 = lm(MEDV~LSTAT, data = data_r)
summary(modelo1)##
## Call:
## lm(formula = MEDV ~ LSTAT, data = data_r)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.168 -3.990 -1.318 2.034 24.500
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 34.55384 0.56263 61.41 <2e-16 ***
## LSTAT -0.95005 0.03873 -24.53 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.216 on 504 degrees of freedom
## Multiple R-squared: 0.5441, Adjusted R-squared: 0.5432
## F-statistic: 601.6 on 1 and 504 DF, p-value: < 2.2e-16
mean(data_r$MEDV)## [1] 22.53281
El p_valor es igual al p_valor del estadístico F porque sólo tenemos una variable predictora. Este es muy pequeño por lo tanto rechazamos la hipótesis nula y aceptamos que estos parámetros tienden a generar una tendencia(la pendiente no es 0). El R^2 = 0.542. De modo que la variable LSTAT es capaz de explicar el 54.32% de la variabilidad en el precio de viviendas. El RSE = 6.216 indica que en promedio cualquier predicción se aleja 6.22 unidades del valor real. Así que si promediamos el MEDV tenemos 22.53281, RSE/mean(data_r$MEDV) = 6.216/22.533:
6.216/mean(data_r$MEDV)## [1] 0.2758644
AIC(modelo1)## [1] 3288.975
BIC(modelo1)## [1] 3301.655
Se observa incrementos de entorno a un 27.6% del error debido al uso de este modelo
Validemos los supuestos del modelo anterior
options(repr.plot.width=5, repr.plot.height=5)
par(mfrow=c(2,2))
plot(modelo1)Se observa que los 4 gráficos no presentan las distribuciones ideales para cada uno.
residuales <- residuals(modelo1)
mean(residuales)## [1] 6.600194e-16
Asumiendo H0: No hay autocorrelación en los errores
#install.packages("lmtest")
library(lmtest) ## Warning: package 'lmtest' was built under R version 4.1.2
dwtest(modelo1)##
## Durbin-Watson test
##
## data: modelo1
## DW = 0.8915, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Como p_value es < 0.05 rechazamos H0 y validamos que la autocorrelación en los errores es mayor a 0. Validemos la homoscedasticidad de los datos asumiendo que H0: hay homoscedasticidad
bptest(modelo1) ##
## studentized Breusch-Pagan test
##
## data: modelo1
## BP = 15.497, df = 1, p-value = 8.262e-05
Observamos que p_value < 0.05 de modo que rechazamos la hipótesis nula, así que los datos no tienen homoscedasticidad, esto lo podemos observar en las gráficas anteriores, el comportamiento de los puntos al final no siguen una línea recta (primer gráfico y segundo) Así que no podemos confiar mucho con este modelo.
Ahora veamos la normalidad, siendo H0: Hay normalidad.
#install.packages("tseries")
library(tseries)## Warning: package 'tseries' was built under R version 4.1.2
jarque.bera.test(residuales)##
## Jarque Bera Test
##
## data: residuales
## X-squared = 291.37, df = 2, p-value < 2.2e-16
hist(residuales) El p_value < 0.05. No hay normalidad. O sea que la distribución de los residuos para cada punto de nuestro modelo lineal no tiende a tener una distribución normal.
- RM vs MEDV
modelo2 = lm(MEDV~RM, data = data_r)
summary(modelo2)##
## Call:
## lm(formula = MEDV ~ RM, data = data_r)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.346 -2.547 0.090 2.986 39.433
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -34.671 2.650 -13.08 <2e-16 ***
## RM 9.102 0.419 21.72 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.616 on 504 degrees of freedom
## Multiple R-squared: 0.4835, Adjusted R-squared: 0.4825
## F-statistic: 471.8 on 1 and 504 DF, p-value: < 2.2e-16
mean(data_r$RM)## [1] 6.284634
El p_valor es igual al p_valor del estadístico F porque sólo tenemos una variable predictora. Este es muy pequeño por lo tanto rechazamos la hipótesis nula y aceptamos que estos parámetros tienden a generar una tendencia(la pendiente no es 0). El R^2 = 0.4825. De modo que la variable LSTAT es capaz de explicar el 48.25% de la variabilidad en el precio de viviendas. El RSE = 6.616 indica que en promedio cualquier predicción se aleja 6.616 unidades del valor real. Así que si promediamos el MEDV tenemos 22.53281, RSE/mean(data_r$MEDV) = 6.616/22.533:
6.616/mean(data_r$MEDV)## [1] 0.2936163
AIC(modelo2)## [1] 3352.151
BIC(modelo2)## [1] 3364.831
Se observa incrementos de entorno a un 29.4% del error debido al uso de este modelo
Validemos los supuestos del modelo anterior
options(repr.plot.width=5, repr.plot.height=5)
par(mfrow=c(2,2))
plot(modelo2) Se observa que los 4 gráficos no presentan las distribuciones ideales para cada uno.
residuales <- residuals(modelo2)
mean(residuales)## [1] 3.56064e-17
Asumiendo H0: No hay autocorrelación en los errores
#install.packages("lmtest")
library(lmtest)
dwtest(modelo2)##
## Durbin-Watson test
##
## data: modelo2
## DW = 0.68362, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Como p_value es < 0.05 rechazamos H0 y validamos que la autocorrelación en los errores es mayor a 0.
Validemos la homoscedasticidad de los datos asumiendo que H0: hay homoscedasticidad
bptest(modelo2) ##
## studentized Breusch-Pagan test
##
## data: modelo2
## BP = 0.0069871, df = 1, p-value = 0.9334
Observamos que p_value > 0.05 de modo que no rechazamos la hipótesis nula, así que los datos si tienen homoscedasticidad, esto lo podemos observar en las gráficas anteriores, el comportamiento de los puntos tienden a seguir una línea recta (primer gráfico y segundo).
Ahora veamos la normalidad, siendo H0: Hay normalidad.
#install.packages("tseries")
library(tseries)
jarque.bera.test(residuales)##
## Jarque Bera Test
##
## data: residuales
## X-squared = 612.45, df = 2, p-value < 2.2e-16
hist(residuales)El p_value < 0.05. indicando que no hay normalidad. O sea que la distribución de los errores para cada punto de nuestro modelo lineal no tiende a tener una distribución normal. Sin embargo al hacer el histograma de estos residuales vemos el comportamiento “normal” el cuál tiene menor sesgo en comparación al modelo 1. El BIC del módelo 1 es 3301.655 y el del módelo 2 es 3364.831; En este caso el modelo 1 tienta a ser mejor que el modelo 2.
- ¿Existen datos atípicos, influyentes o que llamen su atención?
Del modelo seleccionado si hay datos atípicos que llamen la atención. Hay casas que en el promedio de venta es muy alto en cuanto tienen pocas habitaciones por ejemplo algunos que en promedio tienen 5, 6 y 7 habitaciones y alcanzan a valer tanto como una de 9 habitaciones
- Interprete su modelo en térmilos de la variable que incluye
Entonces haciendo contraste de los dos modelos tenemos que el modelo 2 se ajusta mejor a los datos reales. Por que si bien el r^2 es menor y el incremento es entorno a un 29.4% que es mayor al modelo 1 y el BIC es un poquito mayor. La validación fue la clave para indicar que este es mejor puesto que por lo menos la prueba de homoscedasticidad se cumple y la distribución de los residuales es mejor(gáficamente tiende a ser “más” normal).
Así que nuestro modelo lineal $y = _0 + _1 x -> y = -34.671 + 9.102 x $, interpretamos así:
si el RM es 0 el valor promedio de la vivienda es de -34671 dólares. Claramente esto no es real, hay que saber que RM siempre será mayor 0 porque no podemos comprar una casa sin habitaciones y además nos regalarían dinero, no tiene sentido.
Por cada habitación que se desea el valor de la casa aumenta en un promedio de 9102 dólares
- Investigación : A partir del modelo, suponga algún valor para la variable respuesta y reporte un Intervalo de Confianza del 95% para el pronóstico de la variable respuesta
Para tener un vistazo muy general de nuestro intervalo de confianza de 95% para un coeficiente de una regresión (sea el intercepto o sea la pendiente) se construye sumando/restando a nuestro estimado de ese coeficiente, 2 errores estandard de ese coeficiente
Revisando el summary del modelo 2 tenemos que el error estándar para beta cero = 2.650 y para beta uno = 0.419. Así que: - Un intervalo de confianza para la pendiente de la regresión de RM vs MEDV está dado por: – 9.102 +/- 2*0.419 ->
L = 9.102-2*0.419
U = 9.102+2*0.419
c(L,U)## [1] 8.264 9.940
tendré el intervalo de confianza para la pendiente de [8.264, 9.940] con un nivel de significancia 5%. Todos los valores que caen en este rango son “consistentes” con este set de datos
– -34.671 +/- 2*2.650
L = -34.671 - 2*2.650
U = -34.671 + 2*2.650
c(L,U)## [1] -39.971 -29.371
tendré el intervalo de confianza para el intercepto de [-39.971, -29.371] con un nivel de significancia 5%. Todos los valores que caen en este rango son “consistentes” con este set de datos
Siendo más rigurosos podemos usar la fórmula correspondiente:
- Intervalo de confianza con 5% de significancia para \(\beta_0\) :
\[I.C=\left( \hat{\beta_0}- t_{\alpha /2} S_{\hat{\beta_0}}<\beta <\hat{\beta_0}+ t_{\alpha /2} S_{\hat{\beta_0}}\right)\]
df = dim(data_r)[1] -2
cuantil_alfa_medios = qt(p = 0.05/2, df = df, lower.tail = FALSE)
c(-34.671 - cuantil_alfa_medios*2.650, -34.671 + cuantil_alfa_medios*2.650)## [1] -39.87741 -29.46459
- Intervalo de confianza con 5% de significancia para \(\beta_1\) :
\[I.C=\left( \hat{\beta_1}- t_{\alpha /2} S_{\hat{\beta_1}}<\beta <\hat{\beta_1}+ t_{\alpha /2} S_{\hat{\beta_1}}\right)\]
df = dim(data_r)[1] -2
cuantil_alfa_medios = qt(p = 0.05/2, df = df, lower.tail = FALSE)
c(9.102 - cuantil_alfa_medios*0.419, 9.102 + cuantil_alfa_medios*0.419)## [1] 8.278798 9.925202
- Sin embargo r nos facilita para encontrar un valor muy próximo de los intervalos usando la función confint:
confint(modelo2)[1,]## 2.5 % 97.5 %
## -39.87664 -29.46460
confint(modelo2)[2,]## 2.5 % 97.5 %
## 8.278855 9.925363
Nuestro modelo de regresión lineal estaría dado \(y=([-39.88, -29.46]+[8.28, 9.93] * x)* 1000\) ahora suponiendo que deseamos comprar una casa con 8 habitaciones tenemos que:
x=8
c((-39.88 + 8.28* x)* 1000, (-29.46 + 9.93 * x)* 1000)## [1] 26360 49980
Para una casa de 8 habitaciones se tiene con un nivel de significancia del 5% que el precio ronde los 26360 hasta 49980 dólares