library(readxl)
datos_vivienda <- read_excel("C:/Users/Lenovo/Downloads/datos_vivienda.xlsx")
View(datos_vivienda)
A continuación, se realiza un análisis exploratorio que nos permitirá describir la base de datos con la que trabajaremos:
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
Como se puede ver, esta base de datos tiene 26 observaciones y 2 variables cuantitativas las cuales son: area construida y precio por millon.
Tenemos que, de las ofertas de vivienda la que menor area tiene esta en 80 \(m^{2}\), la de mayor area es de 195 \(m^{2}\) sin embargo, en promedio el area de la vivienda esta en 115.7 \(m^{2}\). Por otro lado, de todas las viviendas ofertadas, la que menor precio en venta tiene es 240 millones de pesos, la de mayor precio esta en 480 millones de peso pero en promedio el precio en venta esta en 332.1 millones de pesos.
hist(x=datos_vivienda$Area_contruida, main= "Histograma",xlab="Área construida", ylab= "Frecuencia")
Del histograma anterior, se puede concluir que hay mas viviendas ofertadas entre 80 \(m^2\) y 100 \(m^2\).
Teniendo en cuenta la gráfica, se puede observar que a mayor area construida, mayor sera el precio de la vivienda ofertada.
plot(datos_vivienda$Area_contruida,datos_vivienda$precio_millon,main= "Correlación entre las variables",xlab = "Area construida", ylab = "Precio")
El coeficiente de correlación es de 0.91, lo cual significa que existe una relación positiva entre las dos variables por esta razón, como se mencionó anteriormente en el análisis de la gráfica, a mayor area construida, mayor sera el precio de la vivienda ofertada.
cor(datos_vivienda$Area_contruida,datos_vivienda$precio_millon)
## [1] 0.9190295
Los valores de los estimadores de los parametros son: \(\beta_{0}=86.234\), \(\beta_{1}=2.124\) y \(\sigma^2=33.05\). Por tanto, el modelo de regresión lineal simple estimado es y = 86.234 + 2.124x + e, con e~N(0,\(\sigma^2\)).
El \(\beta_{1}=2.124\) nos indica que por cada \(m^2\) adicional que tenga la vivienda, el precio de ella aumentara en 2.124 millones de pesos. Adicionalmente se observa que el coeficiente es significativamente distinto de cero dado que el p-valor es muy pequeño.
mod=lm(precio_millon~Area_contruida,data=datos_vivienda)
summary(mod)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = datos_vivienda)
##
## 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
Recta que ajusta los datos
library(ggplot2)
ggplot(datos_vivienda, aes(x=Area_contruida, y=precio_millon), main= "Grafica de la recta") +
geom_point() +
geom_smooth(method='lm', formula=y~x, se=FALSE, col='dodgerblue1') +
theme_light()
Por cada \(m^2\) que tenga la vivienda, el precio de esta aumentara entre 1.7401 millones de pesos y 68.740 millones de pesos.El coeficiente no es igual a cero, en el summary de modelo se puede identificar por medio de la prueba t, que el coeficiente es significativo, dado que el p-valor es muy pequeño.
LI= 2.124 - (qt(p = 0.975,df = 24)*0.186)
LS= 2.124 + (qt(p = 0.975,df = 24)*0.186)
c(LI,LS)
## [1] 1.740115 2.507885
Se observa que el ajuste del modelo es de \(R^2=0.8446\) es decir que, el modelo explica el 84% del precio de la vivienda ofertada.
Cual seria el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones seria una buena oferta? Que consideraciones adicionales se deben tener?
R/ El precio promedio estimado para un apartamento de 110 metros cuadrados es de 319.8 millones de pesos por tanto, si le estan ofrecienco un apartamento de la misma zona con la misma cantidad de metros cuadrados por un precio de 200 millones seria una buena oferta puesto que, realizando un intervalo de confianza del 95%, con esta cantidad de metros cuadrados se encuentran viviendas entre 306.3 millones y 333.4 millones.
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
A continuación, realizaremos los supuestos del modelo y se validaran graficamente.
Media cero: Se cumple por defecto.
Varianza Constante: Se observa en la grafica 1 de residuales vs ajustados que la linea roja no es recta, es mas bien curva y ademas, se identifica que los residuos parecen tener una tendencia. No se valida y tambien, podemos identificar mediante la linea roja que hace falta un termino cuadratico que no estamos teniendo en cuenta.
Normalidad: Se observa en la grafica 2 que los datos se ajustan bien a la linea de normalidad en el qqplot. Se valida.
Linealidad: En la tercera grafica, no se ve una línea horizontal con puntos de distribución iguales (al azar), se puede identificar que los residuales comienzan a extenderse más a lo largo del eje x. No se valida.
par(mfrow=c(2,2))
plot(mod)
Una solución para ajustar el modelo, es agregando un término de orden superior al modelo por ejemplo, como se menciono anteriormente, lo ideal seria agregar un termino cuadratico puesto que, en la grafica Fitted values vs Residual la linea roja tiene forma de parabola.
A continuación, agregaremos un termino cuadratico con el fin de realizar una transformacion que mejore el ajuste de los datos:
trans = datos_vivienda$Area_contruida^2
mod2 = lm(precio_millon~Area_contruida + trans, data = datos_vivienda)
summary(mod2)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + trans, data = datos_vivienda)
##
## Residuals:
## Min 1Q Median 3Q Max
## -34.927 -14.471 -3.777 16.504 35.073
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.949e+02 6.648e+01 -4.435 0.00019 ***
## Area_contruida 8.488e+00 1.090e+00 7.787 6.80e-08 ***
## trans -2.433e-02 4.142e-03 -5.874 5.49e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.35 on 23 degrees of freedom
## Multiple R-squared: 0.9378, Adjusted R-squared: 0.9324
## F-statistic: 173.5 on 2 and 23 DF, p-value: 1.332e-14
Notemos que el error estándar residual es 21.35 es decir, menor al del primer modelo (33.05) ademas, el indicador de bondad y ajuste \(R^2\) es mayor, ahora el modelo transformado explica el 93% del precio de la vivienda ofertada.
Ahora, analicemos como se comportan los supuestos de este segundo modelo de manera grafica.
Media cero: Se cumple por defecto.
Varianza Constante: Se observa en la grafica 1 de residuales vs ajustados que el comportamiento es aleatorio no con alguna tendencia en particular que indique problemas. Linea roja casi recta. Se valida graficamente.
Normalidad: Se observa en la grafica 2 que los datos se ajustan bien a la linea de normalidad en el qqplot. Es decir se valida graficamente.
Independencia: En la tercera grafica, se identifican puntos de distribución dispersos, sin una tendencia en especifico. Linea roja casi recta. Se valida graficamente.
par(mfrow=c(2,2))
plot(mod2)
Finalmente, se puede identificar que se ajusta mejor el modelo transformado al cual se le añadio un termino cuadratico.
Referencia: https://www.ccg.unam.mx/~vinuesa/R4biosciences/docs/Tema9_regresion.html