library(readxl)
datos_vivienda <- read_excel("datos_vivienda.xlsx")
attach(datos_vivienda)
datos_vivienda
## # A tibble: 26 x 2
## Area_contruida precio_millon
## <dbl> <dbl>
## 1 86 250
## 2 118 385
## 3 130 395
## 4 181 419
## 5 86 240
## 6 98 320
## 7 170 480
## 8 96 268
## 9 85 240
## 10 170 450
## # ... with 16 more rows
Se observa que la base de datos contiene información del registro del valor de una vivienda (y) en millones de pesos COP de acuerdo a el área construida (x) en metros cuadrados.
El precio promedio de una vivienda es de 332 millones de pesos mientras que el área construida promedio de las viviendas es de 115.7 metros cuadrados.
El mínimo de metros cuadrados construidos de una vivienda es de 80 y el máximo de 195, mientras que el mínimo precio en millones de pesos de una vivienda es de 240 y el máximo es de 480.
summary(datos_vivienda)
## Area_contruida precio_millon
## Min. : 80.0 Min. :240.0
## 1st Qu.: 86.0 1st Qu.:251.2
## Median : 97.0 Median :305.0
## Mean :115.7 Mean :332.1
## 3rd Qu.:130.0 3rd Qu.:395.0
## Max. :195.0 Max. :480.0
hist(precio_millon,col="cyan")
hist(Area_contruida,col="coral")
En el histograma de el precio por millón podemos observar que su intervalo va de 200 a 500 millones y las viviendas que se encuentran entre un precio de 300 a 350 y de 400 a 450 tienen menor frecuencia.
También podemos observar que en el histograma del Área construida no se registran viviendas con \(m^2\) de 140 a 160, en adición la mayoría de viviendas se encuentran en un intervalo de 80 a 100 \(m^2\) de área construida.
Veamos la correlación entre área construida y precio por millon: Podemos observar en la gráfica una relación creciente, a medida que aumenta el área construida también lo hace el precio en millones. Y su relación es fuerte y positiva de acuerdo con el coeficiente de correlación de pearson que da 0.92.
plot(Area_contruida,precio_millon,col="purple")
cor(Area_contruida,precio_millon)
## [1] 0.9190295
Estimamos un modelo de regresión lineal simple que especifique la variación entre el precio por millón según el área construida.
Una posible interpretación del coeficiente \(\beta_0\) sería el caso donde se tenga un área pero no construida, es decir, el precio del lote sin la vivienda construida. En este caso el lote tendría un valor de aproximadamente 86.23 millones
Por otro lado el \(\beta_1\) se interpreta como: por cada \(m^{2}\) adicional en el área construida se espera que el precio de la vivienda incremente en promedio 2.124 millones de pesos.
MODELO ESTIMADO precio_millon= 86.234+(2.124*(Area_construida))
mod=lm(precio_millon~Area_contruida)
mod
##
## Call:
## lm(formula = precio_millon ~ Area_contruida)
##
## Coefficients:
## (Intercept) Area_contruida
## 86.234 2.124
Como vemos en el intervalo de confianza (1.74 , 2.51) que son los posibles valores que puede tomar \(\beta_1\), el cero no se ecuentra en el intervalo y así podemos concluir que \(\beta_1\) es significativo en el modelo.
Con una confianza del 95% se puede concluir que por cada \(m^{2}\) adicional en el área construida, el verdadero incremento en el valor de \(\beta_1\) se encuentra entre 1.74 y 2.5 millones de pesos del precio de la vivienda.
beta1_e=2.124
ee_beta=0.186
t=qt(0.975,df=24)
LI=beta1_e-(t*0.186)
LS=beta1_e+(t*0.186)
c(LI,LS)
## [1] 1.740115 2.507885
Hipótesis: \(Ho\) : \(\beta_1\) = 0 VS \(H1\) : \(\beta_1\) not= 0
Estadístico de prueba: \(t_0\) = beta1_e/ee_beta ~ bajo H0 \(t_{26-2}\)
Región de rechazo: rechazo \(Ho\) si \(|t_0|\)>\(t_{0.025,24}\)
Con una significancia de 0.05 \(t_0\)=11.41935 es mayor a \(t\)=2.06 por lo tanto cae en la región de rechazo y hay suficente evidencia muestral para rechazar la hipótesis nula: Ho:\(\beta_1\)=0 , concluimos que \(\beta_1\) es diferente de cero, así que es significativa y es importante dentro del modelo.
Tanto por el intervalo de confianza como con la prueba de hipótesis llegamos a la misma conclusión: \(\beta_1\) es diferente de cero y por lo tanto es significativa.
#PRUEBA DE HIPÓTESIS PARA $\beta_1$
#HIPÓTESIS: Ho:$\beta_1$=0 VS H1:$\beta_1$!=0
#ESTADÍSTICO DE PRUEBA:
t0=beta1_e/ee_beta
t0
## [1] 11.41935
t=qt(p=0.975,df=24)
t
## [1] 2.063899
#Region de rechazo
abs(t0)>t
## [1] TRUE
Se observa que el ajuste del modelo es \(R^2=0.8446\) es decir que el modelo explica el 84.46% de la variabilidad de el precio en millones de las viviendas.
summary(mod)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.673 -25.612 -6.085 24.875 67.650
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.234 22.479 3.836 0.000796 ***
## Area_contruida 2.124 0.186 11.422 3.45e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared: 0.8446, Adjusted R-squared: 0.8381
## F-statistic: 130.5 on 1 and 24 DF, p-value: 3.45e-11
Para determinar el indicador de Bondad, primero obtenemos la tabla ANOVA
PRUEBA DE HIPÓTESIS \(H_0:E[Y|X]= \beta_0+\beta_1 X\) vs \(H_1:E[Y|X]\not= \beta_0+\beta_1X\)
Estadístico de prueba: Fajuste: \(MSLOF/MSPE ~ f_{k-2,n-k}\)
Región de rechazo: se rechaza \(H_0\) si \(F{ajuste}> f_{0.05,k-2,n-k}\)
Según la tabla, los grados de libertad son 12, por lo que el número de niveles en X (k) es 14. Así, se procede a hallar el indicador de bondad \(f_{k-2,n-k}=f_(12,12)= 2.687\)
PRUEBA DE HIPÓTESIS Para el modelo se rechaza \(H_0\) ya que \(F{ajuste} = 28.11\) se encuentra en la región de rechazo y se concluye que el área construida y el precio, en las escalas que se consideran no tienen una relación lineal.
#mod<-lm(precio_millon~as.factor(Area_contruida))
table<-anova(mod)
table
## Analysis of Variance Table
##
## Response: precio_millon
## Df Sum Sq Mean Sq F value Pr(>F)
## Area_contruida 1 142480 142480 130.46 3.45e-11 ***
## Residuals 24 26212 1092
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
unique(Area_contruida)
## [1] 86.00 118.00 130.00 181.00 98.00 170.00 96.00 85.00 87.00 118.42
## [11] 134.00 80.00 89.00 195.00
#Valor F
qf(0.05,12,12,lower.tail = FALSE)
## [1] 2.686637
Para hallar \(X_1=110\) se realiza una interpolación ya que se encuentra dentro del rango, para hallar \(X_1\) se encuentra el Intervalo de Confianza.
De acuerdo con el modelo el precio promedio estimado para una vivienda de 110 \(m^{2}\) es de 319.8706 millones.
Teniendo en cuenta que una vivienda con 110 \(m^{2}\) de área construida tiene un valor entre 306 y 333 millones de pesos con un 95% de confianza, podemos destacar que si se encuentra una vivienda con las mismas características mencionadas (110\(m^{2}\) en la misma zona) en un precio de 200 millones sería una muy buena oferta debido a que es realmente económico considerando el rango entre el que se mueve el precio promedio estimado de una vivienda con dichos metros y en la msima zona.
predict(mod,list(Area_contruida = 110))
## 1
## 319.8706
predict(mod,list(Area_contruida = 110),interval = "confidence", level = 0.95)
## fit lwr upr
## 1 319.8706 306.3133 333.4279
#Y1=86.234+(2.124*110)
#Intervalo de confianza
#qt(0.025,24)*
Para validar el modelo, se realizan las siguientes pruebas del error para los supuestos de media cero, varianza constante, distribución normal e independencia.
Podemos observar sobre los supuestos \(e_i\) lo siguiente:
1.MEDIA CERO: Por definición, los errores del modelo tienen media cero y siempre se cumple por defecto.
2.VARIANZA CONSTANTE: En la gráfica 1 se analizan los patrones comunes en los gráficos de Residuales vs Valores ajustados que el comportamiento es en forma de U invertida, parece que el modelo no es lineal, entonces no es conveniente hablar de si la varianza es o no constante. Para solucionar esto se puede usar una transformación en Y que estabilice la varianza.
3.NORMALIDAD: Para el análisis de la normalidad se evalúa \(H0\): \(e_i\)~Normal se observa en la gráfica 2 que los datos se ajustan bien a la línea de normalidad, es decir, se valida H0 gráficamente.
4.INDEPENDENCIA: Dado que estos registros no corresponden a datos en el tiempo, no se tiene un orden temporal para realizar la validación de este supuesto.Se valida por definición del tipo de datos de corte transversal.
#Media cero
ei = mod$residuals
yi_mod = mod$fitted.values
round(mean(ei),3)
## [1] 0
#Gráficas
par(mfrow=c(2,2))
plot(mod)
con un gráfico dinámico podemos observar mejor el comportamiento de la varianza y su forma de U invertida
plot(yi_mod,ei,main="Varianza Constante (ei)")
require(ggplot2)
## Loading required package: ggplot2
data_val = data.frame(yi_mod,ei)
ggplot(data_val,aes(x=yi_mod,y=ei))+geom_point()+theme_bw()+geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Validamos con una prueba analítica de shapiro el supuesto de normalidad:
Hipótesis: \(Ho\): \(e_i\)~Normal VS \(H1\): \(e_i\) no se distribuye Normal
como p-value es grande (0.30) y es mayor al nivel de significancia de 0.05 entonces no tenemos la suficiente evidencia muestral para rechazar \(H0\): \(e_i\)~Normal y concluimos que los errores siguen una distribución normal.
Por ambas pruebas la gráfica y la analítica concluimos que los errores siguen una distribución normal.
shapiro.test(ei)
##
## Shapiro-Wilk normality test
##
## data: ei
## W = 0.95489, p-value = 0.3009
#alpha=0.05
El nuevo modelo yi* = \(\beta_0\) + \(\beta_1\) Xi* + \(e_i\)
xi* = -1/x
\(e_i\)~iid N(0,\(\sigma^2\)) para todo i=1,2…,26
\(\hat{yi*}\) = \(\hat{\beta_0}\) + \(\hat{\beta_1}\) Xi*
\(\hat{yi*}\) = 635.35 + 32464.72 Xi*
x=datos_vivienda$Area_contruida
y=datos_vivienda$precio_millon
transX =-1/x
transY = y
modT1=lm(transY~transX)
modT1
##
## Call:
## lm(formula = transY ~ transX)
##
## Coefficients:
## (Intercept) transX
## 635.3 32464.7
summary(modT1)
##
## Call:
## lm(formula = transY ~ transX)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.987 -16.743 -5.023 18.547 44.379
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 635.35 18.27 34.77 < 2e-16 ***
## transX 32464.72 1895.32 17.13 5.84e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 23.05 on 24 degrees of freedom
## Multiple R-squared: 0.9244, Adjusted R-squared: 0.9212
## F-statistic: 293.4 on 1 and 24 DF, p-value: 5.839e-15
cor(transY,transX)
## [1] 0.9614495
plot(transX,transY)
abline(modT1,lwd=1,col=2)
#Gráficas
par(mfrow=c(2,2))
plot(modT1)
Se observa que el ajuste del modelo transformado es \(R^2=0.9244\) es decir que el 92.44% de la variabilidad del precio en millones de una vivienda es explicado por -1/Area_construida. Además la relación es fuerte de acuerdo con el coeficiente de correlación de pearson (0.96)
1.MEDIA CERO: Por definición, los errores del modelo tienen media cero y siempre se cumple por defecto.
2.VARIANZA CONSTANTE: En la gráfica anterior se analizan los patrones comunes en los gráficos de Residuales vs Valores ajustados del modelo transformado que el comportamiento es aleatorio no con alguna tendencia muy marcada que indique problemas. Se valida gráficamente.
3.NORMALIDAD: Se observa en la gráfica que los datos se ajustan bien a la línea de normalidad en el NormalQ-Q .Se valida gráficamente.
4.INDEPENDENCIA: Dado que estos registros no corresponden a datos en el tiempo, no se tiene un orden temporal para realizar la validación de este supuesto.Se valida por definición del tipo de datos de corte transversal.
El ajuste del modelo inicial es de \(R^2=0.8446\) y el del modelo transformado es de \(R^2=0.9244\) con lo que podemos concluir que se mejoro el ajuste.
par(mfrow=c(1,2))
plot(datos_vivienda$Area_contruida,datos_vivienda$precio_millon,col="purple")
plot(transX,datos_vivienda$precio_millon,col="royalblue1")
En conclusión con el modelo transformado pudimos validar todos los supuestos mientras que en el modelo propuesto el supuesto de varianza constante no se cumplía, además también se nota un comportamiento más lineal y un mejor ajuste que comprobamos con el valor de la correlación y el \(R^2\) mencionados anteriormente.
funcion = function(x,y,alpha1){
modelo=lm(y~x)
summary(modelo)
C = confint(modelo,parm = 2 ,level = alpha1)
sup = paste("El intervalo de confianza para b1 es:(",C[1],",",C[2],")")
return(sup)
}
funcion(Area_contruida,precio_millon,0.95)
## [1] "El intervalo de confianza para b1 es:( 1.74016951529895 , 2.50777147502603 )"