TeorĆ­a

lm() es la función en R para ajustar los modelos lineales.
Es el modelo estadƭstico mƔs bƔsico que existe y mpas fƔcil de intepretar.
Para interpretarlo se usa la medida R-cuadrada, que significa que tan cerca estÔn los datos de la regresión. Va de 0-1, donde 1 es que el modelo explica toda la variabilidad.

Instalar paquetes y llamar librerĆ­as

#install.packages("corrplot")
library(corrplot)
## corrplot 0.95 loaded
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Importar la base de datos

df <- read.csv("C:\\Users\\natal\\OneDrive\\Carrera\\7moSemestre\\Modulo2\\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)
##   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
##   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
df_num <- df %>%
  select(-Parking, -City_Category, -Observation)

# Convertir Parking a numƩrico
df_num$Parking_num <- as.numeric(factor(df$Parking))

# Convertir City_Category a numƩrico
df_num$City_Category_num <- as.numeric(factor(df$City_Category))

corr <-cor(df_num)
corrplot(corr)

Limpiar la base de datos

Generar el modelo

regresion <- lm(House_Price~., data=df_num)
summary(regresion)
## 
## Call:
## lm(formula = House_Price ~ ., data = df_num)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3733118  -854373   -61183   800521  4434134 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        6.713e+06  3.944e+05  17.022   <2e-16 ***
## Dist_Taxi          2.510e+01  2.764e+01   0.908    0.364    
## Dist_Market        2.078e+01  2.139e+01   0.972    0.331    
## Dist_Hospital      4.454e+01  3.094e+01   1.440    0.150    
## Carpet             9.905e+03  1.465e+02  67.623   <2e-16 ***
## Builtup           -7.576e+03  2.473e+02 -30.632   <2e-16 ***
## Rainfall          -4.080e+01  1.585e+02  -0.257    0.797    
## Parking_num       -5.791e+04  3.663e+04  -1.581    0.114    
## City_Category_num -1.477e+06  5.428e+04 -27.205   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1260000 on 889 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared:  0.9396, Adjusted R-squared:  0.9391 
## F-statistic:  1729 on 8 and 889 DF,  p-value: < 2.2e-16

Ajustar el modelo

regresion_ajustada <- lm(House_Price~Carpet+Builtup+City_Category_num, data=df_num)
summary(regresion_ajustada)
## 
## Call:
## lm(formula = House_Price ~ Carpet + Builtup + City_Category_num, 
##     data = df_num)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3609156  -844687   -18576   807390  4144180 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        7520775.8   274210.0   27.43   <2e-16 ***
## Carpet                9969.4      146.9   67.88   <2e-16 ***
## Builtup              -7612.7      249.1  -30.56   <2e-16 ***
## City_Category_num -1484965.8    54791.2  -27.10   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1275000 on 894 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared:  0.9378, Adjusted R-squared:  0.9376 
## F-statistic:  4496 on 3 and 894 DF,  p-value: < 2.2e-16

Generar predicciones

datos_nuevos <- data.frame(Carpet=1600, Builtup=1900, City_Category_num=2)
predict(regresion_ajustada,datos_nuevos)
##       1 
## 6037699
LS0tDQp0aXRsZTogIlJlZ3Jlc2nDs24gTGluZWFsIC0gSG91c2UgUHJpY2UgRGF0YXNldCINCmF1dGhvcjogIk5hdGFsaWEgQm9yamFzIE1lbmRleiAtIEEwMTAyOTQ0OCINCmRhdGU6ICIyMDI2LTA4LTE3Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IGZsYXRseQ0KLS0tDQoNCiFbXSgpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5UZW9yw61hPC9zcGFuPg0KKipsbSgpKiogZXMgbGEgZnVuY2nDs24gZW4gUiBwYXJhIGFqdXN0YXIgbG9zIG1vZGVsb3MgbGluZWFsZXMuICANCkVzIGVsIG1vZGVsbyBlc3RhZMOtc3RpY28gbcOhcyBiw6FzaWNvIHF1ZSBleGlzdGUgeSBtcGFzIGbDoWNpbCBkZSBpbnRlcHJldGFyLiAgDQpQYXJhIGludGVycHJldGFybG8gc2UgdXNhIGxhIG1lZGlkYSBSLWN1YWRyYWRhLCBxdWUgc2lnbmlmaWNhIHF1ZSB0YW4gY2VyY2EgZXN0w6FuIGxvcyBkYXRvcyBkZSBsYSByZWdyZXNpw7NuLiBWYSBkZSAwLTEsIGRvbmRlIDEgZXMgcXVlIGVsIG1vZGVsbyBleHBsaWNhIHRvZGEgbGEgdmFyaWFiaWxpZGFkLiAgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPg0KYGBge3J9DQojaW5zdGFsbC5wYWNrYWdlcygiY29ycnBsb3QiKQ0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPkltcG9ydGFyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+DQpgYGB7cn0NCmRmIDwtIHJlYWQuY3N2KCJDOlxcVXNlcnNcXG5hdGFsXFxPbmVEcml2ZVxcQ2FycmVyYVxcN21vU2VtZXN0cmVcXE1vZHVsbzJcXEhvdXNlUHJpY2VEYXRhLmNzdiIpDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPkVudGVuZGVyIGxhIGJhc2UgZGUgZGF0b3M8L3NwYW4+DQpgYGB7cn0NCnN1bW1hcnkoZGYpDQpzdHIoZGYpDQpoZWFkKGRmKQ0KDQpkZl9udW0gPC0gZGYgJT4lDQogIHNlbGVjdCgtUGFya2luZywgLUNpdHlfQ2F0ZWdvcnksIC1PYnNlcnZhdGlvbikNCg0KIyBDb252ZXJ0aXIgUGFya2luZyBhIG51bcOpcmljbw0KZGZfbnVtJFBhcmtpbmdfbnVtIDwtIGFzLm51bWVyaWMoZmFjdG9yKGRmJFBhcmtpbmcpKQ0KDQojIENvbnZlcnRpciBDaXR5X0NhdGVnb3J5IGEgbnVtw6lyaWNvDQpkZl9udW0kQ2l0eV9DYXRlZ29yeV9udW0gPC0gYXMubnVtZXJpYyhmYWN0b3IoZGYkQ2l0eV9DYXRlZ29yeSkpDQoNCmNvcnIgPC1jb3IoZGZfbnVtKQ0KY29ycnBsb3QoY29ycikNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+TGltcGlhciBsYSBiYXNlIGRlIGRhdG9zPC9zcGFuPg0KYGBge3J9DQoNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+R2VuZXJhciBlbCBtb2RlbG88L3NwYW4+DQpgYGB7cn0NCnJlZ3Jlc2lvbiA8LSBsbShIb3VzZV9QcmljZX4uLCBkYXRhPWRmX251bSkNCnN1bW1hcnkocmVncmVzaW9uKQ0KYGBgDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+QWp1c3RhciBlbCBtb2RlbG88L3NwYW4+DQpgYGB7cn0NCnJlZ3Jlc2lvbl9hanVzdGFkYSA8LSBsbShIb3VzZV9QcmljZX5DYXJwZXQrQnVpbHR1cCtDaXR5X0NhdGVnb3J5X251bSwgZGF0YT1kZl9udW0pDQpzdW1tYXJ5KHJlZ3Jlc2lvbl9hanVzdGFkYSkNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+R2VuZXJhciBwcmVkaWNjaW9uZXM8L3NwYW4+DQpgYGB7cn0NCmRhdG9zX251ZXZvcyA8LSBkYXRhLmZyYW1lKENhcnBldD0xNjAwLCBCdWlsdHVwPTE5MDAsIENpdHlfQ2F0ZWdvcnlfbnVtPTIpDQpwcmVkaWN0KHJlZ3Jlc2lvbl9hanVzdGFkYSxkYXRvc19udWV2b3MpDQpgYGANCg0K