Título de la portada

cat(“Presentado a:”) cat(“Delia Ortega Lenis”)

Nombres y Universidad

cat(“Daniel Alberto Rincón Loaiza”) cat(“Universidad Javeriana de Cali”)

Realizamos inicialmente la instalación de las librerias necesarias.

if(!require(car)){
  install.packages(car)
  
}
## Loading required package: car
## Loading required package: carData
library(car)

library(lmtest)  # Para cargar el paquete 'lmtest'
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
if(!require(lmtest)){
  install.packages(car)
  
}
library(lmtest)

if(!require(paqueteMETODOS)){
  install.packages(paqueteMETODOS)
  
}
## Loading required package: paqueteMETODOS
## Loading required package: cubature
## Loading required package: GGally
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: MASS
## Loading required package: summarytools
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## The following object is masked from 'package:car':
## 
##     logit
## Loading required package: tidyverse
## ── 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::recode() masks car::recode()
## ✖ dplyr::select() masks MASS::select()
## ✖ purrr::some()   masks car::some()
## ✖ tibble::view()  masks summarytools::view()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(paqueteMETODOS)

if(!require(tidyverse)){
  install.packages(tidyverse)
  
}
library(tidyverse)

# Instalaremos y cargaremos la librería devtools si aún no está instalada
if (!require(devtools)) {
  install.packages("devtools")
}
## Loading required package: devtools
## Loading required package: usethis
library(ggplot2)

if(!require(dplyr)){
  install.packages(dplyr)
  
}
library(dplyr)

if(!require(tidyr)){
  install.packages(tidyr)
  
}
library(tidyr)

# Instalaremos y cargaremos la librería ggplot2 si aún no está instalada
if (!require(corrplot)) {
  install.packages("corrplot")
}
## Loading required package: corrplot
## corrplot 0.92 loaded
library(corrplot)
library(paqueteMETODOS)
devtools::install_github("dgonxalex80/paqueteMETODOS")

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.

head(vivienda4)
#Verificamos la cantidad de filas y columnas que tiene el dataset
str(vivienda4)
## spc_tbl_ [1,706 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ zona     : Factor w/ 5 levels "Zona Centro",..: 2 2 2 5 2 2 2 2 2 2 ...
##  $ estrato  : Factor w/ 4 levels "3","4","5","6": 2 2 2 2 2 2 2 2 2 2 ...
##  $ preciom  : num [1:1706] 220 600 320 290 220 305 220 162 225 370 ...
##  $ areaconst: num [1:1706] 52 160 108 96 82 117 75 60 84 117 ...
##  $ tipo     : Factor w/ 2 levels "Apartamento",..: 1 2 1 1 1 2 1 1 1 1 ...
# Grafico de densidad para el area de vivienda en azul
ggplot(vivienda4, aes(x = areaconst)) +
  geom_density(fill = "#0072B2", color = "#0072B2") +  # Color azul para la densidad
  labs(x = "Area de la vivienda", y = "Densidad") +
  theme_minimal()  # Opcional: Aplicar un tema minimalista

conteo_apt <- table(vivienda4$tipo)
print(conteo_apt)
## 
## Apartamento        Casa 
##        1363         343

De acuerdo a esto vamos a realizar el estudio unicamene de los apartemtos ya que es donde se encuentra la mayor cantidad de data con una area menor a 100 para enfocarnos unicamente en los apartamentos hasta ese tamañ..

# Grafico de densidad para el area de vivienda en azul
ggplot(vivienda4, aes(x = preciom)) +
  geom_density(fill = "#0072B2", color = "#0072B2") +  
  labs(x = "Precio de la vivienda", y = "Densidad") +
  theme_minimal()

data(vivienda4)
Apto <- filter(vivienda4, tipo == "Apartamento")
chuck(Apto)

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.

ggplot(Apto, aes(x = areaconst)) +
  geom_density(fill = "#0072B2", color = "#0072B2") +  
  labs(x = "Area de la vivienda", y = "Densidad") +
  theme_minimal() +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

# Análisis descriptivo de las variables precio y area construida

summary(Apto$preciom)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    78.0   153.5   185.0   202.4   240.0   645.0
summary(Apto$areaconst)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   40.00   60.00   70.00   75.48   84.00  200.00

Encontramos que el precio promedio de viviendas es de $185 millones COP y el área construida promedio es de 70.0 mts cuadrados.

Vamos a realizar un analisis del precio de la vivienda en función del area construida

ggplot(Apto, aes(x = areaconst, y = preciom)) +
  geom_point(color = "#0072B2") +  # Color personalizado
  labs(x = "Area Construida (metros cuadrados)", y = "Precio de Vivienda (millones de pesos COP)")

La distribución de los datos es asimétrica hacia la derecha, lo que significa que hay un mayor número de viviendas con precios bajos que con precios altos.

# Histograma Precio Viviendas
ggplot(Apto, aes(x = preciom)) +
  geom_histogram(bins = 30, fill = "#0072B2", color = "black") +  # Relleno y borde con color personalizado
  labs(x = "Precio de Vivienda (millones de pesos COP)", y = "Frecuencia") +
  theme_minimal()

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.

modelo_lineal = lm(preciom ~ areaconst, data=Apto)
summary(modelo_lineal)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = Apto)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -225.404  -23.902   -4.754   25.763  209.021 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 39.04679    4.09977   9.524   <2e-16 ***
## areaconst    2.16473    0.05204  41.595   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared:  0.5597, Adjusted R-squared:  0.5594 
## F-statistic:  1730 on 1 and 1361 DF,  p-value: < 2.2e-16

Al aplicar el modelo de regresión lineal, observamos que los coeficientes de intercepto y pendiente son 39.05 y 2.16, respectivamente. Esto indica que el área tiene un impacto significativo en la explicación del precio de los apartamentos. El valor del intercepto, β0, es de 39 millones, lo que representa el precio base sin tener en cuenta la superficie construida, es decir, el valor intrínseco del lugar donde se ubicará el apartamento. En cuanto a β1, que tiene un valor de 2.16, indica la pendiente de la relación. Esto significa que por cada metro cuadrado adicional en el apartamento, el precio aumenta en 2.16 millones. Por lo tanto, la ecuación de regresión toma la forma:

Precio = 39.05 + 2.16 × (área construida) + 43.34

4.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.

# Intervalo de confianza para el coeficiente de área construida
confint(modelo_lineal, parm = "areaconst", level = 0.95)
##             2.5 %   97.5 %
## areaconst 2.06264 2.266826

El intervalo de confianza indica que el coeficiente β1 está entre 2.06 y 2.26 millones de pesos. Esto significa que, con un 95% de confianza, el aumento en el precio esperado de una vivienda por cada metro cuadrado adicional de área construida está entre 2.06 y 2.26 millones de pesos COP.

Prueba de Hipotesis

La hipótesis nula (H0) plantea que el coeficiente β1 es igual a cero, lo que implica la ausencia de una relación entre el precio de la vivienda y el área construida. En contraste, la hipótesis alternativa (H1) sostiene que β1 tiene un valor distinto de cero.

# Prueba de hipótesis t para el coeficiente de área construida
summary(modelo_lineal)$coefficients
##              Estimate Std. Error   t value      Pr(>|t|)
## (Intercept) 39.046787 4.09976963  9.524142  7.307017e-21
## areaconst    2.164733 0.05204291 41.595152 1.056327e-244

De acuerdo a nuestros resultados tenemos un valor p cercano a cero lo cual implica que la relación entre el precio de la vivienda y el área construida es significativa y no se debe al azar. Por lo tanto, se puede rechazar la hipótesis nula y concluir que el coeficiente β1 es diferente de cero, lo que significa que el área construida tiene un impacto estadísticamente significativo en el precio de la vivienda.

5.Calcule e interprete el indicador de bondad R2.

r2 = summary(modelo_lineal)$r.squared
print( paste("El valor del coeficiente de determinacion es (R2): ", r2) )
## [1] "El valor del coeficiente de determinacion es (R2):  0.559711740661315"

Un R² de 0.5597 sugiere que el modelo de regresión lineal es capaz de explicar una parte significativa de la variabilidad en los precios de vivienda, pero aún queda una cantidad considerable de variabilidad no explicada.

  1. ¿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?.
Apt_110 <- data.frame(areaconst= 110)
predict (modelo_lineal, Apt_110, interval = "confidence", level = 0.95)
##        fit      lwr      upr
## 1 277.1674 272.9573 281.3775

Un apartamento en la misma zona con 110 metros cuadrados a un precio de 200 millones de pesos colombianos sería una oferta atractiva desde una perspectiva puramente basada en el precio si el valor medio estimado para una vivienda de 110 metros cuadrados es de 277.16 millones de pesos, según el análisis de regresión. Esto podría sugerir que el precio ofrecido es significativamente más bajo que el promedio estimado.

  1. 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.

Supuesto de Linealidad

El supuesto de linealidad se apoya en la idea de que la relación entre la variable de respuesta y la variable predictora sigue un patrón lineal. Para evaluar este supuesto, se utiliza un gráfico que representa la dispersión de residuos estandarizados en relación a los valores predichos.

# Obtener los residuos del modelo
residuos <- residuals(modelo_lineal)

# Gráficos para validar supuestos
par(mfrow=c(2,2))
# Gráfico de dispersión entre residuos y predicciones
plot(modelo_lineal$fitted.values, residuos,
     xlab = "Predicciones", ylab = "Residuos",
     main = "Residuos vs. Predicciones", col = "#0072B2")

Al observar el gráfico, notamos que los residuos estandarizados presentan una dispersión aparentemente aleatoria alrededor de la línea central en cero. Este patrón nos lleva a concluir que el supuesto de linealidad se cumple.

Supuesto de Homocedasticidad

Este supuesto establece que la varianza de los residuos se mantiene constante para todos los valores de la variable predictora. Para verificar esta premisa, podemos emplear un gráfico de residuos estandarizados en función de los valores predichos, lo que nos permite evaluar la homocedasticidad.

# Gráfico de residuos estandarizados vs. predicciones
plot(modelo_lineal$fitted.values, rstandard(modelo_lineal),
     xlab = "Predicciones", ylab = "Residuos Estandarizados",
     main = "Residuos Estandarizados vs. Predicciones")
abline(h = 0, col = "#0072B2")

La evaluación del gráfico nos permite determinar si la variabilidad de los residuos se mantiene constante a lo largo de los valores ajustados. En este caso, observamos un patrón en el que la dispersión se amplía a medida que los valores ajustados aumentan, y notamos una mayor concentración de puntos a la izquierda.

Este patrón no es horizontal ni uniforme, lo que sugiere que la variabilidad de los residuos no es constante. En lugar de cumplirse el supuesto de homocedasticidad, parece que existe heterocedasticidad en los datos. La heterocedasticidad indica que la variabilidad de los errores no es uniforme a lo largo de la variable predictora.

Es importante abordar la heterocedasticidad, ya que puede afectar la precisión de las estimaciones y la validez de las pruebas estadísticas en el modelo de regresión. Pueden requerirse transformaciones de variables o métodos específicos para abordar esta cuestión y garantizar que se cumplan los supuestos del modelo.

Supuesto de normalidad

El supuesto de normalidad en estadísticas se relaciona con la distribución de los residuos de un modelo o un conjunto de datos. Se espera que estos residuos, que son las diferencias entre los valores observados y los valores predichos, sigan una distribución normal, lo que implica que estén simétricamente distribuidos alrededor de la media.

# Gráfico de densidad de los residuos con color azul
plot(density(residuos), col = "#0072B2",
     xlab = "Residuos", main = "Densidad de Residuos")

# Gráfico cuantil-cuantil de los residuos con color azul
qqnorm(residuos, main = "Q-Q Plot de Residuos", col = "#0072B2")
qqline(residuos, col = "red")  # Agregamos una línea de referencia en rojo

Del grafico anterior se puede observar que los residuos se distribuyen de forma cercana a la lineal. Por lo tanto, la observación de una distribución de residuos que se asemeja a una disposición lineal sugiere que el supuesto de normalidad en el modelo podría considerarse válido.

Supuesto de Independencia

El supuesto de independencia se relaciona con la idea de que los residuos son independientes entre sí. Para evaluar este supuesto, podemos recurrir al gráfico de autocorrelación de los residuos. Este gráfico nos ayuda a determinar si existe alguna relación o patrón sistemático en la secuencia de residuos, lo que podría indicar la falta de independencia.

# Calcular los residuos estandarizados del modelo
rstudent <- rstudent(modelo_lineal)

# Calcular el rezago de los residuos estandarizados
rstudent_lag <- lag(rstudent)

ggplot(modelo_lineal, aes(x = rstudent_lag, y = rstudent)) +
  geom_point(color = "#0072B2")

El gráfico de autocorrelación de los residuos no revela evidencia de patrones sistemáticos o autocorrelación significativa entre los residuos. Esto es indicativo de que los residuos son independientes entre sí y cumple con el supuesto de independencia en el análisis. La ausencia de autocorrelación es importante para garantizar que los errores del modelo no estén relacionados en una secuencia ordenada, lo que podría afectar la validez de las inferencias estadísticas. Por lo tanto, la falta de evidencia de autocorrelación en los residuos respalda la validez de este supuesto en el análisis.

  1. De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
# Realizar la transformación de Box-Cox
boxcox_result <- boxcox(lm(Apto$preciom ~ Apto$areaconst, data = Apto), lambda = -3:3)

# Modificar el color del gráfico en el resultado
plot(boxcox_result, col = "#0072B2")

bc<-boxcox(lm(Apto$preciom ~ Apto$areaconst), lambda = -1:1)

optimal_lambda <- bc$x[which.max(bc$y)]

# Graficar el resultado
plot(bc, main = paste("Box-Cox Transformation (Optimal Lambda =", round(optimal_lambda, 3), ")"))

lambda <- bc$x[which.max(bc$y)]
lambda
## [1] -0.1313131

El valor de lambda, que es -0.1313, indica que sería apropiado expresar la variable dependiente (precio) en una escala logarítmica. La razón principal es que el gráfico muestra que el valor 0 está dentro del intervalo de confianza del λ óptimo, y la estimación está muy cerca de 0. Por lo tanto, en esta situación, la elección más adecuada sería aplicar una transformación logarítmica a la variable de precio.

y1 = ((Apto$preciom ^ lambda) - 1 )/ lambda
modelo_Box=lm(y1 ~ areaconst, data=Apto)
summary(modelo_Box)
## 
## Call:
## lm(formula = y1 ~ areaconst, data = Apto)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.48740 -0.06527 -0.00535  0.07957  0.32740 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 3.4459708  0.0097192  354.55   <2e-16 ***
## areaconst   0.0046628  0.0001234   37.79   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1027 on 1361 degrees of freedom
## Multiple R-squared:  0.5121, Adjusted R-squared:  0.5117 
## F-statistic:  1428 on 1 and 1361 DF,  p-value: < 2.2e-16

Se puede observar que, en el nuevo modelo, tanto el punto de intercepción como el coeficiente correspondiente al área de construcción mantienen su significancia, y la prueba de bondad es muy similar a la que teníamos en el modelo original.Esto demuestra que tanto el término de intercepción como el coeficiente para el área de construcción mantienen una alta significancia, lo que sugiere que siguen siendo importantes en la explicación de la variable dependiente (y1). El valor del coeficiente de determinación ajustado (Adjusted R-squared) es aproximadamente 0.5117, lo que indica que el modelo sigue siendo válido para describir la relación entre estas variables.

  1. De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.

Prueba de Breusch-Pagan

La prueba de Breusch-Pagan es una prueba estadística utilizada para determinar si la varianza de los errores en un modelo de regresión es constante en relación con las variables independientes. En otras palabras, esta prueba evalúa si se cumple el supuesto de homocedasticidad, que establece que la varianza de los errores debe ser constante a lo largo de todas las combinaciones de valores de las variables predictoras.

lmtest::bptest(modelo_Box)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_Box
## BP = 130.48, df = 1, p-value < 2.2e-16

El valor p extremadamente pequeño (p < 2.2e-16) sugiere fuerte evidencia en contra del supuesto de homocedasticidad, indicando la presencia de heterocedasticidad en los errores del modelo.

prueba de Durbin-Watson

El resultado de esta prueba proporcionará información sobre si los errores (residuos) del modelo muestran algún patrón de correlación serial, es decir, si los valores de los residuos están relacionados con los valores anteriores de los residuos. Esto puede ocurrir, por ejemplo, en series temporales o datos donde las observaciones están ordenadas en el tiempo.

lmtest::dwtest(modelo_Box)
## 
##  Durbin-Watson test
## 
## data:  modelo_Box
## DW = 1.3101, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
  1. Con los resultados obtenidos construya un informe para los directivos de la inmobiliaria, indicando el modelo apropiado y sus principales características. A este informe se deben añadir los anexos como evidencia de la realización de los pasos anteriores.

Título

cat(“Informe para Inmobiliaria A&C”)

Resumen General

cat(“Resumen General:”) cat(“Durante el período de revisión en Cali, encontramos 1,363 apartamentos en estrato 4, principalmente en la zona Sur. Estos apartamentos tienen áreas construidas que varían de 40 a 200 metros cuadrados, con una mediana de 70 metros cuadrados.”) cat(“Los precios de estos apartamentos varían significativamente, desde 78 hasta 645 millones de pesos. Lo interesante es que hemos encontrado una fuerte correlación entre el área construida y el precio; a medida que el área aumenta, también lo hace el precio, y esta relación es estadísticamente significativa. Esto es un punto importante a considerar al fijar los precios.”) cat(“El 25% de los apartamentos cuesta menos de 153 millones, mientras que el 25% cuesta más de 240 millones.”)

Predicciones Utilizando Modelos Estadísticos

cat(“Predicciones Utilizando Modelos Estadísticos:”) cat(“Si bien hemos intentado modelar la relación entre el área construida y el precio, debemos señalar que los modelos estadísticos que calculamos presentan resultados débiles y pueden estar sesgados. Incluso después de realizar ajustes (transformaciones) en los modelos, no logramos cumplir con todos los supuestos necesarios.”) cat(“Los modelos indican que, en promedio, por cada metro cuadrado adicional en un apartamento, el precio aumenta en 2.16 millones, con un rango de 2.06 a 2.26 millones. Si el área del apartamento es el valor promedio de 75.5 metros cuadrados, el precio promedio sería de 202 millones.”) cat(“Según las predicciones, un apartamento de aproximadamente 110 metros cuadrados podría tener un precio de alrededor de 440 millones, con un rango entre 429 y 452 millones de pesos. Encontrar un apartamento de 110 metros cuadrados por 200 millones sería una oferta excepcional.”)

Recomendación

cat(“Recomendación:”) cat(“Esperamos que esta información sea valiosa a la hora de establecer los precios de las viviendas que ustedes ofertan. Sin embargo, les recomendamos cautela al utilizar los resultados de los modelos estadísticos, ya que estos pueden ser un indicio pero no una verdad absoluta. Lo que sí está claro es que, en general, apartamentos más grandes tienden a tener precios más elevados.”) cat(“Gracias por confiar en nuestro análisis. Estamos disponibles para responder cualquier pregunta o aclaración que puedan necesitar. ¡Buena suerte en sus negocios!”)