# install.packages("reticulate")
library(reticulate)
use_python("C:/Users/Cesar Corregidor/anaconda3/python.exe")

INSTRUCCIONES

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:

  1. 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"
  1. 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.

  1. 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).

  2. 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).

  3. Verifique los supuestos del modelo. Implemente anális de Residuos(figuras), calcule y dibuje los residuos estudentizados.

  4. 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.

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.

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.

  1. ¿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

  1. 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í:

  1. 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:

\[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

\[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
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