1-Preparacion y carga de los datos
Se realizan algunos analisis exploratorios
Se obtienen la cantidad de valores unicos de cada columna
Luego se obtienen la cantidad de valores faltantes por cada columna.
Se observa que no hay valores faltantes
Matriz de correlac?n de las variables numericas.
Se observa una fuerte correlacion entre sup total y supercidie cubierta. Tener en cuenta esto al ver los supuestos de colinelidad del modelo.
Las suposiciones del modelo que hacen referencia a los residuos pueden resumirse en los siguientes puntos:
Normalidad de los residuos Independencia de los residuos Homocedasticidad (igualdad de las varianzas de los residuos) Linealidad de los residuos
Histrogra de la variable precio
En el Histograma se puede ver asimetr?a a derecha.
c-Boxplot por tipo de propiedad
Del Boxplot se pueden observar valores at?picos univariados en los extremos superiores. Tambien que las casas en promedio son mas caras que el resto, y posee mayor dispersion. El precio promedio, y las dispersion de los departamentos es parecido a los PHs, pero poseen mayor cantidad de valores fuera del rango intercuartil.
1-Regresi?n Lineal M?ltiple a- Modelo para predecir precio con todas las covariables
Analisis global de la significatividad
Modelo de regresión lineal múltiple para predecir el precio de las propiedades:
price=β0+β1l3+β2rooms+β3bathrooms+β4surface_covered+β5surface_total+β6property_type
property_type y l3 son variables dummy.
Se puede verificar que a nivel global la variable categoira l3 y property_type son significaivas, al igual que el resto de variables.
Analizando los coeficientes del modelo: b0 es ordenada al origen corresponde al valor de una propiedad. (cuando el resto de las variables son cero), en este caso no tendria sentido su utilizacion ya que corresponge a una propediedad con 0 metros , 0 rooms, o bathrooms, etc.
Por cada aumento de una room, los precios estimados bajan 3961,27, con el supuesto que permanecen constantes las otras variables.
Por cada aumento del tamañoo en m2 de la superficie cubierta, el precio estimado aumenta en 1457,18, suponiendo que se mantienen constantes las otras variables
Por cada aumento del tamaño en m2 de la superficie total, el precio estimado aumenta en 919,08, suponiendo que se mantienen constantes las otras variables
Con respecto a las variables dammy se podria ver por ej que: Si la propiedad es tipo departamento, el precio estimado aumenta en 9265,32, suponiendo que se mantienen constantes las otras variables. (aumento con respecto al valor basal que en est caso es casa)
Si la propiedad perteneciente a la localidad Belgrano, el precio estimado aumenta en 69648.12, suponiendo que se mantienen constantes las otras variables.(el aumento es con respecto al barrio basal Abasto) Con respeto a lo barrios se puede observar que algunos presenta coeficientes positivos como por ejemplo Recoleta y otras negativos por ej. Pompeya.
El p-valor asociado al contraste (2.2e-16) es menor que a = 0.05 , por lo que rechazamos la hipótesis nula. Esto implica que al menos una de las variables independientes contribuye de forma significativa a la explicación de la variable respuesta. Los coeficientes son significativos excepto para:AgronomÃa, Almagro,Barracas,Caballito,Catalinas,Chacarita,Montecastro Castro,Parque Centenario,Parqe Chas, Paternal,Santelomo, V. Crespo, V. del Parque,V.Luro, V. real,V.Riachuelo,Santa Rita, todas son mayores a 0.05 por lo que no rechazamos la hipótesis nula de significación de las variables. Estas variables no son válidas para predecir el precio de las propiedas como se encuentran codificadas. Para el resto de variables es significativo el p valor. Es interesante destacar que se agrego dimensionalidad al modelo con el agregado de los barrios y quizas carece de sentido interpretar la significatividad sobre los barrios codificado de esta manera.
Tambien seria necesario tener en cuenta que en los distintos barrios la cantidad de propiedades a la venta son distintas.
Con respecto a las medidas de evaluacion del modelo El R2 ajustado es 0.7761 resulta ser mayor que el R2 ajustado del modelo con solo una variable explicativa del TP1, esto indica que la inclusi?n de las variables rooms, bathromms, surface_Total, etc., mejora nuestra capacidad para predecir el precio. Para validar estos supuestos deberiamos poder confirmar que se cumplen con los requisitos del modelo.
c2- Predicción
new<-data.frame(l3="Abasto",rooms=3,bathrooms=2,surface_total=120,surface_covered=120, property_type="Departamento")
Warning message:
In file(con, "rb") :
cannot open file 'C:/Users/PC/Desktop/EE/TPentrega/EEA-TPs2/.Rproj.user/shared/notebooks/F3385E58-eea2019_tp2_Copa_Vanesa rev10/1/s/chunks.json': No such file or directory
predict.lm(modelo,new,interval="confidence")
fit lwr upr
1 324596.4 316347.5 332845.4
predict.lm(modelo,new,interval="prediction")
fit lwr upr
1 324596.4 193837.5 455355.3
Se puede observar intevalo de cofianza.
new1<-data.frame(l3="Balvanera",rooms=2,bathrooms=3,surface_total=100,surface_covered=80, property_type="PH")
predict.lm(modelo,new1,interval="confidence")
fit lwr upr
1 215267.6 210389.2 220146
predict.lm(modelo,new1,interval="prediction")
fit lwr upr
1 215267.6 84678.03 345857.2
Se puede observar los Rangos del IC para el primer caso 8248 y el segundo 4878,4. Se elije el primer opcion de venta por su valor esperado de venta. Se elije ABASTO.
d-Modelo sin la covariable l3
modelo2<-lm(price~rooms+ bathrooms+ surface_total + surface_covered+property_type, data=prop)
summary(modelo2)
Call:
lm(formula = price ~ rooms + bathrooms + surface_total + surface_covered +
property_type, data = prop)
Residuals:
Min 1Q Median 3Q Max
-518799 -36177 -9643 25740 724251
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -131096.86 2750.50 -47.66 <2e-16 ***
rooms -13348.53 519.02 -25.72 <2e-16 ***
bathrooms 42664.68 756.37 56.41 <2e-16 ***
surface_total 877.03 27.59 31.79 <2e-16 ***
surface_covered 1783.80 33.53 53.21 <2e-16 ***
property_typeDepartamento 135177.47 2513.93 53.77 <2e-16 ***
property_typePH 68598.52 2677.46 25.62 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 79210 on 45897 degrees of freedom
Multiple R-squared: 0.6832, Adjusted R-squared: 0.6831
F-statistic: 1.649e+04 on 6 and 45897 DF, p-value: < 2.2e-16
En este caso el p valor del modelo es signigicativo, todas las variables tambien son significativas, el R2ajustado dio un poco mas bajo como es de esperar.(l3 aporta variabilidad al modelo) Se puede observar como diferencia del primer modelo que todos los estimadores aumentaron, room disiminuyo.
e- Comparando los modelos se puede ver que l3 aporta informacion relevante para el modelo, pero asi codificado aporta mucha variabilidad, por ello seria conveniente cofificarlo de otra manera para que su alta dimensionalidad no afecte al modelo. Se continua con la generacion de una nueva variable.
El modelo que mejor explica la variabilidad del modelo comparando los R2ajustados es el primer modelo.
2-Creacion de Variables barrios, debido a que algunos barrios no eran significativos se considera utilizar la relacion precio/superficie_total que servira para luego definir tres categorias de Barrio.
datain <- prop %>%
mutate(Indices=price/surface_total)
datain2<-data.frame(datain)
str(datain2)
'data.frame': 45904 obs. of 9 variables:
$ id : chr "AfdcsqUSelai1ofCAq2B0Q==" "ESzybdH7YU2uIU1/kHtRGw==" "r22OfzZ3kXooSPoE5HMuZQ==" "atZQXVtyfG7+OiX6gYY3lA==" ...
$ l3 : chr "Velez Sarsfield" "Nuñez" "Almagro" "Almagro" ...
$ rooms : num 3 1 1 1 1 1 1 1 1 1 ...
$ bathrooms : num 2 1 1 1 1 1 1 1 1 1 ...
$ surface_total : num 95 44 40 49 40 40 40 49 40 40 ...
$ surface_covered: num 69 38 37 44 37 37 37 44 37 37 ...
$ price : num 199900 147000 92294 115000 77000 ...
$ property_type : chr "Casa" "Departamento" "Departamento" "Departamento" ...
$ Indices : num 2104 3341 2307 2347 1925 ...
Vemos como se distribuye la nueva Variable
ggplot(datain, aes(x=Indices)) +
ggtitle('Indice histograma') +
xlab('Indice') +
ylab('frequency') +
geom_histogram(fill='red', alpha=0.75, bins=30 )
Se separan los barrios por el promedio de precio de propiedad para cada barrio
dataporbarrio<-datain2%>%
group_by(l3)%>%
summarise(promediobarrio=mean(Indices),
cantidad=n())%>%
arrange(promediobarrio)
dataporbarrio
datain3 <- merge(x = datain2, y = dataporbarrio, by = "l3", all.x = TRUE)
Veo como se distribuye los quantiles de la nueva variable
summary((datain3$promediobarrio))
Min. 1st Qu. Median Mean 3rd Qu. Max.
1093 2379 2610 2768 3316 5472
Se genera nueva variable Barrio clasificando en BAJO MEDIO ALTO utilizando el 1er y 3er quantil de la distribucion de precio promedio por barrio
datain3 <-datain3%>%
mutate(Barrios=factor(case_when(promediobarrio<=2379~"BAJO",
promediobarrio>2379&promediobarrio<=3316~"MEDIO",
promediobarrio>3316~"ALTO"),
levels=c("BAJO", "MEDIO", "ALTO")))
datain3%>%
group_by(Barrios)%>%
summarise(cant=length(id))
d-Nuevo modelo utilizando barrios
modelo3<-lm(price~rooms+ bathrooms+ surface_total + surface_covered+property_type+Barrios, data=datain3)
summary(modelo3)
Call:
lm(formula = price ~ rooms + bathrooms + surface_total + surface_covered +
property_type + Barrios, data = datain3)
Residuals:
Min 1Q Median 3Q Max
-445722 -36280 -6020 26105 677385
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -141502.47 2510.29 -56.37 <2e-16 ***
rooms -7831.99 474.32 -16.51 <2e-16 ***
bathrooms 35582.69 690.40 51.54 <2e-16 ***
surface_total 895.82 25.04 35.78 <2e-16 ***
surface_covered 1636.40 30.46 53.72 <2e-16 ***
property_typeDepartamento 101782.63 2309.46 44.07 <2e-16 ***
property_typePH 51162.33 2436.69 21.00 <2e-16 ***
BarriosMEDIO 41959.01 840.14 49.94 <2e-16 ***
BarriosALTO 96229.28 976.41 98.55 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 71880 on 45895 degrees of freedom
Multiple R-squared: 0.7391, Adjusted R-squared: 0.739
F-statistic: 1.625e+04 on 8 and 45895 DF, p-value: < 2.2e-16
En este caso el p valor del modelo es signigicativo, el R2ajustado es mayor que del modelo anterior. En este casos todos los coeficientes de las variables son significativas. La variable control es barrio bajo, las otras dummy tienen coeficientes positivos Se puede observar que todas los estimadores (no relacionados a barrios) aumentaron.
c-El modelo que explica mejor la variabilidad de los datos es el modelo que utiliza l3, debido que e R2ajustado es mejor, pero habria que tener en cuenta que este tercer modelo es mas simple y todas las variables poseen coeficientes siginificativos. Por esto se podria elegir este modelo por sobre el que utiliza l3.
d- se incorpora la nueva variable superficie patio, se elimina las propiedades donde la superficie cubierta sea menor que la total
Como se comento mas arriba las variables superficie total y superficie cubierta estan correlacionadas
dataout2 <- datain3 %>%
mutate(surface_patio=surface_total-surface_covered)
dataout2<-dataout2 %>%filter(surface_total>=surface_covered)
glimpse(dataout2)
Observations: 45,904
Variables: 13
$ l3 [3m[38;5;246m<chr>[39m[23m "Abasto", "Abasto", "Abasto", "Abasto", "Abasto", "Abasto", "Abasto", "...
$ id [3m[38;5;246m<chr>[39m[23m "rwy9pEXkzhqh+/rgA0kqfQ==", "xeXds/a6KKJy4nSlwJ+mSg==", "A0eVmVsEFCsj9f...
$ rooms [3m[38;5;246m<dbl>[39m[23m 1, 3, 3, 1, 2, 5, 2, 1, 3, 1, 1, 1, 5, 2, 4, 3, 1, 2, 1, 3, 1, 2, 3, 3,...
$ bathrooms [3m[38;5;246m<dbl>[39m[23m 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2,...
$ surface_total [3m[38;5;246m<dbl>[39m[23m 43, 81, 81, 87, 33, 145, 52, 33, 74, 30, 43, 58, 145, 57, 78, 62, 43, 4...
$ surface_covered [3m[38;5;246m<dbl>[39m[23m 39, 75, 75, 70, 33, 104, 42, 30, 64, 30, 39, 52, 104, 54, 73, 40, 39, 4...
$ price [3m[38;5;246m<dbl>[39m[23m 94000, 183000, 185000, 200000, 70000, 330000, 145000, 94050, 167500, 89...
$ property_type [3m[38;5;246m<chr>[39m[23m "Departamento", "Departamento", "Departamento", "Departamento", "Depart...
$ Indices [3m[38;5;246m<dbl>[39m[23m 2186.047, 2259.259, 2283.951, 2298.851, 2121.212, 2275.862, 2788.462, 2...
$ promediobarrio [3m[38;5;246m<dbl>[39m[23m 2558.354, 2558.354, 2558.354, 2558.354, 2558.354, 2558.354, 2558.354, 2...
$ cantidad [3m[38;5;246m<int>[39m[23m 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 2...
$ Barrios [3m[38;5;246m<fct>[39m[23m MEDIO, MEDIO, MEDIO, MEDIO, MEDIO, MEDIO, MEDIO, MEDIO, MEDIO, MEDIO, M...
$ surface_patio [3m[38;5;246m<dbl>[39m[23m 4, 6, 6, 17, 0, 41, 10, 3, 10, 0, 4, 6, 41, 3, 5, 22, 4, 0, 0, 12, 4, 0...
d ii Analizamos un nuevo modelo lineal
modelo4<-lm(price~rooms+ bathrooms + surface_covered+property_type+Barrios+ surface_patio, data=dataout2)
summary(modelo4)
Call:
lm(formula = price ~ rooms + bathrooms + surface_covered + property_type +
Barrios + surface_patio, data = dataout2)
Residuals:
Min 1Q Median 3Q Max
-445722 -36280 -6020 26105 677385
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -141502.47 2510.29 -56.37 <2e-16 ***
rooms -7831.99 474.32 -16.51 <2e-16 ***
bathrooms 35582.69 690.40 51.54 <2e-16 ***
surface_covered 2532.22 16.06 157.71 <2e-16 ***
property_typeDepartamento 101782.63 2309.46 44.07 <2e-16 ***
property_typePH 51162.33 2436.69 21.00 <2e-16 ***
BarriosMEDIO 41959.01 840.14 49.94 <2e-16 ***
BarriosALTO 96229.28 976.41 98.55 <2e-16 ***
surface_patio 895.82 25.04 35.78 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 71880 on 45895 degrees of freedom
Multiple R-squared: 0.7391, Adjusted R-squared: 0.739
F-statistic: 1.625e+04 on 8 and 45895 DF, p-value: < 2.2e-16
En este caso todos los coeficientes son significativos por su p-valor. El R2 ajustado dio igual , la variabilidad explicada es la misma del modelo anterior El coeficiente de surface patio es positivo al igual que el del superficie cubierta pero el valor superficie cubierta es mayor lo que indica que al aumentar un metro de superficie cubierta (manteniendo el resto de las covariables constantes) aumenta mas el valor del precio esperado comparado con superficie patio.
3.Se analizan los residuos del modelo que posee superficie patio
plot(modelo4)
El primer modelo muestra los residuos versus el modelo ajustado, se deberia observar un patron no definido , pero en ese caso se podria observar un embudo que daria indicio de heterocedasticidad.
El segundo grafico QQ Normal evidencia que no se cumple con el supuesto de normalidad. Se observan valores que se alejan de la recta en los extremos. El tercer grafico Scale location muestra los residuos estandarizados, deberian dar sin estructura y cercanos al 0. En este caso se ve que no se puede asegurar la homocedasticidad. El ultimo gafico de residuos vs leverage, los puntos que salen de la linea punteada (distancia de Cook) posiblemente posean alto leverage. En este caso no se observan estos valores influyentes.
3d Se Analiza un nuevo modelo
modelo5<-lm(log(price)~log(rooms)+ log(bathrooms) + log(surface_covered)+property_type+Barrios+ surface_patio, data=dataout2)
summary(modelo5)
Call:
lm(formula = log(price) ~ log(rooms) + log(bathrooms) + log(surface_covered) +
property_type + Barrios + surface_patio, data = dataout2)
Residuals:
Min 1Q Median 3Q Max
-1.37399 -0.15780 -0.01026 0.14704 1.30806
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.224e+00 1.906e-02 431.446 < 2e-16 ***
log(rooms) -4.228e-02 3.919e-03 -10.790 < 2e-16 ***
log(bathrooms) 1.787e-01 3.953e-03 45.216 < 2e-16 ***
log(surface_covered) 8.274e-01 4.592e-03 180.168 < 2e-16 ***
property_typeDepartamento 2.328e-01 7.481e-03 31.119 < 2e-16 ***
property_typePH 6.004e-02 7.925e-03 7.575 3.66e-14 ***
BarriosMEDIO 2.287e-01 2.761e-03 82.842 < 2e-16 ***
BarriosALTO 4.283e-01 3.207e-03 133.560 < 2e-16 ***
surface_patio 3.942e-03 8.246e-05 47.810 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2362 on 45895 degrees of freedom
Multiple R-squared: 0.8079, Adjusted R-squared: 0.8079
F-statistic: 2.413e+04 on 8 and 45895 DF, p-value: < 2.2e-16
El p valo del tes estadistico es significativo. El r2 ajustado es mas altos que todos los modelos antes probados. El interceto no posee utilidad practica. Con respecto a log(rooms) es la elasticidad del precio respecto a rooms es -0,04 esto nos indica que por cada aumento en un 1% de la cantidad de rooms corresponde a una disminucion de 0,04% del precio esperado. Con respecto a log(bathrooms) es la elasticidad del precio respecto a rooms es 0,18 esto nos indica que por cada aumento en un 1% de la cantidad de bathrooms corresponde a un aumento de 0,18% del precio esperado. Con respecto a log(surface_covered) es la elasticidad del precio respecto a rooms es 0,827 esto nos indica que por cada aumento en un 1% de la cantidad de surface_covered corresponde a un aumento de 0,827% del precio esperado . Analizando las variables no transformadas el precio esperado aumente en un 0.4% por metro cuadrado de superficie cubierta, aumenta un 20% si es departamento o 6% si es PH,recordar que esto es respecto a la variable basal en este caso casa. con respecto a barrios si se trata de barrio medio el aumento esperado es de %23, y %43 si es barrio alto, en este caso la variable basal es barrio bajo. En todos los casos manteniendo el resto de las variables constantes.
plot(modelo5)
Analizando los supestos del modelo 5: el primer grafico muestra los residuos versus el modelo ajustado, se podria observar un patron no definido , esto podria dar un indicio de hocedsaticidad.
El segundo grafico QQ Normal evidencia decir que se cumple con el supuesto de normalidad. Se observa con respecto al modelo anterior que hay pocos valores que se alejan de la recta en los extremos.
El tercer grafico Scale location muestra los residuos estandarizados, deberian dar sin estructura y cercanos al 0. En este caso se podria decir que hay homocedasticidad. El ultimo gafico de residuos vs leverage, los puntos que salen de la linea punteada (distancia de Cook) posiblemente posean alto leverage. En este caso no se observan estos valores influyentes.
3-Evaluacion de Modelos a-Anidamos la variable por property_type
by_ptype <- dataout2 %>%
group_by(property_type) %>%
nest()
by_ptype$data[[1]]#DEPARTAMENTO
b-
ptype_model <- function(df) {
lm(price~rooms+ bathrooms + surface_covered+Barrios, data=df)
}
portipo<-by_ptype%>%
mutate(
modelo=map(data,ptype_model)
)
portipo
glance<-portipo%>%
mutate(glance=map(modelo,broom::glance))%>%
unnest(glance, .drop=TRUE)
glance
Al analizar los tres modelos, se puede ver que: -los tres modelos son signifcativos, el pvalor del estadistico es menor a 0.05. -comparando los R2ajustados se observa que el mayor es el de departamento, luego continua el de PH y finalmente el de las casas. Cabe recordar que la gran mayoria de los datos correspondian a departamentos. Ninguno de estos supera al modelo con las variables transformadas anteriomente aplicado.