Con base en los datos de ofertas de vivienda descargadas del portal
Fincaraiz para apartamento de estrato 4 con área construida menor a 200
m2 (vivienda4.RDS) la inmobiliaria A&C requiere el apoyo de un
cientifico de datos en la construcción de un modelo que lo oriente sobre
los precios de inmuebles.
Con este propósito el equipo de asesores a diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar
El informe se debe entregar en formato pdf en la plataforma Bs . Adjunte los anexos que respalden el informe.
Antes de comenzar con el problema crearemos un data set con la información solicitada esto debido a que no se requiere realizar el modelo sobre todoa la base si no solo para apartamentos de estrato 4 con área construida menor a 200 m2
La base que tenemos es la siguiente ,la cual procederemos a validar y de la cual filtraremos solo los datos que serán estudiados
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ lubridate 1.9.2 ✔ tibble 3.2.1
## ✔ purrr 1.0.1 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ psych::%+%() masks ggplot2::%+%()
## ✖ psych::alpha() masks ggplot2::alpha()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::select() masks MASS::select()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Loading required package: summarytools
##
##
## Attaching package: 'summarytools'
##
##
## The following object is masked from 'package:tibble':
##
## view
En esta sección empezaremos a dar solución a cada uno de los puntos especificados para la actividad
1. Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados) - incluir gráficos e indicadores apropiados interpretados.
cómo podemos observar la base no tiene datos faltantes los cuales deben ser tratados por medio de imputación de valores, ahora miraremos los porcentajes faltantes de cada variable
Procederemos a ver la cantidad de vacíos que tiene la información
## # A tibble: 5 × 3
## variable n_miss pct_miss
## <chr> <int> <dbl>
## 1 zona 0 0
## 2 estrato 0 0
## 3 preciom 0 0
## 4 areaconst 0 0
## 5 tipo 0 0
Precedemos a eliminar los datos duplicados de la data
## # A tibble: 932 × 5
## zona estrato preciom areaconst tipo
## <fct> <fct> <dbl> <dbl> <fct>
## 1 Zona Norte 4 220 52 Apartamento
## 2 Zona Norte 4 320 108 Apartamento
## 3 Zona Sur 4 290 96 Apartamento
## 4 Zona Norte 4 220 82 Apartamento
## 5 Zona Norte 4 220 75 Apartamento
## 6 Zona Norte 4 162 60 Apartamento
## 7 Zona Norte 4 225 84 Apartamento
## 8 Zona Norte 4 370 117 Apartamento
## 9 Zona Norte 4 155 60 Apartamento
## 10 Zona Norte 4 240 75 Apartamento
## # ℹ 922 more rows
ahora procederemos a eliminar los outliers de la informacion para lo cual utilizaremos el grafico de cajas y determinar los outliers, este proceso se realiza tantas veces sea necesario hasta que no haya Outliers
## [1] "estos son los outliers del primer Cliclo"
## [1] 198 137 200 137 134 145 175 143 200 136 160 145 198 193 197 151 138 155 144
## [20] 140 135 143 160 184 183 160 175 150 159 200 163 160 147 173 150 137 154 152
## [1] "estos son los outliers del segundo Cliclo"
## [1] 127 130 126 129 126 126 130 133 126 126
## [1] "estos son los outliers del tercer Cliclo"
## [1] 124 125 124 123 125 125 125 123 125 123
## [1] "estos son los outliers del cuarto Cliclo"
## numeric(0)
## [1] "validamos si quedo la base con nulos"
Con la base ya limpia empezaremos por graficar las diferentes variables a tener en cuenta las cuales son precio y área construida
## # A tibble: 874 × 5
## zona estrato preciom areaconst tipo
## <fct> <fct> <dbl> <dbl> <fct>
## 1 Zona Norte 4 220 52 Apartamento
## 2 Zona Norte 4 320 108 Apartamento
## 3 Zona Sur 4 290 96 Apartamento
## 4 Zona Norte 4 220 82 Apartamento
## 5 Zona Norte 4 220 75 Apartamento
## 6 Zona Norte 4 162 60 Apartamento
## 7 Zona Norte 4 225 84 Apartamento
## 8 Zona Norte 4 370 117 Apartamento
## 9 Zona Norte 4 155 60 Apartamento
## 10 Zona Norte 4 240 75 Apartamento
## # ℹ 864 more rows
Ahora procederemos a colocar los indicadores apropiados para los datos de precios y área construida
## [1] "Indicadores para precio"
## Media Mediana Moda Desviacion.Estandar Varianza Valor.Mínino Valor.Maximo
## 1 201.5572 190 240 60.22428 3626.964 78 510
## custorisis asimetria
## 1 3.604405 0.8100439
## [1] "Indicadores para Area Construida"
## Media Mediana Moda Desviacion.Estandar Varianza Valor.Mínino Valor.Maximo
## 1 74.29176 72 60 17.0111 289.3775 40 122
## custorisis asimetria
## 1 2.92487 0.6941724
1.1. Interpretación de gráficos e indicadores de análisis
univariado
• Tanto el precio como el área
construida tiene una asimetría positiva lo cual nos da a entender que la
gente que realiza ventas de apartamentos en el estrato 4 hacia espacios
pequeños y valores bajos
• Los precios de venta de
apartamentos oscilan entre 78 y 510 millones , pero en promedio la gente
prefiere pagar 201 millones
• El área construida oscila
entre 40 metros cuadrados y 122 metros cuadrados, pero la gente en
promedio prefiere apartamentos con 74 metros cuadrados
2. Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (area construida) - incluir gráficos e indicadores apropiados interpretados.
Procedemos a crear los graficos e indicadores para el análisis bivariado
## [1] "1. Diagrama de Dispersion Precio - area construida con LM"
## `geom_smooth()` using formula = 'y ~ x'
## [1] "2. Diagrama de Dispersion Presio - area construida"
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
procedemos a crear el coeficiente de correlación entre las dos variables
## [1] "el coeficiente de correlacion entre las variables es: "
## [1] 0.7041217
## [1] "Realizamos las pruebas de Hipotesis sobre P "
##
## Pearson's product-moment correlation
##
## data: BaseLimpia$areaconst and BaseLimpia$preciom
## t = 29.282, df = 872, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6690480 0.7360662
## sample estimates:
## cor
## 0.7041217
## [1] "Realizamos la Matriz de coorelaciones "
## BaseLimpia.areaconst BaseLimpia.preciom
## BaseLimpia.areaconst 1.000 0.704
## BaseLimpia.preciom 0.704 1.000
2.1. Interpretación de gráficos e indicadores de análisis
Bivariado
• Debido a lo que se muestra en el
gráfico de dispersión se puede determinar que existe una relación
positiva entre las variables de precio y área, esto quiere decir que
entre mayor área construida mayor será el precio del inmueble
• Además de lo anterior al tener el análisis de coeficiente de
correlación en:
## [1] 0.7041217
podemos afirmar que la relacion es positiva debil esto debido a que el
valor se encuentra en el rango de 0.3 a 0.8 3. Estime el modelo de regresión lineal simple entre precio=f(area)+£. Interprete los coeficientes del modelo ß0, ß1 en caso de ser correcto.
Antes de iniciar con el proceso de modelado, debemos asumir una hipótesis para ser validada , para este caso asumiremos que la hipótesis a probar es que a mayor cantidad de área construida mayo es el valor del inmueble osea una relacion positiva entre las variables tal y como lo vimos en el analisis bivariado
Procederemos a crear el modelo especificado
##
## Call:
## lm(formula = preciom ~ areaconst, data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -163.628 -25.927 -2.938 26.760 192.009
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.36290 6.48803 2.522 0.0118 *
## areaconst 2.49280 0.08513 29.282 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.79 on 872 degrees of freedom
## Multiple R-squared: 0.4958, Adjusted R-squared: 0.4952
## F-statistic: 857.4 on 1 and 872 DF, p-value: < 2.2e-16
Procedemos a crear las transformación de variables para ver cual mejora en el R-square, empezamos con lineal - Logaritmo
##
## Call:
## lm(formula = preciom ~ log(areaconst), data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -160.22 -25.12 -1.20 25.05 209.98
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -620.706 27.743 -22.37 <2e-16 ***
## log(areaconst) 191.986 6.469 29.68 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.5 on 872 degrees of freedom
## Multiple R-squared: 0.5025, Adjusted R-squared: 0.5019
## F-statistic: 880.8 on 1 and 872 DF, p-value: < 2.2e-16
Procedemos a crear las transformación de variables para ver cual mejora en el R-square, empezamos con logaritmo - lineal
##
## Call:
## lm(formula = log(preciom) ~ areaconst, data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.92249 -0.13492 0.00253 0.14802 0.71428
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.3740084 0.0313622 139.5 <2e-16 ***
## areaconst 0.0119737 0.0004115 29.1 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2068 on 872 degrees of freedom
## Multiple R-squared: 0.4926, Adjusted R-squared: 0.492
## F-statistic: 846.6 on 1 and 872 DF, p-value: < 2.2e-16
Procedemos a crear las transformación de variables para ver cual mejora en el R-square, empezamos con logaritmo - Logaritmo
##
## Call:
## lm(formula = log(preciom) ~ log(areaconst), data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.9107 -0.1243 0.0069 0.1444 0.7704
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.25689 0.13216 9.511 <2e-16 ***
## log(areaconst) 0.93549 0.03081 30.359 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2025 on 872 degrees of freedom
## Multiple R-squared: 0.5138, Adjusted R-squared: 0.5133
## F-statistic: 921.6 on 1 and 872 DF, p-value: < 2.2e-16
Procederemos a realizar una comparación entre los 4 modelos creados
##
## Please cite as:
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
##
## ================================================================
## Dependent variable:
## --------------------------------------------
## preciom log(preciom)
## (1) (2) (3) (4)
## ----------------------------------------------------------------
## areaconst 2.493*** 0.012***
## (0.085) (0.0004)
##
## log(areaconst) 191.986*** 0.935***
## (6.469) (0.031)
##
## Constant 16.363** -620.706*** 4.374*** 1.257***
## (6.488) (27.743) (0.031) (0.132)
##
## ----------------------------------------------------------------
## Observations 874 874 874 874
## R2 0.496 0.503 0.493 0.514
## Adjusted R2 0.495 0.502 0.492 0.513
## Residual Std. Error 42.789 42.502 0.207 0.202
## F Statistic 857.429*** 880.822*** 846.623*** 921.645***
## ================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
3.1. Interpretación de coeficientes del modelo generado lineal -
lineal
• El valor de R-cuadrado especifica que el
primer modelo (lineal - lineal) explica la variable y con un 49 % a la
variable respuesta , esto quiere decir que la variable área construida
explica con este modelo al valor del inmueble con un 49%
##
## Call:
## lm(formula = preciom ~ areaconst, data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -163.628 -25.927 -2.938 26.760 192.009
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.36290 6.48803 2.522 0.0118 *
## areaconst 2.49280 0.08513 29.282 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.79 on 872 degrees of freedom
## Multiple R-squared: 0.4958, Adjusted R-squared: 0.4952
## F-statistic: 857.4 on 1 and 872 DF, p-value: < 2.2e-16
• Como podemos observar los valores P indican que los indicadores son significativos ya que en los dos casos es 0 o por debajo de 0.05
• El valor obtenido para ß0 es de 16.36 y para ß1 es de 2.49 , teniendo en cuenta los resultados podemos determinar que por cada aumento de 1 unidad en el área el precio aumentara en 2 millones4. Construir un intervalo de confianza (95%) para el coeficiente ß1, interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipótesis t..
El intervalo de confianza tiene los siguientes valores:
## [1] "estos son los datos del primer Modelos"
##
## Call:
## lm(formula = preciom ~ areaconst, data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -163.628 -25.927 -2.938 26.760 192.009
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.36290 6.48803 2.522 0.0118 *
## areaconst 2.49280 0.08513 29.282 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.79 on 872 degrees of freedom
## Multiple R-squared: 0.4958, Adjusted R-squared: 0.4952
## F-statistic: 857.4 on 1 and 872 DF, p-value: < 2.2e-16
## [1] "estos son los intervalos de confianzo con 95%"
## 2.5 % 97.5 %
## areaconst 2.325712 2.659883
4.1. Interpretación de intervalos de confianza
•Las pruebas de hipótesis sobre los coeficientes (Ho:ß0=0 y
Ho:ß1=0) se rechazan dado que el valor-p en cada caso es cero
• El intervalo de confianza para la pendiente ß1 se puede
interpretar como: Por cada unidad adicional metro cuadrado , el precio
del imbueble puede varias de 2.35 a 2.65 millones con una confianza del
95%
5. Calcule e interprete el indicador de bondad R2.
Este cálculo de R-cuadrado ya fue realizado con anterioridad y los resultados obtenidos fueron:
##
## Call:
## lm(formula = preciom ~ areaconst, data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -163.628 -25.927 -2.938 26.760 192.009
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.36290 6.48803 2.522 0.0118 *
## areaconst 2.49280 0.08513 29.282 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.79 on 872 degrees of freedom
## Multiple R-squared: 0.4958, Adjusted R-squared: 0.4952
## F-statistic: 857.4 on 1 and 872 DF, p-value: < 2.2e-16
5.1. Interpretación de indicador de bondad R2
•El valor de R-cuadrado especifica que el primer modelo (lineal -
lineal) explica la variable area con un 49 % a la variable respuesta
precio , esto quiere decir que la variable área construida explica con
este modelo al valor del inmueble con un 49%
6. ¿Cuál sería el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones sería una atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?.
Ahora procederemos a predecir cual seria el valor promedio de un apartamento de 110 metros cuadrados
## (Intercept) areaconst
## 16.362903 2.492797
## fit lwr upr
## 1 290.5706 283.9625 297.1787
6.1. Interpretación de promedio estimado
•Teniendo en cuenta que con un área construida de 110 metros
cuadrados en un apartamento y un nivel de confianza de 95% , tendría un
valor como mínimo de 283 millones y un máximo de 297 millones, una
propuesta de 200 se encuentra muy por debajo del mínimo establecido para
el modelo, por lo cual la propuesta seria muy buena, teniendo en cuenta
que todos los apartamentos pertenecen al estrato 4.
•Aunque
se podrían ser una buena oferta si se tuvieran en cuenta variables como:
tiempo del inmueble, mantenimiento, vecinos, situación del inmueble.
Pero lastimosamente no poseemos estas variables esto debido a que no
tiene el mismo precio un apartamento en estrato 4 recién construido, que
un apartamento de 50 años de construido.
7. Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.
Para la realización de los supuestos realizaremos las siguientes pruebas de Hipótesis
•Normalidad : shapiro.test()
•Homoscedasticidad : lmtest::bptest()
•No
autocorrelación : lmtest::dwtest()
•outliers :
visualización gráfica - boxplot(), plot()
paste("este es el proceso de Shapiro-Test")
## [1] "este es el proceso de Shapiro-Test"
Shapiro1=shapiro.test(Modelo$residuals)
Shapiro1
##
## Shapiro-Wilk normality test
##
## data: Modelo$residuals
## W = 0.98506, p-value = 8.815e-08
paste("este es el proceso de Test de Breusch-Pagan- Varianza constante")
## [1] "este es el proceso de Test de Breusch-Pagan- Varianza constante"
Breusch1=lmtest::bptest(Modelo)
Breusch1
##
## studentized Breusch-Pagan test
##
## data: Modelo
## BP = 90.497, df = 1, p-value < 2.2e-16
paste("este es el proceso de Test de Goldfeld-Quandt- Varianza constante")
## [1] "este es el proceso de Test de Goldfeld-Quandt- Varianza constante"
Goldfeld1=lmtest::gqtest(Modelo)
Goldfeld1
##
## Goldfeld-Quandt test
##
## data: Modelo
## GQ = 1.0395, df1 = 435, df2 = 435, p-value = 0.3433
## alternative hypothesis: variance increases from segment 1 to 2
paste("este es el proceso de Test de Durbin-Watson- No autocorrelación de errores")
## [1] "este es el proceso de Test de Durbin-Watson- No autocorrelación de errores"
Durbin1=lmtest::dwtest(Modelo)
Durbin1
##
## Durbin-Watson test
##
## data: Modelo
## DW = 1.3246, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Ahora procederemos a crear los diferentes gráficos para validación de supuestos:
7.1. Interpretación de supuestos y graficos
•En el
caso de la normalidad podemos observar que el valor del p-value esta por
debajo de 0.05 lo que nos indica que no hay una distribución normal de
la variable de errores
•En el caso de la Homoscedasticidad podemos observar que el
valor del p-value esta por debajo de 0.05 lo que nos indica que no hay
una Homoscedasticidad para el caso del Test de Breusch-Pagan, es decir
los errores no tienen varianza
•En el caso de la Homoscedasticidad podemos observar que el valor
del p-value esta por encima de 0.05 lo que nos indica que no hay una
Homoscedasticidad para el caso del Test de Goldfeld-Quandt
• En el caso de la Test de Durbin-Watson se realiza el calculo
pero no se toma en cuenta debido a que el suspuesto se realiza mas con
datos de tiempo, los cuales no poseemos en la data
• Como podemos observar en el gráfico de residuales Gráfico de
los residuales vs los valores ajustados no existe una distribución
normal
• Como podemos observar en el Gráfico de normalidad de los
residuales existe una distribución no tan cercana al cero por lo cual se
no ve con normalidad
• Como podemos observar en el Gráfico de residuales vs variable
independiente no existe una distribución normal
8. De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo
Primero calcularemos el valor de lambda por medio de lun grafico de bloxplot para determinar la transformación que mas le queda al modelo
##
## Call:
## lm(formula = preciom ~ areaconst, data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -163.628 -25.927 -2.938 26.760 192.009
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.36290 6.48803 2.522 0.0118 *
## areaconst 2.49280 0.08513 29.282 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.79 on 872 degrees of freedom
## Multiple R-squared: 0.4958, Adjusted R-squared: 0.4952
## F-statistic: 857.4 on 1 and 872 DF, p-value: < 2.2e-16
## [1] -0.05050505
Debido a que el valor de Lambda esta por debajo de 0.5 podemos determinar que la mejor transformación es la de logaritmo
como pudimos ver todas las transformaciones del modelo fueron generadas en le punto 3 y acá solo colocaremos la comparación que se realizo de los 4 modelos para observar los resultados obtenidos
##
## ================================================================
## Dependent variable:
## --------------------------------------------
## preciom log(preciom)
## (1) (2) (3) (4)
## ----------------------------------------------------------------
## areaconst 2.493*** 0.012***
## (0.085) (0.0004)
##
## log(areaconst) 191.986*** 0.935***
## (6.469) (0.031)
##
## Constant 16.363** -620.706*** 4.374*** 1.257***
## (6.488) (27.743) (0.031) (0.132)
##
## ----------------------------------------------------------------
## Observations 874 874 874 874
## R2 0.496 0.503 0.493 0.514
## Adjusted R2 0.495 0.502 0.492 0.513
## Residual Std. Error 42.789 42.502 0.207 0.202
## F Statistic 857.429*** 880.822*** 846.623*** 921.645***
## ================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
como pudimos ver todas las transformaciones del modelo fueron generadas en le punto 3 y acá solo colocaremos la comparación que se realizo de los 4 modelos para observar los resultados obtenidos,Ahora procederemos a calcular los supuestos del 4 modelo (LOG-LOG) el cual es el que mejor se ajusta.
## [1] "este es el proceso de Shapiro-Test - Modelo Ajustado"
##
## Shapiro-Wilk normality test
##
## data: Modelo4$residuals
## W = 0.99213, p-value = 0.0001341
## [1] "este es el proceso de Test de Breusch-Pagan- Varianza constante - Modelo Ajustado"
##
## studentized Breusch-Pagan test
##
## data: Modelo4
## BP = 21.822, df = 1, p-value = 2.991e-06
## [1] "este es el proceso de Test de Goldfeld-Quandt- Varianza constante - Modelo Ajustado"
##
## Goldfeld-Quandt test
##
## data: Modelo4
## GQ = 1.091, df1 = 435, df2 = 435, p-value = 0.1821
## alternative hypothesis: variance increases from segment 1 to 2
8.1. Interpretación de ajustes y supuestos de modelo
• La transformación adecuada es la de logaritmo esto debido a que el lamba esta entre -0.5 y 0.5
• Luego e realizada la comparación entre todas las posibles transformaciones con logaritmo, determinamos que el mejor modelo es el de Logaritmo, Logaritmo. Por lo cual los supuestos se hacen sobre este nuevo modelo
• En el siguiente punto realizaremos la comparación de los resultados de los supuestos del modelo original con el nuevo ajustado
9. De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
Primero colocaremos la comparación de los dos modelos elegidos el original y el ajustado
## [1] "este es el Modelo Original"
##
## Call:
## lm(formula = preciom ~ areaconst, data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -163.628 -25.927 -2.938 26.760 192.009
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 16.36290 6.48803 2.522 0.0118 *
## areaconst 2.49280 0.08513 29.282 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 42.79 on 872 degrees of freedom
## Multiple R-squared: 0.4958, Adjusted R-squared: 0.4952
## F-statistic: 857.4 on 1 and 872 DF, p-value: < 2.2e-16
## [1] "este es el Modelo Ajustado"
##
## Call:
## lm(formula = log(preciom) ~ log(areaconst), data = BaseLimpia)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.9107 -0.1243 0.0069 0.1444 0.7704
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.25689 0.13216 9.511 <2e-16 ***
## log(areaconst) 0.93549 0.03081 30.359 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2025 on 872 degrees of freedom
## Multiple R-squared: 0.5138, Adjusted R-squared: 0.5133
## F-statistic: 921.6 on 1 and 872 DF, p-value: < 2.2e-16
Ahora procederemos a ver los supuestos de cada modelo para luego realizar su comparación
Supuestos del modelo original
## [1] "este es el proceso de Shapiro-Test"
##
## Shapiro-Wilk normality test
##
## data: Modelo$residuals
## W = 0.98506, p-value = 8.815e-08
## [1] "este es el proceso de Test de Breusch-Pagan- Varianza constante"
##
## studentized Breusch-Pagan test
##
## data: Modelo
## BP = 90.497, df = 1, p-value < 2.2e-16
## [1] "este es el proceso de Test de Goldfeld-Quandt- Varianza constante"
##
## Goldfeld-Quandt test
##
## data: Modelo
## GQ = 1.0395, df1 = 435, df2 = 435, p-value = 0.3433
## alternative hypothesis: variance increases from segment 1 to 2
Supuestos del modelo ajustado
## [1] "este es el proceso de Shapiro-Test, Modelo 4"
##
## Shapiro-Wilk normality test
##
## data: Modelo4$residuals
## W = 0.99213, p-value = 0.0001341
## [1] "este es el proceso de Test de Breusch-Pagan- Varianza constante, Modelo 4"
##
## studentized Breusch-Pagan test
##
## data: Modelo4
## BP = 21.822, df = 1, p-value = 2.991e-06
## [1] "este es el proceso de Test de Goldfeld-Quandt- Varianza constante, Modelo 4"
##
## Goldfeld-Quandt test
##
## data: Modelo4
## GQ = 1.091, df1 = 435, df2 = 435, p-value = 0.1821
## alternative hypothesis: variance increases from segment 1 to 2
9.1. Interpretación de ajustes y supuestos de modelo original y nuevo
• Como podemos darnos cuenta tanto el modelo original como el modelo ajustado siguen manteniendo los mismos supuesto, aunque los valores de los supuestos del modelo ajustado son mejores que el del modelo original.
• Pero el modelo ajustado tiene mejores indicadores que el original, siendo su R2 un poco mejor que el original y su desviación estándar también un poco mejor un poco mejor. Por lo cual el modelo ajustado se puede interpretar como el cambio porcentual que ocurre cuando se aumenta un 1% el área de la vivienda.
• Además podemos visualizar una mejor distribución de normalización en el modelo ajustado10. Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?
Teniendo en cuenta los datos obtenidos en el punto 8 debemos realizar un lamba sobre la variable dependiente Y debería estar en escala logarítmica, pero para mejorar el r cuadrado debemos ampliar el espectro de variables para poder mejorarlo, lastimosamente para este curso no manejamos modelos con mas de una variable por lo cualsolo realizaremos la comparacion con los otros dos modelos logaritmicos que hemos trabajado
##
## ================================================================
## Dependent variable:
## --------------------------------------------
## preciom log(preciom)
## (1) (2) (3) (4)
## ----------------------------------------------------------------
## areaconst 2.493*** 0.012***
## (0.085) (0.0004)
##
## log(areaconst) 191.986*** 0.935***
## (6.469) (0.031)
##
## Constant 16.363** -620.706*** 4.374*** 1.257***
## (6.488) (27.743) (0.031) (0.132)
##
## ----------------------------------------------------------------
## Observations 874 874 874 874
## R2 0.496 0.503 0.493 0.514
## Adjusted R2 0.495 0.502 0.492 0.513
## Residual Std. Error 42.789 42.502 0.207 0.202
## F Statistic 857.429*** 880.822*** 846.623*** 921.645***
## ================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Teniendo en cuenta los datos obtenidos en el punto 8 debemos realizar un lamba sobre la variable dependiente Y debería estar en escala logarítmica, pero para mejorar el r cuadrado debemos ampliar el espectro de variables para poder mejorarlo, lastimosamente para este curso no manejamos modelos con más de una variable por lo cual solo realizaremos la comparación con los otros dos modelos logarítmicos que hemos trabajado
Realizaremos los supuestos del modelo 2
## [1] "este es el proceso de Shapiro-Test Modelo 2"
##
## Shapiro-Wilk normality test
##
## data: Modelo2$residuals
## W = 0.98562, p-value = 1.463e-07
## [1] "este es el proceso de Test de Breusch-Pagan- Varianza constante Modelo 2- (y-logatirmo(x))"
##
## studentized Breusch-Pagan test
##
## data: Modelo2
## BP = 78.652, df = 1, p-value < 2.2e-16
## [1] "este es el proceso de Test de Goldfeld-Quandt- Varianza constante Modelo 2-(y-logatirmo(x))"
##
## Goldfeld-Quandt test
##
## data: Modelo2
## GQ = 1.0467, df1 = 435, df2 = 435, p-value = 0.3172
## alternative hypothesis: variance increases from segment 1 to 2
Realizaremos los supuestos del modelo 3
## [1] "este es el proceso de Shapiro-Test Modelo 3-(logaritmo(y)-x)"
##
## Shapiro-Wilk normality test
##
## data: Modelo3$residuals
## W = 0.99285, p-value = 0.0003279
## [1] "este es el proceso de Test de Breusch-Pagan- Varianza constante Modelo 3-(logaritmo(y)-x)"
##
## studentized Breusch-Pagan test
##
## data: Modelo3
## BP = 25.11, df = 1, p-value = 5.414e-07
## [1] "este es el proceso de Test de Goldfeld-Quandt- Varianza constante Modelo 3-(logaritmo(y)-x)"
##
## Goldfeld-Quandt test
##
## data: Modelo3
## GQ = 1.0926, df1 = 435, df2 = 435, p-value = 0.1781
## alternative hypothesis: variance increases from segment 1 to 2
10.1. Interpretación de ajustes y supuestos de modelo los otros modelos
• Para todos los modelos logarítmicos no se cumplen los supuestos, todos tienen el mismo comportamiento para los diferentes análisis (shapiro, breuch o goldfeld)
• En nuestro caso el mejor modelo es el 4 modelo (logaritmo-logaritmo), pero lastimosamente no es un muy buen modelo debido a que su r cuadrado es bastante bajo (51%) y ninguno de los supuestos se cumple por lo cual aunque es mejor que el modelo original, las mejoras no representan una diferencia significativa que permita seleccionar este modelo como el mejor modelo, se podría analizar otro tipo de transformaciones pero no las conocemos en este momento para su aplicación
11. Anexosknitr::opts_chunk$set(echo = TRUE)
library(cubature)
library(GGally)
library(ggplot2)
library(MASS)
library(psych)
library(tidyverse)
library(naniar)
library(paqueteMETODOS)
data(vivienda4)
Muestra= subset(vivienda4, vivienda4$tipo =='Apartamento' & vivienda4$estrato==4 & vivienda4$areaconst<=200)
Muestrapersenta = Muestra[1:10, 1:4]
Faltantes = gg_miss_var(Muestra, show_pct=TRUE)
Faltantes
## # A tibble: 5 × 3
## variable n_miss pct_miss
## <chr> <int> <dbl>
## 1 zona 0 0
## 2 estrato 0 0
## 3 preciom 0 0
## 4 areaconst 0 0
## 5 tipo 0 0
library(dplyr)
BaseLimpia = distinct(Muestra)
BaseLimpia
g_caja<-boxplot(BaseLimpia$areaconst, main="Diagrama de Cajas del Primer Ciclo", col="skyblue", frame.plot=F)
paste("estos son los outliers del primer Cliclo")
g_caja$out
BaseLimpia<-BaseLimpia[!(BaseLimpia$areaconst %in% g_caja$out),]
g_caja<-boxplot(BaseLimpia$areaconst, main="Diagrama de Cajas del Segundo Ciclo", col="skyblue", frame.plot=F)
paste("estos son los outliers del segundo Cliclo")
g_caja$out
BaseLimpia<-BaseLimpia[!(BaseLimpia$areaconst %in% g_caja$out),]
g_caja<-boxplot(BaseLimpia$areaconst, main="Diagrama de Cajas del Tercer Ciclo", col="skyblue", frame.plot=F)
paste("estos son los outliers del tercer Cliclo")
g_caja$out
BaseLimpia<-BaseLimpia[!(BaseLimpia$areaconst %in% g_caja$out),]
g_caja<-boxplot(BaseLimpia$areaconst, main="Diagrama de Cajas del Cuarto Ciclo", col="skyblue", frame.plot=F)
paste("estos son los outliers del cuarto Cliclo")
g_caja$out
paste("validamos si quedo la base con nulos")
Faltantes = gg_miss_var(BaseLimpia, show_pct=TRUE)
Faltantes
tabla1=table(BaseLimpia$tipo)
pct = round(tabla1/sum(tabla1)*100)
pie(tabla1, main="Diagrama de Pie de tipos de Inmueble")
hist(BaseLimpia$preciom, main='Histograma de precio', ylab = "Frecuencia", xlab="Monto en millones", freq= FALSE)
curve(dnorm(x, mean(BaseLimpia$preciom, na.rm = T), sd(BaseLimpia$preciom, na.rm = T)), add = TRUE, col = "red")
hist(BaseLimpia$areaconst, main='Histograma de Area Construida', ylab = "Frecuencia", xlab="Area Construida" , freq= FALSE)
curve(dnorm(x, mean(BaseLimpia$areaconst, na.rm = T), sd(BaseLimpia$areaconst, na.rm = T)), add = TRUE, col = "red")
BaseLimpia
library("moments")
paste0("Indicadores para precio")
#calculamos la moda del precio
frecuencia_precio = data.frame(table(BaseLimpia$preciom))
modaprecio = frecuencia_precio[which.max(frecuencia_precio$Freq),1]
data.frame( "Media"=mean(BaseLimpia$preciom),
"Mediana"=median(BaseLimpia$preciom),
"Moda"=modaprecio,
"Desviacion Estandar"=sd(BaseLimpia$preciom),
"Varianza"=var(BaseLimpia$preciom),
"Valor Mínino"=min(BaseLimpia$preciom),
"Valor Maximo"=max(BaseLimpia$preciom),
"custorisis"=kurtosis(BaseLimpia$preciom),
"asimetria"= skewness(BaseLimpia$preciom)
)
library("moments")
paste0("Indicadores para Area Construida")
#calculamos la moda del precio
frecuencia_area = data.frame(table(BaseLimpia$areaconst))
modaarea = frecuencia_area[which.max(frecuencia_area$Freq),1]
data.frame( "Media"=mean(BaseLimpia$areaconst),
"Mediana"=median(BaseLimpia$areaconst),
"Moda"=modaarea,
"Desviacion Estandar"=sd(BaseLimpia$areaconst),
"Varianza"=var(BaseLimpia$areaconst),
"Valor Mínino"=min(BaseLimpia$areaconst),
"Valor Maximo"=max(BaseLimpia$areaconst),
"custorisis"=kurtosis(BaseLimpia$areaconst),
"asimetria"= skewness(BaseLimpia$areaconst)
)
comportamiento=ggplot(data = BaseLimpia,aes(y=preciom,x=areaconst)) + geom_point() + geom_smooth(method = "lm")
plot(comportamiento, main="1. Diagrama de Dispersion Presio - area construida con LM", ylab="Precio", xlab="Area Construida")
comportamiento2=ggplot(data = BaseLimpia,aes(y=preciom,x=areaconst)) + geom_point() + geom_smooth()
plot(comportamiento2, main="2. Diagrama de Dispersion Presio - area construida", ylab="Precio", xlab="Area Construida")
library("stats")
library("GGally")
paste("el coeficiente de correlacion entre las variables es: ")
coeficiente=cor(BaseLimpia$areaconst, BaseLimpia$preciom, use="everything", method=c("pearson"))
coeficiente
paste("Realizamos las pruebas de Hipotesis sobre P ")
cor.test(BaseLimpia$areaconst,BaseLimpia$preciom, method = "pearson")
paste("Realizamos la Matriz de coorelaciones ")
dataset= data.frame(BaseLimpia$areaconst,BaseLimpia$preciom)
cor(dataset[,1:2]) %>% round(.,3 )
ggpairs(dataset[,1:2], title="Precio - Area")
coeficiente
Modelo=lm(preciom~areaconst, data = BaseLimpia, na.action = na.exclude)
sum1=summary(Modelo)
sum1
par(mfrow=c(2,2))
plot(Modelo)
Modelo2=lm(preciom~log(areaconst), data = BaseLimpia)
sum2=summary(Modelo2)
sum2
par(mfrow=c(2,2))
plot(Modelo2)
Modelo3=lm(log(preciom)~areaconst, data = BaseLimpia)
sum3=summary(Modelo3)
sum3
par(mfrow=c(2,2))
plot(Modelo3)
Modelo4=lm(log(preciom)~log(areaconst), data = BaseLimpia)
sum4=summary(Modelo4)
sum4
par(mfrow=c(2,2))
plot(Modelo4)
library(stargazer)
stargazer(Modelo, Modelo2, Modelo3, Modelo4, type="text", df=FALSE)
sum1
paste("estos son los datos del primer Modelos")
sum1
paste("estos son los intervalos de confianzo con 95%")
library('stats')
confint(Modelo, "BaseLimpia$areaconst",level=0.95)
sum1
dataframe=data.frame(areaconst=110)
Modelo$coefficients
predict(Modelo, dataframe, interval = "confidence",level = 0.95)
paste("este es el proceso de Shapiro-Test")
Shapiro1=shapiro.test(Modelo$residuals)
Shapiro1
paste("este es el proceso de Test de Breusch-Pagan- Varianza constante")
Breusch1=lmtest::bptest(Modelo)
Breusch1
paste("este es el proceso de Test de Goldfeld-Quandt- Varianza constante")
Goldfeld1=lmtest::gqtest(Modelo)
Goldfeld1
paste("este es el proceso de Test de Durbin-Watson- No autocorrelación de errores")
Durbin1=lmtest::dwtest(Modelo)
Durbin1
plot(Modelo$residuals, Modelo$preciom, main="Gráfico de los residuales vs los valores ajustados")
qqnorm(Modelo$residuals, main="Gráfico de normalidad de los residuales")
plot(Modelo$residuals, Modelo$areaconst, main="Gráfico de residuales vs variable independiente")
summary(Modelo)
par(mfrow = c(1,2))
boxcox(lm(preciom ~ areaconst, data=BaseLimpia), lambda = -3:3)
#Se repite el proceso pero esta vez entrechando el rango de valores de lambda
bc<-boxcox(lm(preciom ~ areaconst, data=BaseLimpia), lambda = -1:1)
(lambda <- bc$x[which.max(bc$y)])
stargazer(Modelo, Modelo2, Modelo3, Modelo4, type="text", df=FALSE)
paste("este es el proceso de Shapiro-Test - Modelo Ajustado")
Shapiro4=shapiro.test(Modelo4$residuals)
Shapiro4
paste("este es el proceso de Test de Breusch-Pagan- Varianza constante - Modelo Ajustado")
Breusch4=lmtest::bptest(Modelo4)
Breusch4
paste("este es el proceso de Test de Goldfeld-Quandt- Varianza constante - Modelo Ajustado")
Goldfeld4=lmtest::gqtest(Modelo4)
Goldfeld4
paste("este es el proceso de Test de Durbin-Watson- No autocorrelación de errores - Modelo Ajustado")
Durbin4=lmtest::dwtest(Modelo4)
Durbin4
plot(Modelo4$residuals, Modelo4$preciom, main="Gráfico de los residuales vs los valores ajustados - Modelo Ajustado")
qqnorm(Modelo4$residuals, main="Gráfico de normalidad de los residuales - Modelo Ajustado")
plot(Modelo4$residuals, Modelo4$areaconst, main="Gráfico de residuales vs variable independiente - Modelo Ajustado")
paste("este es el Modelo Original")
sum1
paste("este es el Modelo Ajustado")
sum4
paste("este es el proceso de Shapiro-Test")
Shapiro1=shapiro.test(Modelo$residuals)
Shapiro1
paste("este es el proceso de Test de Breusch-Pagan- Varianza constante")
Breusch1=lmtest::bptest(Modelo)
Breusch1
paste("este es el proceso de Test de Goldfeld-Quandt- Varianza constante")
Goldfeld1=lmtest::gqtest(Modelo)
Goldfeld1
paste("este es el proceso de Test de Durbin-Watson- No autocorrelación de errores")
Durbin1=lmtest::dwtest(Modelo)
Durbin1
plot(Modelo$residuals, Modelo$preciom, main="Gráfico de los residuales vs los valores ajustados")
qqnorm(Modelo$residuals, main="Gráfico de normalidad de los residuales")
plot(Modelo$residuals, Modelo$areaconst, main="Gráfico de residuales vs variable independiente")
paste("este es el proceso de Shapiro-Test")
Shapiro4=shapiro.test(Modelo4$residuals)
Shapiro4
paste("este es el proceso de Test de Breusch-Pagan- Varianza constante")
Breusch4=lmtest::bptest(Modelo4)
Breusch4
paste("este es el proceso de Test de Goldfeld-Quandt- Varianza constante")
Goldfeld4=lmtest::gqtest(Modelo4)
Goldfeld4
paste("este es el proceso de Test de Durbin-Watson- No autocorrelación de errores")
Durbin4=lmtest::dwtest(Modelo4)
Durbin4
plot(Modelo4$residuals, Modelo4$preciom, main="Gráfico de los residuales vs los valores ajustados")
qqnorm(Modelo4$residuals, main="Gráfico de normalidad de los residuales")
plot(Modelo4$residuals, Modelo4$areaconst, main="Gráfico de residuales vs variable independiente")
library(stargazer)
stargazer(Modelo, Modelo2, Modelo3, Modelo4, type="text", df=FALSE)
paste("este es el proceso de Shapiro-Test Modelo 2")
Shapiro2=shapiro.test(Modelo2$residuals)
Shapiro2
paste("este es el proceso de Test de Breusch-Pagan- Varianza constante Modelo 2- (y-logatirmo(x))")
Breusch2=lmtest::bptest(Modelo2)
Breusch2
paste("este es el proceso de Test de Goldfeld-Quandt- Varianza constante Modelo 2-(y-logatirmo(x))")
Goldfeld2=lmtest::gqtest(Modelo2)
Goldfeld2
plot(Modelo2$residuals, Modelo2$preciom, main="Gráfico de los residuales vs los valores ajustados Modelo 2 -(y-logatirmo(x))")
qqnorm(Modelo2$residuals, main="Gráfico de normalidad de los residuales Modelo 2 - (y-logatirmo(x))")
plot(Modelo2$residuals, Modelo2$areaconst, main="Gráfico de residuales vs variable independiente Modelo 2 - (y-logatirmo(x))")
paste("este es el proceso de Shapiro-Test Modelo 3-(logaritmo(y)-x)")
Shapiro3=shapiro.test(Modelo3$residuals)
Shapiro3
paste("este es el proceso de Test de Breusch-Pagan- Varianza constante Modelo 3-(logaritmo(y)-x)")
Breusch3=lmtest::bptest(Modelo3)
Breusch3
paste("este es el proceso de Test de Goldfeld-Quandt- Varianza constante Modelo 3-(logaritmo(y)-x)")
Goldfeld3=lmtest::gqtest(Modelo3)
Goldfeld3
plot(Modelo3$residuals, Modelo3$preciom, main="Gráfico de los residuales vs los valores ajustados Modelo 3- (logaritmo(y)-x)")
qqnorm(Modelo3$residuals, main="Gráfico de normalidad de los residuales Modelo 3 - (logaritmo(y)-x)")
plot(Modelo3$residuals, Modelo3$areaconst, main="Gráfico de residuales vs variable independiente Modelo 3 - (logaritmo(y)-x)")