Introducción

Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m2 (vivienda4.RDS) la inmobiliaria A&C requiere el apoyo de un cientifico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles.

Con este propósito el equipo de asesores a diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar.

Informe

  • La población indicada por el dataset está compuesta de 343 casas y 1363 apartamentos, los precios de casas y apartamentos se encuentran en un rango de 207.4 y 309 millones de pesos; el área construida se encuentra entre 40 y 200 metros cuadrados.

  • Los 1363 apartamentos se encuentran segmentados de la siguiente manera: 7 en la Zona Centro, 237 en la Zona Norte, 52 en la Zona Oeste, 2 en la Zona Oriente, y 1065 en la Zona Sur.

  • Los precios de apartamenos de todas las zonas se encuentran en un rango entre 207.4 y 305.2 millones de pesos; su área se encuentra entre 40 m2 y 200 m2.

  • El alcance del presente análisis se encuentra enfocado en los inmuebles del tipo apartamento especificamente de la zona sur, ya que contienen la mayor cantidad de datos disponibles en el dataset.

  • La población de 1065 apartamentos de la Zona Sur tiene rango de precios entre 207.4 y 305. 2 millones de pesos, la media de la zona Sur se encuentra en 235.6 millones de pesos.

  • Con el fin de realizar estimaciónes del precio en base a la cantidad de metros cuadrados construidos se analizaron 4 modelos de regresión verificando la bondad del ajustemediante la comprobación del coeficiente de bondad R2 y el cumplimiento de los supuestos de normalidad, linealidad, homocedasticidad, no autorrelación de errores, con el fin de mejorar el ajuste se eliminaron los datos atípicos.

  • Como resultado del modelo se determinó la ecuación: Precio_Apto = 201.86 +0.47x + ε en donde x representa la cantidad de metros cuadrados construidos, esta ecuación representa un 53.62% del valor basado en los datos disponibles, es importante tener en cuenta que existen otras varibles que pueden incidir en el valor del inmueble tanto positivamente como negativamente como son: estado actual del inmueble, implicaciones legales del inmueble, localización vertical del inmueble, existencia o no de parquederos, entre otras.

Conclusiones

  • El presente análisis se realiza considernado modelos de regresión lineal, para el se realizó un análisis exploratorio verificando la calidad de los datos buscando posibles datos faltantes, el ejercicio se segmentó en los inmuebles tipo apartamentos de la Zona Sur de la ciudad de Cali, Colombia debido a que fue la zona con mayor cantidad de datos disponibles, se establecieron 4 modelos buscando el mejor ajuste, se verificó el cumplimiento de supuestos del modelo como son normalidad, homocedasticidad, linelidad, para mejorar el ajuste se eliminaron datos atípicos, se verificaron coeficientes de correlación, datos descrptivos y se obtuvieros los graficos de los residuales de los diferentes modelos, tambien se graficó mediante la función Boxplot() la cual nos indica el posible modelo que más se ajusta, en este caso el modelo lineal fue el que dio un mejor ajuste al tener un mayor coeficiente de bondad R2.

Anexos

1. Análisis exploratorio

Descarga de base de datos.

#install.packages('devtools')
#devtools::install_github('dgonxalex80/paqueteMETODOS')
library(paqueteMETODOS)
data(vivienda4)

Verificamos las descriptivas, verificamos que no tengamos datos faltantes:

library(summarytools)
descr(vivienda4)
Descriptive Statistics  
vivienda4  
N: 1706  

                    areaconst   preciom
----------------- ----------- ---------
             Mean       87.63    243.70
          Std.Dev       36.35     19.56
              Min       40.00    207.41
               Q1       60.00    230.73
           Median       75.00    238.77
               Q3       98.00    251.51
              Max      200.00    309.70
              MAD       22.24     14.19
              IQR       38.00     20.77
               CV        0.41      0.08
         Skewness        1.53      1.26
      SE.Skewness        0.06      0.06
         Kurtosis        1.68      1.25
          N.Valid     1706.00   1706.00
        Pct.Valid      100.00    100.00

Revisamos los tipos de inmuebles y en las zonas en las cuales se encuentran ubicados los inmuebles:

summary(vivienda4)
           zona      estrato     preciom        areaconst     
 Zona Centro :   8   3:   0   Min.   :207.4   Min.   : 40.00  
 Zona Norte  : 288   4:1706   1st Qu.:230.7   1st Qu.: 60.00  
 Zona Oeste  :  60   5:   0   Median :238.8   Median : 75.00  
 Zona Oriente:   6   6:   0   Mean   :243.7   Mean   : 87.63  
 Zona Sur    :1344            3rd Qu.:251.5   3rd Qu.: 98.00  
                              Max.   :309.7   Max.   :200.00  
          tipo     
 Apartamento:1363  
 Casa       : 343  
                   
                   
                   
                   

Filtramos la base de datos para seleccionar los tipo apartamento:

apartamentos <- subset(data, data$tipo =="Apartamento")
summary(apartamentos)
           zona      estrato     preciom        areaconst     
 Zona Centro :   7   3:   0   Min.   :207.4   Min.   : 40.00  
 Zona Norte  : 237   4:1363   1st Qu.:228.8   1st Qu.: 60.00  
 Zona Oeste  :  52   5:   0   Median :236.1   Median : 70.00  
 Zona Oriente:   2   6:   0   Mean   :237.7   Mean   : 75.48  
 Zona Sur    :1065            3rd Qu.:243.6   3rd Qu.: 84.00  
                              Max.   :305.2   Max.   :200.00  
          tipo     
 Apartamento:1363  
 Casa       :   0  
                   
                   
                   
                   
Apto_Norte <-subset(apartamentos, apartamentos$zona =="Zona Norte")
Apto_Sur <-subset(apartamentos, apartamentos$zona =="Zona Sur")
Apto_Oriente <-subset(apartamentos, apartamentos$zona =="Zona Oriente")
Apto_Oeste <-subset(apartamentos, apartamentos$zona =="Zona Oeste")
Apto_Centro <-subset(apartamentos, apartamentos$zona =="Zona Centro")

Revisamos las diferentes zonas de apartamentos para detectar Outliers (Valores atípicos)

Revisamos los apartementos de la Zona Centro:

summary(Apto_Centro)
           zona   estrato    preciom        areaconst              tipo  
 Zona Centro :7   3:0     Min.   :236.2   Min.   : 62.0   Apartamento:7  
 Zona Norte  :0   4:7     1st Qu.:241.3   1st Qu.: 84.0   Casa       :0  
 Zona Oeste  :0   5:0     Median :257.3   Median :120.0                  
 Zona Oriente:0   6:0     Mean   :256.4   Mean   :107.7                  
 Zona Sur    :0           3rd Qu.:269.7   3rd Qu.:124.5                  
                          Max.   :279.0   Max.   :155.0                  

Revisamos los apartementos de la Zona Norte:

summary(Apto_Norte)
           zona     estrato    preciom        areaconst               tipo    
 Zona Centro :  0   3:  0   Min.   :216.2   Min.   : 51.00   Apartamento:237  
 Zona Norte  :237   4:237   1st Qu.:230.4   1st Qu.: 61.00   Casa       :  0  
 Zona Oeste  :  0   5:  0   Median :236.7   Median : 73.00                    
 Zona Oriente:  0   6:  0   Mean   :239.1   Mean   : 78.67                    
 Zona Sur    :  0           3rd Qu.:243.7   3rd Qu.: 83.00                    
                            Max.   :302.4   Max.   :200.00                    

Revisamos los apartementos de la Zona Oeste:

summary(Apto_Oeste)
           zona    estrato    preciom        areaconst               tipo   
 Zona Centro : 0   3: 0    Min.   :215.4   Min.   : 48.00   Apartamento:52  
 Zona Norte  : 0   4:52    1st Qu.:227.7   1st Qu.: 58.25   Casa       : 0  
 Zona Oeste  :52   5: 0    Median :238.3   Median : 63.00                   
 Zona Oriente: 0   6: 0    Mean   :238.9   Mean   : 74.87                   
 Zona Sur    : 0           3rd Qu.:246.6   3rd Qu.: 82.00                   
                           Max.   :275.2   Max.   :144.00                   

Revisamos los apartementos de la Zona Oriente:

summary(Apto_Oriente)
           zona   estrato    preciom        areaconst             tipo  
 Zona Centro :0   3:0     Min.   :236.8   Min.   :84.0   Apartamento:2  
 Zona Norte  :0   4:2     1st Qu.:238.6   1st Qu.:85.5   Casa       :0  
 Zona Oeste  :0   5:0     Median :240.4   Median :87.0                  
 Zona Oriente:2   6:0     Mean   :240.4   Mean   :87.0                  
 Zona Sur    :0           3rd Qu.:242.2   3rd Qu.:88.5                  
                          Max.   :244.0   Max.   :90.0                  

Revisamos los apartementos de la Zona Sur:

summary(Apto_Sur)
           zona      estrato     preciom        areaconst     
 Zona Centro :   0   3:   0   Min.   :207.4   Min.   : 40.00  
 Zona Norte  :   0   4:1065   1st Qu.:228.6   1st Qu.: 60.00  
 Zona Oeste  :   0   5:   0   Median :235.8   Median : 70.00  
 Zona Oriente:   0   6:   0   Mean   :237.2   Mean   : 74.57  
 Zona Sur    :1065            3rd Qu.:243.3   3rd Qu.: 83.00  
                              Max.   :305.2   Max.   :200.00  
          tipo     
 Apartamento:1065  
 Casa       :   0  
                   
                   
                   
                   

Graficamos los costos segmentando por Zonas:

boxplot(apartamentos$preciom~apartamentos$zona,
        main = "Precio de los apartamentos por zonas",
        ylab = "Precio (MMCOP)",
        xlab = "",
        las = 2,
        col=c("grey","green", "#f4d35e","blue", "violet"))
axis(side = 2, at = seq(0, 2000, by = 10), labels = FALSE, cex.axis = 2)

Revisamos los metrajes de los apartamentos por zona:

par(mfrow=c(1,2))
par(mar = c(4, 4, 12, 2))
hist(Apto_Centro$areaconst, 
     main = "Histograma Zona Centro",  # Título del gráfico
     xlab = "m2 construido",  # Etiqueta del eje X
     ylab = "Frecuencia",  # Etiqueta del eje Y
     col = "green",  # Color de las barras
     border = "black")  # Color del borde de las barras

hist(Apto_Norte$areaconst, 
     main = "Histograma Zona Norte",  # Título del gráfico
     xlab = "m2 construido",  # Etiqueta del eje X
     ylab = "Frecuencia",  # Etiqueta del eje Y
     col = "yellow",  # Color de las barras
     border = "black")  # Color del borde de las barras

par(mfrow=c(1,3))
par(mar = c(4, 4, 12, 2))
hist(Apto_Oeste$areaconst, 
     main = "Histograma Zona Oeste",  # Título del gráfico
     xlab = "m2 construido",  # Etiqueta del eje X
     ylab = "Frecuencia",  # Etiqueta del eje Y
     col = "violet",  # Color de las barras
     border = "black")  # Color del borde de las barras
hist(Apto_Oriente$areaconst, 
     main = "Histograma Zona Oriente",  # Título del gráfico
     xlab = "m2 construido",  # Etiqueta del eje X
     ylab = "Frecuencia",  # Etiqueta del eje Y
     col = "red",  # Color de las barras
     border = "black")  # Color del borde de las barras
hist(Apto_Sur$areaconst, 
     main = "Histograma Zona Sur",  # Título del gráfico
     xlab = "m2 construido",  # Etiqueta del eje X
     ylab = "Frecuencia",  # Etiqueta del eje Y
     col = "blue",  # Color de las barras
     border = "black")  # Color del borde de las barras

Para el presente análisis nos centraremos en los inmuebles tipo Apartamento de la Zona Sur la cual contiene una mayor cantidad de datos disponibles 1065 unidades.

Verificamos la normalidad de la Zona Sur:

plot(density(Apto_Sur$preciom))

Determinamos Outliers de la Zona Sur, se observa los datos atípicos que se encuentran fuera del intervalo:

boxplot(Apto_Sur$preciom, 
        horizontal = TRUE,
        main = "Distribución Precio/m2 - Zona Sur",
        col = "blue",
        las = 1,
        xlab = "Precio del inmueble (MMCOP)",
        ylab = "Zona")

Buscamos outliers mediante la función boxplot.stats, se identifican 32 valores atípicos los cuales se encuentran entre 267.0240 (min) y 305.1900(max):

boxplot.stats(Apto_Sur$preciom)
$stats
[1] 207.4063 228.6035 235.7811 243.2961 264.9877

$n
[1] 1065

$conf
[1] 235.0698 236.4925

$out
 [1] 278.5580 267.2948 266.7912 272.1928 284.4535 272.2040 305.1900 272.5211
 [9] 270.9289 281.7389 269.2610 300.4450 294.0925 298.7191 283.3601 273.4190
[17] 275.0311 267.0240 272.2105 281.4747 298.5620 297.1333 273.0654 286.2517
[25] 269.1626 276.9321 300.5529 285.0401 267.0178 267.4686 272.4343

Filtramos los valores que no son Outliers:

AptosSur_Sin_Out<- subset(Apto_Sur,Apto_Sur$preciom <267.0240)

Verificamos nuevamente los Outliers de la Zona Sur, se observan que persisten todavía valores atípicos:

boxplot(AptosSur_Sin_Out$preciom, 
        horizontal = TRUE,
        main = "Distribución Precio/m2 - Zona Sur",
        col = "blue",
        las = 1,
        xlab = "Precio del inmueble (MMCOP)",
        ylab = "Zona")

Buscamos nuevamente outliers mediante la función boxplot.stats, buscando su eliminación mediante un proceso iterativo, se identifican que todavía persisten 10 valores atípicos:

boxplot.stats(AptosSur_Sin_Out$preciom)
$stats
[1] 207.7435 228.3047 235.4000 242.2297 262.7313

$n
[1] 1037

$conf
[1] 234.7168 236.0833

$out
 [1] 264.4863 266.7912 263.3649 263.5436 264.8171 267.0240 264.0082 264.9877
 [9] 267.0178 207.4063

Nuevamente filtramos los valores que no son Outliers:

AptosSur_Sin_Out2<- subset(AptosSur_Sin_Out,AptosSur_Sin_Out$preciom >207.7435 & AptosSur_Sin_Out$preciom <263.3649)

Repetimos Outliers de la Zona Sur, se identifica que todavía tenemos un valor outlier:

boxplot(AptosSur_Sin_Out2$preciom, 
        horizontal = TRUE,
        main = "Distribución Precio/m2 - Zona Sur",
        col = "blue",
        las = 1,
        xlab = "Precio del inmueble (MMCOP)",
        ylab = "Zona")

Buscamos nuevamente outliers mediante la función boxplot.stats, mediante un proceso iterativo

boxplot.stats(AptosSur_Sin_Out2$preciom)
$stats
[1] 207.7435 228.1527 235.3254 241.9838 262.6127

$n
[1] 1027

$conf
[1] 234.6435 236.0073

$out
[1] 262.7313

Filtramos los valores que no son Outliers, se identifica que ya no existen valores outliers:

AptosSur_Sin_Out3<- subset(AptosSur_Sin_Out2,AptosSur_Sin_Out2$preciom <262.7312)

Repetimos Outliers de la Zona Sur:

boxplot(AptosSur_Sin_Out3$preciom, 
        horizontal = TRUE,
        main = "Distribución Precio/m2 - Zona Sur",
        col = "blue",
        las = 1,
        xlab = "Precio del inmueble (MMCOP)",
        ylab = "Zona")

Buscamos nuevamente outliers mediante la función boxplot.stats, se verifica que se han eliminado todos los valores atípicos:

boxplot.stats(AptosSur_Sin_Out3$preciom)
$stats
[1] 207.7435 228.1502 235.3057 241.9573 262.6127

$n
[1] 1026

$conf
[1] 234.6246 235.9868

$out
numeric(0)

Revisamos como queda la Zona Sur Sin Outliers:

summary(AptosSur_Sin_Out3)
           zona      estrato     preciom        areaconst     
 Zona Centro :   0   3:   0   Min.   :207.7   Min.   : 40.00  
 Zona Norte  :   0   4:1026   1st Qu.:228.2   1st Qu.: 60.00  
 Zona Oeste  :   0   5:   0   Median :235.3   Median : 70.00  
 Zona Oriente:   0   6:   0   Mean   :235.7   Mean   : 71.98  
 Zona Sur    :1026            3rd Qu.:242.0   3rd Qu.: 81.00  
                              Max.   :262.6   Max.   :143.00  
          tipo     
 Apartamento:1026  
 Casa       :   0  
                   
                   
                   
                   
data_Ajust <- AptosSur_Sin_Out3

Verificamos las descriptivas a los datos de la Zona Sur sin Outliers:

descr(data_Ajust)
Descriptive Statistics  
data_Ajust  
N: 1026  

                    areaconst   preciom
----------------- ----------- ---------
             Mean       71.98    235.74
          Std.Dev       16.08     10.33
              Min       40.00    207.74
               Q1       60.00    228.15
           Median       70.00    235.31
               Q3       81.00    241.96
              Max      143.00    262.61
              MAD       14.83     10.12
              IQR       21.00     13.80
               CV        0.22      0.04
         Skewness        0.94      0.27
      SE.Skewness        0.08      0.08
         Kurtosis        0.78     -0.24
          N.Valid     1026.00   1026.00
        Pct.Valid      100.00    100.00

Verificamos la normalidad de la Zona Sur sin Outliers:

plot(density(data_Ajust$preciom))

2. Análisis Bivariado

Verificamos la tendencia mediante un gráfico, se observa que existe una relación positiva lineal:

ggplot(data_Ajust, aes(x = areaconst, y = preciom)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(x = "Area Construida (m2)", y = "Precio de Vivienda MMCOP")

Revisavos la covarianza, se observa que es positiva por lo tanto las dos variables se mueven en la misma dirección.

cov(data_Ajust$areaconst, data_Ajust$preciom)
[1] 121.6386

Revisamos la correlación, para esto determinamos el coeficiente de correlación de Pearson, el valor obtenido de 0,73 indica una relación positiva debíl ya que sencuentra en el intervalo mayor de 0,3 pero menor de 0,8, de igual manera el coeficiente de correlación de Spearman tambien indica una relación posiva debil.

cor(data_Ajust$areaconst, data_Ajust$preciom, method = 'pearson')
[1] 0.7322761
cor(data_Ajust$areaconst, data_Ajust$preciom, method = 'spearman')
[1] 0.7071745

3. Modelado

attach(data_Ajust)

El modelo de regresión lineal simple tiene la siguiente ecuación: Y = β0 + β1X + ε

Modelo1 <- lm(formula =preciom ~ areaconst, data = data_Ajust)
summary(Modelo1)

Call:
lm(formula = preciom ~ areaconst, data = data_Ajust)

Residuals:
     Min       1Q   Median       3Q      Max 
-24.5063  -5.0073   0.0442   4.5234  21.7780 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 201.85506    1.00886  200.08   <2e-16 ***
areaconst     0.47069    0.01368   34.41   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 7.04 on 1024 degrees of freedom
Multiple R-squared:  0.5362,    Adjusted R-squared:  0.5358 
F-statistic:  1184 on 1 and 1024 DF,  p-value: < 2.2e-16

Determinamos la ecuación:

Modelo1$coefficients
(Intercept)   areaconst 
201.8550597   0.4706852 

Se observa que la ecuación del modelo planteado es : 201.86 +0.47x + ε debido que el coeficiente β0 = 201.86 indica que el valor mínimo del área construida para la venta en la Zona sur es de 201.86 MMCOP, por otra parte el valor de β1 = 0.47 indica que por cada incremento del metro cuadrado de área construida se tendrá 0.47 incrementando el valor del precio, por otro lado podemos estimer un 53.62% del valor del precio del inmueble en base al modelo planteado.

4. Intervalo de confianza

Procedemos a establecer los intervalos de confianza y a realizar las pruebas de hipótesis:

confint(Modelo1, level=0.95)
                  2.5 %      97.5 %
(Intercept) 199.8753848 203.8347346
areaconst     0.4438429   0.4975274

Con un nivel de confianza del 95% y un 5% de error α, podemos determinar que el coeficiente β1 para el caso del área construida (x) podría incrementar un valor entre los 0,48 y los 0,51 Millones por cada metro cuadrado construido.

Verificamos Normalidad asumiendo alfa (α) >0.05

Verificamos Normalidad mediante Shaphiro test, bajo las siguientes hipótesis:

Ho: errores tiene una distribución normal Ha: errores no tienen una distribución normal

U <- Modelo1$residuals
shapiro.test(U)

    Shapiro-Wilk normality test

data:  U
W = 0.99894, p-value = 0.825

Se confirma la normalidad al ser p>0.05, por lo tanto se confirma la hipótesis nula.

Verificamos la Homocedasticidad mediante Breusch-Pagan Test

Verificamos Homocedasticidad, bajo las siguientes hipótesis:

Ho: Los errores tienen una varianza constante. Ha: Los errores no tienen una varianza constante.

library(lmtest)
bptest(Modelo1)

    studentized Breusch-Pagan test

data:  Modelo1
BP = 0.44973, df = 1, p-value = 0.5025

Se confirma que los errores tienen una varianza cosntante al ser p>0.05, se confirma la hipótesis nula.

Verificamos la No autocorrección de errores mediante Durbin-Watson Test:

Ho: Los errores son independientes entre si. Ha: Los errores No son independientes entre si.

dwtest(Modelo1)

    Durbin-Watson test

data:  Modelo1
DW = 2.0185, p-value = 0.6128
alternative hypothesis: true autocorrelation is greater than 0

Se confirma que los errores son independientes entre si, se confirma la hipótesis nula.

5. Indicador de bondad R2

R2 = summary(Modelo1)$r.squared
print( paste("Coeficiente de determinación (R2) es de: ", R2) )
[1] "Coeficiente de determinación (R2) es de:  0.536228227390305"

El Coeficiente de Determinación también conocido como R2, es una medida de ajuste que indica si finalmente las estimaciones (predicciones) que se logran con la recta de regresión reflejan la realidad.

El coeficeinte R2 del modelo lineal es del 0.54 lo cual evidencia un buen ajuste a los datos, nos permite determinar que el área construida de una apartamento de la Zona Sur corresponde al 71.62 % de la variabilidad de los precios por millón de dichas viviendas.

6. Inferencia de parámetros

En base a la propuesta de 220 millones de pesos por un apartamento de 110 m2, se proce a realizar la estimación y comparación.

(predict(Modelo1, list(areaconst=110), interval = "confidence", level = 0.95))
       fit      lwr      upr
1 253.6304 252.5225 254.7384

Según el modelo planteado se estima que el valor del apartamento de 110 m2 se encuentre entre 254.2 y 255.58 millones de pesos, por lo tanto la oferta de 220 millones en primera istancia podría ser una buena oferta para el comprador, sin embargo habría que analizar otras variables que se encuentran fuera del alcance del modelo, como son: estado actual del inmueble, problemas legales asociados al inmueble, problemas estructurales, entre otros, por lo tanto se tendría que investigar las razones del vendedor y cual es su motivación para realizar la venta.

7. Validación de supuestos mediante gráficos

Con anterioridad se verificó el cumplimiento de normalidad, mediante del gráfico Q-Q Residuals se confirma que muchos de los dato se ajustan de manera lineal, la linealidad tambien se puede observar en el gráfico Residuals vs Fitted, la homocedasticidad tambien se puede observar en el gráfico Scale-Location, por otro lado en el modelo presentado se eliminaron los datos atípicos para proporcionar un mejor ajuste al modelo, en consecuencia el modelo cumple los supuestos:

  • Normalidad
  • Homocedasticidad
  • No autocorrección de errores
  • Sin datos atípicos.
par(mfrow=c(2,2))
plot(Modelo1)

8. Transformaciones y supuestos

Mediante Boxcox determinamos el mejor ajuste para el modelo:

library(MASS)
boxcox(lm(preciom ~ areaconst, data = apartamentos))

Según la gráfica anterior el modelo que más se ajusta es el lineal al ser lambda cercano a = 1.

Transformación logaritmo a Lineal

Modelo2 <-lm(log(preciom) ~ areaconst, data = data_Ajust)

Verificamos Normalidad asumiendo alfa (α) >0.05

Verificamos Normalidad mediante Shaphiro test, bajo las siguientes hipótesis:

Ho: errores tiene una distribución normal Ha: errores no tienen una distribución normal

U <- Modelo2$residuals
shapiro.test(U)

    Shapiro-Wilk normality test

data:  U
W = 0.9989, p-value = 0.802

Se confirma la normalidad al ser p>0.05, por lo tanto se confirma la hipótesis nula.

Verificamos la Homocedasticidad mediante Breusch-Pagan Test

Verificamos Homocedasticidad, bajo las siguientes hipótesis:

Ho: Los errores tienen una varianza constante. Ha: Los errores no tienen una varianza constante.

library(lmtest)
bptest(Modelo2)

    studentized Breusch-Pagan test

data:  Modelo2
BP = 3.3945, df = 1, p-value = 0.06541

Se rechaza ya que los errores No tienen una varianza constante al ser p<0.05, se rechaza la hipótesis nula.

Verificamos la No autocorrelación de errores mediante Durbin-Watson Test:

Ho: Los errores son independientes entre si. Ha: Los errores No son independientes entre si.

dwtest(Modelo2)

    Durbin-Watson test

data:  Modelo2
DW = 2.019, p-value = 0.6157
alternative hypothesis: true autocorrelation is greater than 0

Se confirma que los errores son independientes entre si, se confirma la hipótesis nula.

par(mfrow=c(2,2))
plot(Modelo2, col="blue", main="Modelo 2 Log- Lin")

Transformación lineal a Logaritmo

Modelo3 <-lm((preciom) ~ log(areaconst), data = data_Ajust)

Verificamos Normalidad asumiendo alfa (α) >0.05

Verificamos Normalidad mediante Shaphiro test, bajo las siguientes hipótesis:

Ho: errores tiene una distribución normal Ha: errores no tienen una distribución normal

U <- Modelo3$residuals
shapiro.test(U)

    Shapiro-Wilk normality test

data:  U
W = 0.99868, p-value = 0.6517

No se cumple la normalidad al ser p<0.05, por lo tanto se rechaza la hipótesis nula.

Verificamos la Homocedasticidad mediante Breusch-Pagan Test

Verificamos Homocedasticidad, bajo las siguientes hipótesis:

Ho: Los errores tienen una varianza constante. Ha: Los errores no tienen una varianza constante.

library(lmtest)
bptest(Modelo3)

    studentized Breusch-Pagan test

data:  Modelo3
BP = 2.8638, df = 1, p-value = 0.09059

No se cumple que los errores No tienen una varianza constante al ser p<0.05, se rechaza la hipótesis nula.

Verificamos la No autocorrelación de errores mediante Durbin-Watson Test:

Ho: Los errores son independientes entre si. Ha: Los errores No son independientes entre si.

dwtest(Modelo3)

    Durbin-Watson test

data:  Modelo3
DW = 1.9851, p-value = 0.4017
alternative hypothesis: true autocorrelation is greater than 0

Se confirma que los errores son independientes entre si, se confirma la hipótesis nula.

par(mfrow=c(2,2))
plot(Modelo3, col="darkviolet", main="Modelo 3 Lin- Log")

Transformación logaritmo a Logaritmo

Modelo4 <-lm(log(preciom) ~ log(areaconst), data = data_Ajust)

Verificamos Normalidad asumiendo alfa (α) >0.05

Verificamos Normalidad mediante Shaphiro test, bajo las siguientes hipótesis:

Ho: errores tiene una distribución normal Ha: errores no tienen una distribución normal

U <- Modelo4$residuals
shapiro.test(U)

    Shapiro-Wilk normality test

data:  U
W = 0.99888, p-value = 0.7868

Se cumple la normalidad al ser p>0.05, por lo tanto se acepta la hipótesis nula.

Verificamos la Homocedasticidad mediante Breusch-Pagan Test

Verificamos Homocedasticidad, bajo las siguientes hipótesis:

Ho: Los errores tienen una varianza constante. Ha: Los errores no tienen una varianza constante.

library(lmtest)
bptest(Modelo4)

    studentized Breusch-Pagan test

data:  Modelo4
BP = 8.9847, df = 1, p-value = 0.002723

Se cumple que los errores No tienen una varianza constante al ser p>0.05, se acepta la hipótesis nula.

Verificamos la No autocorrelación de errores mediante Durbin-Watson Test:

Ho: Los errores son independientes entre si. Ha: Los errores No son independientes entre si.

dwtest(Modelo4)

    Durbin-Watson test

data:  Modelo4
DW = 1.9869, p-value = 0.4127
alternative hypothesis: true autocorrelation is greater than 0

Se confirma que los errores son independientes entre si, se confirma la hipótesis nula.

par(mfrow=c(2,2))
plot(Modelo4, col="green", main="Modelo 4 Log- Log")

9. Grafico comprativo entre Modelo Lineal inicial y Modelo transformado

Realizamos graficos comparativos entre el modelo lineal inicial y el modelo transformado Log-Log.

par(mfrow=c(2,2))
plot(Modelo1, col="black", main="Modelo inicial Y")

par(mfrow=c(2,2))
plot(Modelo4, col="green", main="Modelo 4 Log- Log")

el modelo inicial (modelo lineal) resulta dar un mejor ajuste con respecto a los modelos trnasformados , se compara contra el modelo transformado log-Log ya que los modelos transformadosLin-Log y Log-Lin no cumplen algunos de los supuestos como son: normalidad, homocedasticidad y no autocorrelación.

10. Comparativo entre los modelos

library(stargazer)
stargazer(Modelo1, Modelo2, Modelo3, Modelo4, type="text", df=FALSE)

=======================================================================
                                    Dependent variable:                
                    ---------------------------------------------------
                      preciom    log(preciom)  (preciom)   log(preciom)
                        (1)          (2)          (3)          (4)     
-----------------------------------------------------------------------
areaconst             0.471***     0.002***                            
                      (0.014)      (0.0001)                            
                                                                       
log(areaconst)                                 35.463***     0.149***  
                                                (1.042)      (0.004)   
                                                                       
Constant             201.855***    5.320***    84.903***     4.828***  
                      (1.009)      (0.004)      (4.439)      (0.019)   
                                                                       
-----------------------------------------------------------------------
Observations           1,026        1,026        1,026        1,026    
R2                     0.536        0.529        0.531        0.525    
Adjusted R2            0.536        0.528        0.530        0.525    
Residual Std. Error    7.040        0.030        7.083        0.030    
F Statistic         1,183.983*** 1,148.515*** 1,157.351*** 1,133.245***
=======================================================================
Note:                                       *p<0.1; **p<0.05; ***p<0.01

De acuerdo con el coeficiente de bondad R2 el modelo que mejor se ajusta es el modelo inicial lineal al tener un coeficiente de bondad mayor que el restante de los modelos planteados, además cumple con los supuestos de Normalidad, Homocedasticidad No autocorrelación, tal como se indicó mediante la función Boxplot().