Teoria

lm() es la funcion en R para ajustar modelos lineales.
Es el modelo estadistico mas basico que existe y mas facil de interpretar.
Para intepretarlo se usa la medida R-cuadrada, que significa que tan cerca estan los datos de la regresion. Va de 0 a 1, donde 1 es que el modelo explica toda la variabilidad.

Contexto

Tenemos una base de datos que tiene la distancia a distintos puntos de interes como taxi, mercado, hospita el area dela casa y el tipo de estacionamiento y la categoria de la ciudad y la cantidad de lluvia registrada. Se desea generar un modelo predictivo.

instalar Paquetes y llamar librerias

#install.packages("corrplot")
library(corrplot)
## corrplot 0.95 loaded

Importar la base de datos

# file.choose()
df <- read.csv("/Users/anuar/Desktop/HousePriceData.csv")

Entender la base de datos

summary(df)
##   Observation      Dist_Taxi      Dist_Market    Dist_Hospital  
##  Min.   :  1.0   Min.   :  146   Min.   : 1666   Min.   : 3227  
##  1st Qu.:237.0   1st Qu.: 6477   1st Qu.: 9367   1st Qu.:11302  
##  Median :469.0   Median : 8228   Median :11149   Median :13189  
##  Mean   :468.4   Mean   : 8235   Mean   :11022   Mean   :13091  
##  3rd Qu.:700.0   3rd Qu.: 9939   3rd Qu.:12675   3rd Qu.:14855  
##  Max.   :932.0   Max.   :20662   Max.   :20945   Max.   :23294  
##                                                                 
##      Carpet         Builtup           Parking      City_Category
##  Min.   :  775   Min.   :  932   Length   :905   Length   :905  
##  1st Qu.: 1317   1st Qu.: 1579   N.unique :  4   N.unique :  3  
##  Median : 1478   Median : 1774   N.blank  :  0   N.blank  :  0  
##  Mean   : 1511   Mean   : 1794   Min.nchar:  4   Min.nchar:  5  
##  3rd Qu.: 1654   3rd Qu.: 1985   Max.nchar: 12   Max.nchar:  5  
##  Max.   :24300   Max.   :12730                                  
##  NAs    :7                                                      
##     Rainfall       House_Price       
##  Min.   :-110.0   Min.   :  1492000  
##  1st Qu.: 600.0   1st Qu.:  4623000  
##  Median : 780.0   Median :  5860000  
##  Mean   : 786.9   Mean   :  6083992  
##  3rd Qu.: 970.0   3rd Qu.:  7200000  
##  Max.   :1560.0   Max.   :150000000  
## 
str(df)
## 'data.frame':    905 obs. of  10 variables:
##  $ Observation  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Dist_Taxi    : int  9796 8294 11001 8301 10510 6665 13153 5882 7495 8233 ...
##  $ Dist_Market  : int  5250 8186 14399 11188 12629 5142 11869 9948 11589 7067 ...
##  $ Dist_Hospital: int  10703 12694 16991 12289 13921 9972 17811 13315 13370 11400 ...
##  $ Carpet       : int  1659 1461 1340 1451 1770 1442 1542 1261 1090 1030 ...
##  $ Builtup      : int  1961 1752 1609 1748 2111 1733 1858 1507 1321 1235 ...
##  $ Parking      : chr  "Open" "Not Provided" "Not Provided" "Covered" ...
##  $ City_Category: chr  "CAT B" "CAT B" "CAT A" "CAT B" ...
##  $ Rainfall     : int  530 210 720 620 450 760 1030 1020 680 1130 ...
##  $ House_Price  : int  6649000 3982000 5401000 5373000 4662000 4526000 7224000 3772000 4631000 4415000 ...
head(df,10)
##    Observation Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup      Parking
## 1            1      9796        5250         10703   1659    1961         Open
## 2            2      8294        8186         12694   1461    1752 Not Provided
## 3            3     11001       14399         16991   1340    1609 Not Provided
## 4            4      8301       11188         12289   1451    1748      Covered
## 5            5     10510       12629         13921   1770    2111 Not Provided
## 6            6      6665        5142          9972   1442    1733         Open
## 7            7     13153       11869         17811   1542    1858   No Parking
## 8            8      5882        9948         13315   1261    1507         Open
## 9            9      7495       11589         13370   1090    1321 Not Provided
## 10          10      8233        7067         11400   1030    1235         Open
##    City_Category Rainfall House_Price
## 1          CAT B      530     6649000
## 2          CAT B      210     3982000
## 3          CAT A      720     5401000
## 4          CAT B      620     5373000
## 5          CAT B      450     4662000
## 6          CAT B      760     4526000
## 7          CAT A     1030     7224000
## 8          CAT C     1020     3772000
## 9          CAT B      680     4631000
## 10         CAT C     1130     4415000
tail(df,10)
##     Observation Dist_Taxi Dist_Market Dist_Hospital Carpet Builtup      Parking
## 896         923      9538       11551         12839   1655    1986      Covered
## 897         924     11786       13969         15519   1156    1398         Open
## 898         925      9615        7904         12521   1451    1734         Open
## 899         926      7176        5779         12382   1539    1829         Open
## 900         927     10915       17486         15964   1549    1851 Not Provided
## 901         928     12176        8518         15673   1582    1910      Covered
## 902         929      7214        8717         10553   1387    1663         Open
## 903         930      7423       11708         13220   1200    1436         Open
## 904         931     15082       14700         19617   1299    1560         Open
## 905         932      9297       12537         14418   1174    1429      Covered
##     City_Category Rainfall House_Price
## 896         CAT B     1150     7743000
## 897         CAT A      140     9237000
## 898         CAT C      670     3488000
## 899         CAT B      650     4658000
## 900         CAT C     1220     7062000
## 901         CAT C     1080     6639000
## 902         CAT A      850     8208000
## 903         CAT A     1060     7644000
## 904         CAT B      770     9661000
## 905         CAT C     1110     5434000
correlacion <- cor(df[,sapply(df, is.numeric)], use="complete.obs")
corrplot(correlacion)

Limpiar la base de datos

Generar el modelo

regresion <- lm(House_Price~., data=df)
summary(regresion)
## 
## Call:
## lm(formula = House_Price ~ ., data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3694478  -799483   -54242   780191  4539531 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          5.331e+06  3.781e+05  14.097  < 2e-16 ***
## Observation          4.070e+02  1.524e+02   2.670  0.00773 ** 
## Dist_Taxi            2.777e+01  2.685e+01   1.034  0.30127    
## Dist_Market          1.444e+01  2.083e+01   0.693  0.48839    
## Dist_Hospital        4.921e+01  3.011e+01   1.634  0.10257    
## Carpet               9.894e+03  1.423e+02  69.508  < 2e-16 ***
## Builtup             -7.544e+03  2.407e+02 -31.344  < 2e-16 ***
## ParkingNo Parking   -6.156e+05  1.388e+05  -4.435 1.04e-05 ***
## ParkingNot Provided -4.975e+05  1.236e+05  -4.027 6.15e-05 ***
## ParkingOpen         -2.575e+05  1.127e+05  -2.285  0.02253 *  
## City_CategoryCAT B  -1.874e+06  9.613e+04 -19.494  < 2e-16 ***
## City_CategoryCAT C  -2.897e+06  1.059e+05 -27.367  < 2e-16 ***
## Rainfall            -9.559e+01  1.543e+02  -0.620  0.53564    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1224000 on 885 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared:  0.9433, Adjusted R-squared:  0.9426 
## F-statistic:  1228 on 12 and 885 DF,  p-value: < 2.2e-16

Ajustar el modelo

regresion2 <- lm(House_Price~Dist_Taxi+Dist_Market+Dist_Hospital+Carpet+Builtup+Parking+City_Category+Rainfall, data=df)
summary(regresion2)
## 
## Call:
## lm(formula = House_Price ~ Dist_Taxi + Dist_Market + Dist_Hospital + 
##     Carpet + Builtup + Parking + City_Category + Rainfall, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3586934  -837542   -65314   784513  4577689 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          5.568e+06  3.688e+05  15.097  < 2e-16 ***
## Dist_Taxi            2.834e+01  2.694e+01   1.052   0.2931    
## Dist_Market          1.237e+01  2.089e+01   0.592   0.5538    
## Dist_Hospital        5.071e+01  3.021e+01   1.679   0.0936 .  
## Carpet               9.907e+03  1.428e+02  69.398  < 2e-16 ***
## Builtup             -7.575e+03  2.412e+02 -31.403  < 2e-16 ***
## ParkingNo Parking   -6.170e+05  1.393e+05  -4.429 1.06e-05 ***
## ParkingNot Provided -5.077e+05  1.239e+05  -4.096 4.58e-05 ***
## ParkingOpen         -2.597e+05  1.131e+05  -2.297   0.0218 *  
## City_CategoryCAT B  -1.883e+06  9.641e+04 -19.529  < 2e-16 ***
## City_CategoryCAT C  -2.902e+06  1.062e+05 -27.321  < 2e-16 ***
## Rainfall            -9.984e+01  1.548e+02  -0.645   0.5191    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1228000 on 886 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared:  0.9429, Adjusted R-squared:  0.9422 
## F-statistic:  1329 on 11 and 886 DF,  p-value: < 2.2e-16

Generar predicciones

datos_nuevos <- data.frame(Dist_Taxi=9000, Dist_Market=8000, Dist_Hospital=12000, Carpet=1500, Builtup=1800, Parking="Covered", City_Category="CAT B", Rainfall=650)
predict(regresion2,datos_nuevos)
##       1 
## 5808370
LS0tCnRpdGxlOiAiSG91c2UgUHJpY2UgRGF0YSBSTCIKYXV0aG9yOiAiQW51YXIgR2FtZXogQTAxMjM0OTg2IgpkYXRlOiAiMjAyNi0wOC0yMCIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiBjb3NtbwotLS0KIVtdKGh0dHBzOi8vdGhlcmVhbGRlYWwuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIxLzAzL0NvcmVMb2dpYy1Ib21lLVByaWNlLVJlcG9ydHMtSGlnaGVzdC1Hcm93dGgtU2luY2UtMjAxMy5naWYpCgojIDxzcGFuIHN0eWxlID0iY29sb3I6UHVycGxlIj5UZW9yaWE8L3NwYW4+CioqbG0oKSoqIGVzIGxhIGZ1bmNpb24gZW4gUiBwYXJhIGFqdXN0YXIgbW9kZWxvcyBsaW5lYWxlcy4gIApFcyBlbCBtb2RlbG8gZXN0YWRpc3RpY28gbWFzIGJhc2ljbyBxdWUgZXhpc3RlIHkgbWFzIGZhY2lsIGRlIGludGVycHJldGFyLiAgClBhcmEgaW50ZXByZXRhcmxvIHNlIHVzYSBsYSBtZWRpZGEgUi1jdWFkcmFkYSwgcXVlIHNpZ25pZmljYSBxdWUgdGFuIGNlcmNhIGVzdGFuIGxvcyBkYXRvcyBkZSBsYSByZWdyZXNpb24uIFZhIGRlIDAgYSAxLCBkb25kZSAxIGVzIHF1ZSBlbCBtb2RlbG8gZXhwbGljYSB0b2RhIGxhIHZhcmlhYmlsaWRhZC4KCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjpQdXJwbGUiPkNvbnRleHRvPC9zcGFuPgpUZW5lbW9zIHVuYSBiYXNlIGRlIGRhdG9zIHF1ZSB0aWVuZSBsYSBkaXN0YW5jaWEgYSBkaXN0aW50b3MgcHVudG9zIGRlIGludGVyZXMgY29tbyB0YXhpLCBtZXJjYWRvLCBob3NwaXRhIGVsIGFyZWEgZGVsYSBjYXNhIHkgZWwgdGlwbyBkZSBlc3RhY2lvbmFtaWVudG8geSBsYSBjYXRlZ29yaWEgZGUgbGEgY2l1ZGFkIHkgbGEgY2FudGlkYWQgZGUgbGx1dmlhIHJlZ2lzdHJhZGEuIFNlIGRlc2VhIGdlbmVyYXIgdW4gbW9kZWxvIHByZWRpY3Rpdm8uCgojIDxzcGFuIHN0eWxlID0iY29sb3I6UHVycGxlIj5pbnN0YWxhciBQYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXJpYXM8L3NwYW4+CmBgYHtyfQojaW5zdGFsbC5wYWNrYWdlcygiY29ycnBsb3QiKQpsaWJyYXJ5KGNvcnJwbG90KQpgYGAKCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjpQdXJwbGUiPkltcG9ydGFyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+CmBgYHtyfQojIGZpbGUuY2hvb3NlKCkKZGYgPC0gcmVhZC5jc3YoIi9Vc2Vycy9hbnVhci9EZXNrdG9wL0hvdXNlUHJpY2VEYXRhLmNzdiIpCmBgYAoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOlB1cnBsZSI+RW50ZW5kZXIgbGEgYmFzZSBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CnN1bW1hcnkoZGYpCnN0cihkZikKaGVhZChkZiwxMCkKdGFpbChkZiwxMCkKY29ycmVsYWNpb24gPC0gY29yKGRmWyxzYXBwbHkoZGYsIGlzLm51bWVyaWMpXSwgdXNlPSJjb21wbGV0ZS5vYnMiKQpjb3JycGxvdChjb3JyZWxhY2lvbikKYGBgCgojIDxzcGFuIHN0eWxlID0iY29sb3I6UHVycGxlIj5MaW1waWFyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+CmBgYHtyfQoKYGBgCgojIDxzcGFuIHN0eWxlID0iY29sb3I6UHVycGxlIj5HZW5lcmFyIGVsIG1vZGVsbzwvc3Bhbj4KYGBge3J9CnJlZ3Jlc2lvbiA8LSBsbShIb3VzZV9QcmljZX4uLCBkYXRhPWRmKQpzdW1tYXJ5KHJlZ3Jlc2lvbikKYGBgCgojIDxzcGFuIHN0eWxlID0iY29sb3I6UHVycGxlIj5BanVzdGFyIGVsIG1vZGVsbzwvc3Bhbj4KYGBge3J9CnJlZ3Jlc2lvbjIgPC0gbG0oSG91c2VfUHJpY2V+RGlzdF9UYXhpK0Rpc3RfTWFya2V0K0Rpc3RfSG9zcGl0YWwrQ2FycGV0K0J1aWx0dXArUGFya2luZytDaXR5X0NhdGVnb3J5K1JhaW5mYWxsLCBkYXRhPWRmKQpzdW1tYXJ5KHJlZ3Jlc2lvbjIpCmBgYAoKIyA8c3BhbiBzdHlsZSA9ImNvbG9yOlB1cnBsZSI+R2VuZXJhciBwcmVkaWNjaW9uZXM8L3NwYW4+CmBgYHtyfQpkYXRvc19udWV2b3MgPC0gZGF0YS5mcmFtZShEaXN0X1RheGk9OTAwMCwgRGlzdF9NYXJrZXQ9ODAwMCwgRGlzdF9Ib3NwaXRhbD0xMjAwMCwgQ2FycGV0PTE1MDAsIEJ1aWx0dXA9MTgwMCwgUGFya2luZz0iQ292ZXJlZCIsIENpdHlfQ2F0ZWdvcnk9IkNBVCBCIiwgUmFpbmZhbGw9NjUwKQpwcmVkaWN0KHJlZ3Jlc2lvbjIsZGF0b3NfbnVldm9zKQpgYGAKCgo=