library(readxl)

casas_guadalupe <- read_excel("CasasGuada.xlsx")

summary(casas_guadalupe)
##      Precio            Terreno        Construcción       Baños      
##  Min.   :  950000   Min.   :  71.0   Min.   : 67.0   Min.   :0.000  
##  1st Qu.: 3200000   1st Qu.: 125.0   1st Qu.:150.0   1st Qu.:2.000  
##  Median : 4581000   Median : 165.0   Median :200.0   Median :2.500  
##  Mean   : 6726929   Mean   : 251.0   Mean   :262.2   Mean   :2.924  
##  3rd Qu.: 8190000   3rd Qu.: 315.3   3rd Qu.:337.0   3rd Qu.:3.500  
##  Max.   :39000000   Max.   :1125.0   Max.   :906.0   Max.   :8.000  
##  Estacionamiento   Recamaras          Edad         Privada    
##  Min.   :0.000   Min.   :2.000   Min.   : 1.0   Min.   :0.00  
##  1st Qu.:1.000   1st Qu.:3.000   1st Qu.: 8.0   1st Qu.:0.00  
##  Median :2.000   Median :3.000   Median :13.0   Median :0.00  
##  Mean   :1.992   Mean   :3.432   Mean   :17.7   Mean   :0.36  
##  3rd Qu.:2.000   3rd Qu.:4.000   3rd Qu.:27.0   3rd Qu.:1.00  
##  Max.   :6.000   Max.   :6.000   Max.   :50.0   Max.   :1.00  
##      Link          
##  Length:125        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
hist(casas_guadalupe$Precio, main="Histograma de Precio", col="lightblue")

hist(casas_guadalupe$Terreno, main="Histograma de Terreno", col="lightgreen")

hist(casas_guadalupe$Construcción, main="Histograma de Construcción", col="lightpink")

hist(casas_guadalupe$Baños, main="Histograma de Baños", col="lightgray")

hist(casas_guadalupe$Estacionamiento, main="Histograma de Estacionamiento", col = "purple")

hist(casas_guadalupe$Recamaras, main="Histograma de Recámaras", col = "tomato")

hist(casas_guadalupe$Edad, main="Histograma de Edad", col = "orange")

modelo_uno <- lm(Precio ~ Terreno + Construcción + Baños + Estacionamiento + Recamaras + Edad + Privada, data = casas_guadalupe)

summary(modelo_uno)
## 
## Call:
## lm(formula = Precio ~ Terreno + Construcción + Baños + Estacionamiento + 
##     Recamaras + Edad + Privada, data = casas_guadalupe)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -13163655   -766151    -76538    601298  22592112 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      -430488    1262654  -0.341    0.734    
## Terreno            12552       2218   5.658 1.11e-07 ***
## Construcción       13710       2974   4.611 1.03e-05 ***
## Baños             430530     284566   1.513    0.133    
## Estacionamiento   154130     288703   0.534    0.594    
## Recamaras         -85100     325184  -0.262    0.794    
## Edad              -33696      22126  -1.523    0.130    
## Privada          -737010     625891  -1.178    0.241    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3011000 on 117 degrees of freedom
## Multiple R-squared:  0.7105, Adjusted R-squared:  0.6932 
## F-statistic: 41.02 on 7 and 117 DF,  p-value: < 2.2e-16
plot(modelo_uno)

Aqui los outliers serían la observación 90, 46, y 12 (Primer gráfico) El gráfico QQ, nos dice que tan dentro están los datos de la normal, para ello tienen que estar dentro de la linea roja. –> En este caso hay 3 observaciones que salen de ello, la observación 90, la 46 y la 12.

En la cuarta gráfica quieres que este todo dentro de las líneas punteadas, lo que estñe fuera son outliers. Observación 46 y 12.

residuales_uno <- residuals(modelo_uno)
hist(residuales_uno)

¿en la gráfica de arriba, describir como se ve la curtosis?

#install.packages(tseries)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
boxplot(residuales_uno)

#install.packages(moments)
library(moments)
jarque.test(residuales_uno)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_uno
## JB = 4995.7, p-value < 2.2e-16
## alternative hypothesis: greater

La H0 de jarque-bera es que los errores se distribuyen de forma normal Ha: los errores no se distribuyen de forma normal

En este caso se rechaza H0, los erroes no se distribuyen de forma normal

Ahora vamos a borrar los outliers para ver si mejora la normalidad

casas_guadalupe_limpia <- casas_guadalupe[c(-12, -46, -90, -103), ]

lm.limpio <- lm(Precio ~ Terreno + Construcción + Baños + Estacionamiento + Recamaras + Edad + Privada, data = casas_guadalupe_limpia)

residuales_limpio <- residuals(lm.limpio)
hist(residuales_limpio)

jarque.test(residuales_limpio)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_limpio
## JB = 19.319, p-value = 6.382e-05
## alternative hypothesis: greater

Con este nuevo modelo, “La eliminación de outliers redujo la desviación de la normalidad, pero los residuos aún presentan evidencia estadística de no seguir una distribución normal.”

Ahora hacemos un modelo donde usamos logaritmos

modelo_log = lm(log(Precio) ~ Terreno + Construcción + Baños + Estacionamiento + Recamaras + Edad + Privada, data = casas_guadalupe_limpia)

residuales_log <- residuals(modelo_log)
hist(residuales_log)

jarque.test(residuales_log)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_log
## JB = 6.0949, p-value = 0.04748
## alternative hypothesis: greater

Hay que intentar hacer el modelo usando logaritmos sin quitar tantas observaciones, es decir ir atrás

modelo_log2 <- lm(log(Precio) ~ Terreno + Construcción + Baños + Estacionamiento + Recamaras + Edad + Privada, data = casas_guadalupe)

residuales_log2 <- residuals(modelo_log2)
hist(residuales_log2)

jarque.test(residuales_log2)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_log2
## JB = 12.494, p-value = 0.001936
## alternative hypothesis: greater

APARTIR DE AQUI HACEMOS VARIAS PRUBEAS DE DIFERENTES MODELOS

MODELO COMPLETO CON OUTLIERS, SIN LA VARIABLE DE ESTACIONAMIENTO

modelo_mejorado <- lm(Precio ~ Terreno + Construcción + Baños + Recamaras + Edad + Privada, data = casas_guadalupe)


summary(modelo_mejorado)
## 
## Call:
## lm(formula = Precio ~ Terreno + Construcción + Baños + Recamaras + 
##     Edad + Privada, data = casas_guadalupe)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -13364836   -803283    -96365    636620  22548120 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -277410    1225936  -0.226    0.821    
## Terreno         12811       2158   5.936 3.00e-08 ***
## Construcción    13934       2935   4.747 5.84e-06 ***
## Baños          456187     279628   1.631    0.105    
## Recamaras      -89557     324090  -0.276    0.783    
## Edad           -34522      22005  -1.569    0.119    
## Privada       -778150     619245  -1.257    0.211    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3002000 on 118 degrees of freedom
## Multiple R-squared:  0.7098, Adjusted R-squared:  0.695 
## F-statistic:  48.1 on 6 and 118 DF,  p-value: < 2.2e-16
residuales_mejor <- residuals(modelo_mejorado)
hist(residuales_mejor)

jarque.test(residuales_mejor)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_mejor
## JB = 4928.6, p-value < 2.2e-16
## alternative hypothesis: greater
summary(modelo_mejorado)
## 
## Call:
## lm(formula = Precio ~ Terreno + Construcción + Baños + Recamaras + 
##     Edad + Privada, data = casas_guadalupe)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -13364836   -803283    -96365    636620  22548120 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -277410    1225936  -0.226    0.821    
## Terreno         12811       2158   5.936 3.00e-08 ***
## Construcción    13934       2935   4.747 5.84e-06 ***
## Baños          456187     279628   1.631    0.105    
## Recamaras      -89557     324090  -0.276    0.783    
## Edad           -34522      22005  -1.569    0.119    
## Privada       -778150     619245  -1.257    0.211    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3002000 on 118 degrees of freedom
## Multiple R-squared:  0.7098, Adjusted R-squared:  0.695 
## F-statistic:  48.1 on 6 and 118 DF,  p-value: < 2.2e-16

MODELO COMPLETO SIN OUTLIERS Y SIN LA VARIABLE DE ESTACIONAMIENTO –> Mejor R cuadrada (.89) y r cuadrada ajustada (.88) pero sin normalidad

modelo_mejorado2 <- lm(Precio ~ Terreno + Construcción + Baños + Recamaras + Edad + Privada, data = casas_guadalupe_limpia)

summary(modelo_mejorado)
## 
## Call:
## lm(formula = Precio ~ Terreno + Construcción + Baños + Recamaras + 
##     Edad + Privada, data = casas_guadalupe)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -13364836   -803283    -96365    636620  22548120 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -277410    1225936  -0.226    0.821    
## Terreno         12811       2158   5.936 3.00e-08 ***
## Construcción    13934       2935   4.747 5.84e-06 ***
## Baños          456187     279628   1.631    0.105    
## Recamaras      -89557     324090  -0.276    0.783    
## Edad           -34522      22005  -1.569    0.119    
## Privada       -778150     619245  -1.257    0.211    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3002000 on 118 degrees of freedom
## Multiple R-squared:  0.7098, Adjusted R-squared:  0.695 
## F-statistic:  48.1 on 6 and 118 DF,  p-value: < 2.2e-16
residuales_mejor2 <- residuals(modelo_mejorado2)
hist(residuales_mejor2)

jarque.test(residuales_mejor2)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_mejor2
## JB = 23.823, p-value = 6.714e-06
## alternative hypothesis: greater
summary(modelo_mejorado2)
## 
## Call:
## lm(formula = Precio ~ Terreno + Construcción + Baños + Recamaras + 
##     Edad + Privada, data = casas_guadalupe_limpia)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -4906351  -676267   -73948   674604  4291886 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -323924     590148  -0.549  0.58416    
## Terreno         14360       1582   9.080 3.84e-15 ***
## Construcción     9928       1701   5.836 5.12e-08 ***
## Baños          373520     137712   2.712  0.00772 ** 
## Recamaras      -53399     154869  -0.345  0.73088    
## Edad           -12555      10785  -1.164  0.24683    
## Privada        -95182     303762  -0.313  0.75459    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1427000 on 114 degrees of freedom
## Multiple R-squared:  0.892,  Adjusted R-squared:  0.8864 
## F-statistic:   157 on 6 and 114 DF,  p-value: < 2.2e-16

MODELO LOG COMPLETO SIN OUTLIERS (hasta ahorita el más cercano a la normalidad)

modelo_logmejor <- lm(log(Precio) ~ Terreno + Recamaras + Estacionamiento + Construcción + Baños + Edad + Privada, data = casas_guadalupe_limpia)

residuales_logmejor <- residuals(modelo_logmejor)
hist(residuales_logmejor)

jarque.test(residuales_logmejor)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_logmejor
## JB = 6.0949, p-value = 0.04748
## alternative hypothesis: greater
summary(modelo_logmejor)
## 
## Call:
## lm(formula = log(Precio) ~ Terreno + Recamaras + Estacionamiento + 
##     Construcción + Baños + Edad + Privada, data = casas_guadalupe_limpia)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.94889 -0.17921  0.01295  0.21653  0.51719 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      1.425e+01  1.215e-01 117.287  < 2e-16 ***
## Terreno          1.841e-03  3.346e-04   5.503 2.36e-07 ***
## Recamaras        5.545e-02  3.122e-02   1.776  0.07840 .  
## Estacionamiento  3.666e-02  2.851e-02   1.286  0.20102    
## Construcción     1.098e-03  3.429e-04   3.202  0.00177 ** 
## Baños            7.930e-02  2.833e-02   2.799  0.00602 ** 
## Edad             1.086e-06  2.189e-03   0.000  0.99961    
## Privada         -1.364e-02  6.142e-02  -0.222  0.82465    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2877 on 113 degrees of freedom
## Multiple R-squared:  0.801,  Adjusted R-squared:  0.7887 
## F-statistic: 64.99 on 7 and 113 DF,  p-value: < 2.2e-16

MODELO LOG SIN OUTLIERS Y SIN RECÁMARAS–> CON NORMALIDAD y R cuadrada de .79 y r cuadrada ajustada de .78

modelo_logmejor2 <- lm(log(Precio) ~ Terreno + Estacionamiento + Construcción + Baños + Edad + Privada, data = casas_guadalupe_limpia)

residuales_logmejor2 <- residuals(modelo_logmejor2)
hist(residuales_logmejor2)

jarque.test(residuales_logmejor2)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_logmejor2
## JB = 5.9128, p-value = 0.05201
## alternative hypothesis: greater
summary(modelo_logmejor2)
## 
## Call:
## lm(formula = log(Precio) ~ Terreno + Estacionamiento + Construcción + 
##     Baños + Edad + Privada, data = casas_guadalupe_limpia)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.99899 -0.18024  0.03668  0.19418  0.51099 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     14.4115522  0.0792647 181.816  < 2e-16 ***
## Terreno          0.0017993  0.0003369   5.341 4.77e-07 ***
## Estacionamiento  0.0360869  0.0287720   1.254 0.212321    
## Construcción     0.0011923  0.0003420   3.487 0.000696 ***
## Baños            0.0872077  0.0282373   3.088 0.002528 ** 
## Edad            -0.0005609  0.0021860  -0.257 0.797939    
## Privada         -0.0172246  0.0619688  -0.278 0.781550    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2904 on 114 degrees of freedom
## Multiple R-squared:  0.7955, Adjusted R-squared:  0.7847 
## F-statistic:  73.9 on 6 and 114 DF,  p-value: < 2.2e-16

MODELO LOG SIN OUTLIERS, SIN VARIABE ESTACIONAMIENTO —> no es normal

modelo_log3 <- lm(log(Precio) ~ Terreno + Recamaras + Construcción + Baños + Edad + Privada, data = casas_guadalupe_limpia)

residuales_log3 <- residuals(modelo_log3)
hist(residuales_log3)

jarque.test(residuales_log3)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_log3
## JB = 7.4585, p-value = 0.02401
## alternative hypothesis: greater
summary(modelo_log3)
## 
## Call:
## lm(formula = log(Precio) ~ Terreno + Recamaras + Construcción + 
##     Baños + Edad + Privada, data = casas_guadalupe_limpia)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.95384 -0.19817  0.03155  0.20884  0.52268 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  14.2785288  0.1193040 119.682  < 2e-16 ***
## Terreno       0.0019717  0.0003197   6.167 1.09e-08 ***
## Recamaras     0.0549957  0.0313082   1.757  0.08167 .  
## Construcción  0.0010937  0.0003439   3.180  0.00190 ** 
## Baños         0.0865460  0.0278399   3.109  0.00237 ** 
## Edad         -0.0003223  0.0021803  -0.148  0.88276    
## Privada      -0.0198747  0.0614084  -0.324  0.74680    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2886 on 114 degrees of freedom
## Multiple R-squared:  0.7981, Adjusted R-squared:  0.7875 
## F-statistic: 75.11 on 6 and 114 DF,  p-value: < 2.2e-16

MODELO LOG SIN OUTLIERS, SIN ESTACIONAMIENTO Y SIN RECÁMARAS

log_final <- lm(log(Precio) ~ Terreno + Construcción + Baños + Edad + Privada, data = casas_guadalupe_limpia)

residuales_logfinal <- residuals(log_final)
hist(residuales_logfinal)

jarque.test(residuales_logfinal)
## 
##  Jarque-Bera Normality Test
## 
## data:  residuales_logfinal
## JB = 6.9692, p-value = 0.03067
## alternative hypothesis: greater
summary(log_final)
## 
## Call:
## lm(formula = log(Precio) ~ Terreno + Construcción + Baños + 
##     Edad + Privada, data = casas_guadalupe_limpia)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.00346 -0.19790  0.03569  0.20429  0.55729 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  14.4413072  0.0758195 190.470  < 2e-16 ***
## Terreno       0.0019281  0.0003216   5.995  2.4e-08 ***
## Construcción  0.0011873  0.0003428   3.464 0.000750 ***
## Baños         0.0942773  0.0277379   3.399 0.000931 ***
## Edad         -0.0008747  0.0021770  -0.402 0.688585    
## Privada      -0.0233315  0.0619309  -0.377 0.707066    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2912 on 115 degrees of freedom
## Multiple R-squared:  0.7926, Adjusted R-squared:  0.7836 
## F-statistic: 87.92 on 5 and 115 DF,  p-value: < 2.2e-16