Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz (datos_vivienda.xls - descarga) realizar los siguientes puntos:

1. Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados) - Incluir gráficos, indicadores apropiados e interpretarlos.

Análisis Univariado

Área de Vivienda
summary(datos$area_construida) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    80.0    86.0    97.0   115.7   130.0   195.0
desviacion_estandar_area=sd(datos$area_construida)
desviacion_estandar_area
## [1] 35.54332
hist(datos$area_construida, col="#EEAEEE", main="Histograma", xlab="Área de vivienda (m2)", ylab="Cantidad de viviendas")
abline(v=97,col="#CD1076",lwd=3)

caja=boxplot(datos$area_construida, horizontal = TRUE, col="#FFC0CB", xlab="Área de vivienda (m2)", ylab="Cantidad de viviendas")
title("Diagrama de Cajas")
stripchart(datos$area_construida, method = "jitter", pch = 19, add = TRUE, col = "#FF3E96")
abline(v=97,col="#00CDCD",lwd=3)

Interpretación:

La información generada por los datos de medida de tendencia central son: Media, con un valor de 116m2 (promedio de todos los valores) y mediana corresponde a 97m2 (valor central). La dispersión de los datos se mide por la desviación estandar que, con respecto a cero, tiene un valor de 36. En el Histograma se puede evidenciar que, 14 viviendas se encuentran entre 80 y 100 m2, 2 entre 100 y 120 m2, 5 entre 120 y 140m2, 0 en el rango de 140 y 160m2, 3 entre 160 y 180m2 y finalmente 2 entre 180 y 200 m2. En el Diagrama de caja se revisa la mediana (Q2) que es representada por la línea azul aguamarina, el tamaño de la caja me indica que hay mayor variabilidad, su ubicación dentro del cerco inferior y superior me indica asimetría en los datos, donde los puntos muestra su mayor concentración en el lado izquierdo.

Precio de la Vivienda
t.test(datos$precio_millon)
## 
##  One Sample t-test
## 
## data:  datos$precio_millon
## t = 20.613, df = 25, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  298.8982 365.2557
## sample estimates:
## mean of x 
##  332.0769
mediana_precio=median(datos$precio_millon) 
mediana_precio
## [1] 305
desviacion_estandar_precio=sd(datos$precio_millon) 
desviacion_estandar_precio
## [1] 82.14423
summary(datos$precio_millon) 
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   240.0   251.2   305.0   332.1   395.0   480.0
hist(datos$precio_millon, col="#EEAEEE", main="Histograma", xlab="Precio de las viviendas (millones)", ylab="Cantidad de viviendas")
abline(v=305,col="#CD1076",lwd=3)

caja=boxplot(datos$precio_millon, horizontal = TRUE, col="#FFDEAD", xlab="Precio de las viviendas (millones)")
title("Diagrama de Cajas")
stripchart(datos$precio_millon, method = "jitter", pch = 19, add = TRUE, col = "#EE4000")
abline(v=305,col="#1874CD",lwd=3)

Interpretación:

La información generada por los datos de medida de tendencia central son: Media, con un valor de 332m2 (promedio de todos los valores) y mediana corresponde a 305m2 (valor central). La dispersión de los datos se mide por la desviación estandar que, con respecto a cero, tiene un valor de 82. En el Histograma se puede evidenciar que, 7 viviendas se encuentran en el precio de 200 y 250 millones, 6 entre 250 y 300 millones, 1 entre 300 y 350 millones, 6 entre 350 y 400 millones, 5 entre 400 y 450 millones y finalmente 1 entre 450 y 500. En el Diagrama de caja se revisa la mediana (Q2) que es representada por la línea azul, el tamaño de la caja me indica que hay mayor variabilidad, su ubicación dentro del cerco inferior y superior me indica asimetría en los datos, donde los puntos muestra su mayor concentración en el lado izquierdo y lado derecho.


2. Realice un análisis exploratorio bivariado de datos enfocado en la relación entre la variable respuesta (y=precio) en función de la variable predictora (x=area). Incluir gráficos, indicadores apropiados e interpretarlos.

Análisis Bivariado

ggplot(data=datos, mapping=aes(x=area_construida,y=precio_millon))+geom_point(colour="#FF1493")+geom_smooth(colour="black", method = "lm")+theme_classic()+xlab("Área de vivienda (m2)")+ylab("Precio de vivienda (millones) ")+ggtitle("Diagrama de Puntos")
## `geom_smooth()` using formula 'y ~ x'

cor(datos$area_construida, datos$precio_millon, method = 'kendall')
## [1] 0.7934597
cor(datos$area_construida, datos$precio_millon, method = 'pearson')
## [1] 0.9190295
cor(datos$area_construida, datos$precio_millon, method = 'spearman')
## [1] 0.9173882

Interpretación:

En la gráfica se puede evidenciar una relación directamente proporcional entre el metro cuadrado y precio, ya que, a más metraje mayor es su valor. Por otra parte, los tres coeficientes de correlación existentes que se miden entre -1 y 1 podemo encontrara que, kendall nos da un valor de 0.79, pearson 0.92 y spearman 0.92, lo que nos indica una fuerte relación lineal entre el precio y metro cuadrado ofrecidos de las viviendas.


3. Estime el modelo de regresión lineal simple entre precio = f(area)+e. Interprete los coeficientes del modelo \(\beta 0\);\(\beta 1\) en caso de ser correcto.

model=lm(formula=precio_millon~area_construida,data=datos)
summary(model)
## 
## Call:
## lm(formula = precio_millon ~ area_construida, data = datos)
## 
## 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_construida    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
model$coefficients
##     (Intercept) area_construida 
##        86.23387         2.12397

Interpretación:

El modelo de regresión simple para este caso se mostraría así:

Y= \(\beta 0\) + \(\beta 1\) X

Precio = 86.234 + 2.124 (Área)

Cuando el área es 0, es decir, no hay vivienda (porque ésta la derribaron por su pésimo estado de deterioro o se hizo el negocio sólo sobre lote, etcétera) sino sólo lote, el valor de éste es de $86.234.000. Matemáticamente se demostraría así:

Precio = 86.234 + 2.124 (0)

Precio = 86.234 + 0

Precio = 86.234

Por último, hay que tener en cuenta que, por cada metro cuadrado adicional, el precio de la vivienda aumenta en $2.124.000, podríamos deducir entonces que éste es el valor del metro cuadrado. Matemáticamente sería así:

Precio = 86.234 + 2.124 (1)

Precio = 86.234 + 2.124

Precio = 88.358


4. Construir un intervalo de confianza (95%) para el coeficiente 1, interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipotesis t.

confint(object=model, level=0.95)
##                    2.5 %     97.5 %
## (Intercept)     39.83983 132.627917
## area_construida  1.74017   2.507771
summary(model)
## 
## Call:
## lm(formula = precio_millon ~ area_construida, data = datos)
## 
## 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_construida    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

Interpretación:

Se puede evidenciar que, el coeficiente 1 (\(\beta 1\)), no tiene un valor cero cuando se tiene un intérvalo de confianza del 95%, pues oscila entre 1.74 y 2.50. Recordar que éste representa la pendiente de la recta y se relaciona directamente con el área de las viviendas. Por otro lado, la hipótesis t, es decir, el p-valor, representa un 0.000796, por su valor bajo se rechaza la hipótesis de que el coeficiente 1 sea cero.


5. Calcule e interprete el indicador de bondad y ajuste R2.

coe=cor(datos$area_construida, datos$precio_millon)
cor=coe^2
cor
## [1] 0.8446152

Interpretación:

El indicador de bondad y ajuste R2 muestra la influencia de la variable X en la variable Y. Dado lo anterior, se puede deducir que, el precio de la vivienda depende en un 84.46% del área de la misma.


6. ¿Cuál seria el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartemento en la misma zona con 110 metros cuadrados en un precio de 200 millones seria una buena oferta?, ¿Qué consideraciones adicionales se deben tener?

(predict(model, list(area_construida=110)))
##        1 
## 319.8706

Para validar el resultado anterior, se puede realizar matemáticamente así:

Y= \(\beta 0\) + \(\beta 1\) X

Precio = 86.234 + 2.124 (Área)

Precio = 86.234 + 2.124 (110)

Precio = 86.234 + 233.640

Precio = 319.870

Interpretación:

El precio de un apartamento de 110m2 sería de $319.870.000; sin embargo, un inmueble con el mismo metraje en la misma zona por valor de 200 millones habría qué revisarlo. No necesariamente es una buena oferta. Si bien miramos en el punto anterior, el área de la vivienda sólo influye en un porcentaje sobre el precio, hay que verificar las otras variables que pueden complementar y determinar el valor de la vivienda, como lo es: en qué estado se encuentra la propiedad (tiene deterioro o no), ¿es propiedad horizontal o es unidad residencial? y ¿qué zonas verdes tiene?, precio de administración o portería (si la tiene), parqueaderos (privado - ¿cuántos tiene?, asignado o comunitarios), estado de la via, piso (es decir, la altura en que se encuentra en la torre o el edificio), ¿tiene vista? (si o no), estado jurídico del apartamento, ¿tiene remodelación? (si o no), vetustez del inmueble (es decir, la edad), distribución del apartamento (no. habitaciones, baños, patio - si o no, sala de estár - si o no, balcón - si o no), ¿está hipotecada? (si o no), ¿cómo es el tema de seguirdad?, etcétera; y, sobre todo, cuales son los motivos por el cuál el propietario quiere vender.


7. Realice la validación de supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos.

plot(model, col="#00CD00", pch=16, which=1, main="Gráfico de Residuales vs Valores ajustados")

Interpretación:

La gráfica normalmente debe mostrar aleatoriedad, ya que éstos no deben mostar ningún comportamiento; sin embargo, para este caso de estudio, los residuos tienden a distribuirse a lo largo de la línea y=0, es decir, habría homocedasticidad. Por último, lo valores en los puntos indican que son atípicos.

plot(model, col="#00CD00", pch=16, which=2, main="Gráfico de Distribución Normal")

Interpretación:

La gráfica normalmente debe mostrar que los residuos deben situarse a lo largo de la línea punteada; sin embargo, se logra observar una gran dispersión de los residuos de la línea, incluído puntos atípicos.

plot(model, col="#00CD00", pch=16, which=3, main="Gráfico de Escala - Ubicación")

Interpretación:

Si la varianza es constante en esta gráfica, es decir, hay homocedasticidad, se debe observar una línea roja horizontal y los residuales deben estar distribuidos de manera constante a lo largo de ella. Claramente para este caso, se evidencia que no cumple con los patrones establecidos.

plot(model, col="#00CD00", pch=16, which=5, main="Gráfico de Residuales vs Valor de la Palanca")

Interpretación:

Esta gráfica sirve para encontrar las observaciones influyentes (leverage); si no existen observaciones influyentes, no debe observarse una curva punteada roja, o en caso de verse, deben ubicarse ligeramente en las esquinas de la gráfica y, por último, no deben existir puntos en esa zona. Para este estudio si se observa linea punteada en la esquina con un dato atípico (no. 25), lo cuál indica que hay observarciones influyentes pero no es muy marcado, es sutíl.


8. De ser necesario, realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

Para este punto se pueden hacer diferentes transformaciones:

Transformación Exponencial

model_exponencial=lm(log(precio_millon)~area_construida, data=datos)
summary(model_exponencial)
## 
## Call:
## lm(formula = log(precio_millon) ~ area_construida, data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.16503 -0.09255 -0.02221  0.08600  0.19822 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     5.048147   0.073371   68.80  < 2e-16 ***
## area_construida 0.006288   0.000607   10.36 2.46e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1079 on 24 degrees of freedom
## Multiple R-squared:  0.8172, Adjusted R-squared:  0.8096 
## F-statistic: 107.3 on 1 and 24 DF,  p-value: 2.456e-10
cor(datos$area_construida, log(datos$precio_millon))
## [1] 0.9040102
gvlma(model_exponencial)
## 
## Call:
## lm(formula = log(precio_millon) ~ area_construida, data = datos)
## 
## Coefficients:
##     (Intercept)  area_construida  
##        5.048147         0.006288  
## 
## 
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance =  0.05 
## 
## Call:
##  gvlma(x = model_exponencial) 
## 
##                       Value   p-value                   Decision
## Global Stat        18.63161 9.283e-04 Assumptions NOT satisfied!
## Skewness            0.26831 6.045e-01    Assumptions acceptable.
## Kurtosis            1.52281 2.172e-01    Assumptions acceptable.
## Link Function      16.82333 4.103e-05 Assumptions NOT satisfied!
## Heteroscedasticity  0.01715 8.958e-01    Assumptions acceptable.
par(mfrow=c(2,2))
plot(model_exponencial, col="#EE00EE", pch=16)


Transformación Logarítmica

model_logaritmica=lm(precio_millon~log(area_construida), data=datos)
summary(model_logaritmica)
## 
## Call:
## lm(formula = precio_millon ~ log(area_construida), data = datos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -45.837 -20.153  -1.878  20.145  55.145 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           -948.53      89.09  -10.65 1.42e-10 ***
## log(area_construida)   271.88      18.88   14.40 2.63e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 27 on 24 degrees of freedom
## Multiple R-squared:  0.8963, Adjusted R-squared:  0.8919 
## F-statistic: 207.4 on 1 and 24 DF,  p-value: 2.63e-13
gvlma(model_logaritmica)
## 
## Call:
## lm(formula = precio_millon ~ log(area_construida), data = datos)
## 
## Coefficients:
##          (Intercept)  log(area_construida)  
##               -948.5                 271.9  
## 
## 
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance =  0.05 
## 
## Call:
##  gvlma(x = model_logaritmica) 
## 
##                        Value  p-value                   Decision
## Global Stat        1.077e+01 0.029316 Assumptions NOT satisfied!
## Skewness           1.538e-01 0.694903    Assumptions acceptable.
## Kurtosis           9.155e-01 0.338665    Assumptions acceptable.
## Link Function      9.697e+00 0.001846 Assumptions NOT satisfied!
## Heteroscedasticity 6.933e-04 0.978993    Assumptions acceptable.
par(mfrow=c(2,2))
plot(model_logaritmica, col="#0000EE", pch=16)


Transformación Doble Logarítmico

model_doble_logaritmico=lm(log(precio_millon)~log(area_construida), data=datos)
summary(model_doble_logaritmico)
## 
## Call:
## lm(formula = log(precio_millon) ~ log(area_construida), data = datos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.13325 -0.07583 -0.01435  0.07501  0.16051 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           1.96408    0.29228    6.72 5.97e-07 ***
## log(area_construida)  0.80928    0.06194   13.06 2.11e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.08859 on 24 degrees of freedom
## Multiple R-squared:  0.8767, Adjusted R-squared:  0.8716 
## F-statistic: 170.7 on 1 and 24 DF,  p-value: 2.109e-12
gvlma(model_doble_logaritmico)
## 
## Call:
## lm(formula = log(precio_millon) ~ log(area_construida), data = datos)
## 
## Coefficients:
##          (Intercept)  log(area_construida)  
##               1.9641                0.8093  
## 
## 
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance =  0.05 
## 
## Call:
##  gvlma(x = model_doble_logaritmico) 
## 
##                       Value   p-value                   Decision
## Global Stat        14.06326 0.0070959 Assumptions NOT satisfied!
## Skewness            0.14883 0.6996589    Assumptions acceptable.
## Kurtosis            1.66690 0.1966747    Assumptions acceptable.
## Link Function      12.22172 0.0004724 Assumptions NOT satisfied!
## Heteroscedasticity  0.02582 0.8723435    Assumptions acceptable.
par(mfrow=c(2,2))
plot(model_doble_logaritmico, col="#EE00EE", pch=16)

Interpretación:

Según lo expuesto, el modelo de regresión inicial no cumple con el supuesto de homocedasticidad, por ello, se eligió trabajar con estas tres transformaciones; sin embargo, el modelo que más se ajustó (cercano) fue el logarítmico ya que en las gráficas se puede observar el comportamiento de los residuos se amoldan a los patrones explicados anteriormente y el que más alto valor tiene de los R2.


9. De ser necesario, compare el ajuste y supuestos del modelo inicial y el transformado.

Interpretación:

Al comparar el R2 del modelo inicial 0.8381, y el modelo elegido transformado logarítmico 0.8919, se evidencia un mayor ajuste en el modelo y explica la variabilidad del Precio (Y). A continuación se presenta los gráficos comparativos para visualizar el comportamiento de los residuos:

par(mfrow=c(2,2))
plot(model, col="#00CD00", pch=16, main="Gráfico Modelo Inicial")

par(mfrow=c(2,2))
plot(model_logaritmica, col="#0000EE", pch=16, main="Gráfico Modelo Transformado")