lm() es la función en R para ajustar modelos lineales. Es el modelo estadístico más básico que existe y más fácil de interpretar. Para interpretarlo se usa la medida R-cuadrada, que significa qué tan cerca están los datos de la regresión. Va de 0 a 1, donde 1 es que el modelo explica toda la variabilidad.
El objetivo es identificar cuáles variables tienen mayor influencia en el precio de venta de una vivienda, con la finalidad de construir un modelo de regresión que permita explicar y estimar dicho precio.
# install.packages("corrplot")
library(corrplot)
## corrplot 0.95 loaded
# file.choose()
df <- read.csv("/Users/elisarivas/Desktop/IA concentración/M2/HousePriceData.csv")
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
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
numericas <- df[, c("Dist_Taxi","Dist_Market","Dist_Hospital","Carpet","Builtup","Rainfall","House_Price")]
correlacion <- cor(numericas)
corrplot(correlacion)
# 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
regresion2 <- lm(House_Price ~ Carpet + Builtup + Parking + City_Category, data=df)
summary(regresion2)
##
## Call:
## lm(formula = House_Price ~ Carpet + Builtup + Parking + City_Category,
## data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3430967 -802513 -46915 775070 4263090
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6477702.2 272077.2 23.808 < 2e-16 ***
## Carpet 9968.8 143.3 69.584 < 2e-16 ***
## Builtup -7611.6 243.3 -31.279 < 2e-16 ***
## ParkingNo Parking -536301.8 139943.6 -3.832 0.000136 ***
## ParkingNot Provided -457380.4 125020.1 -3.658 0.000269 ***
## ParkingOpen -236576.3 114356.8 -2.069 0.038857 *
## City_CategoryCAT B -1918518.1 97007.4 -19.777 < 2e-16 ***
## City_CategoryCAT C -2908756.6 107359.6 -27.094 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1243000 on 890 degrees of freedom
## (7 observations deleted due to missingness)
## Multiple R-squared: 0.9412, Adjusted R-squared: 0.9407
## F-statistic: 2034 on 7 and 890 DF, p-value: < 2.2e-16
summary(regresion)$adj.r.squared # modelo completo
## [1] 0.9425585
summary(regresion2)$adj.r.squared # modelo reducido
## [1] 0.9407122