Un estudiante de Maestría en Economía que estoy asesorando ha desarrollado un modelo econométrico que permite a los inversionistas y comerciantes de diamantes entender la relación entre las características de los diamantes y su precio de mercado y predecir el precio futuro de los diamantes basándose en estas características. Como parte de la evaluación del modelo, el estudiante registró los precios predichos por su modelo y los precios reales de un conjunto de “diamonds”, obteniendo los siguientes resultados.
library(ggplot2)
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
data(diamonds)
g <- ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
geom_boxplot() +
labs(x = "Corte", y = "Precio", fill = "Corte") +
theme_bw()
ggplotly(g)
*Aqui se agrego codigo para generar datos random en las preddicones porque el dataset no lo contiene.
set.seed(42)
n = nrow(diamonds)
predicciones = runif(n, min = 4000, max = 8000)
datos= data.frame(predicciones = predicciones, precio_medio_referencia = rep(6000, n))
datos$error_absoluto = abs(datos$predicciones - datos$precio_medio_referencia)
mae = mean(datos$error_absoluto)
mse = mean(datos$error_absoluto^2)
rmse = sqrt(mse)
ssr = sum((datos$predicciones - mean(datos$precio_medio_referencia))^2)
sst = sum((datos$precio_medio_referencia - mean(datos$precio_medio_referencia))^2)
r_cuadrado = 1 - (ssr / sst)
print(mae)
## [1] 1006.621
print(mse)
## [1] 1349950
print(rmse)
## [1] 1161.874
print(r_cuadrado)
## [1] -Inf
summary(datos)
## predicciones precio_medio_referencia error_absoluto
## Min. :4000 Min. :6000 Min. : 0.0603
## 1st Qu.:4989 1st Qu.:6000 1st Qu.: 500.8373
## Median :6005 Median :6000 Median :1010.9901
## Mean :6003 Mean :6000 Mean :1006.6213
## 3rd Qu.:7011 3rd Qu.:6000 3rd Qu.:1510.1357
## Max. :8000 Max. :6000 Max. :1999.9699
El error absoluto medio más bajo indicaría una menor discrepancia promedio entre las predicciones y los precios reales, mientras que un error cuaratico medio y raíz cuadrada del error cuadrático Medio más bajos indicarían una menor varianza en los errores de predicción.
Pregunta realizada por ChatGPT a base de la Pregunta 1 de PEP2 - Estadística Computacional-2022
El dataset de Boston Housing es un conjunto de datos ampliamente utilizado en el campo de la estadística y el aprendizaje automático. Este dataset proporciona información sobre los precios de vivienda en diferentes suburbios de Boston en la década de 1970.En especifico se analiza la relación entre el número medio de habitaciones por vivienda (RM) y el valor mediano de las viviendas ocupadas por sus propietarios (MEDV) en la ciudad de Boston.
Para su facilidad, estos datos han sido organizados y tabulados en el dataset Boston del paquete MASS. Pueden ser graficados de la siguiente manera.
library(MASS)
##
## Attaching package: 'MASS'
## The following object is masked from 'package:plotly':
##
## select
library(ggplot2)
library(plotly)
data("Boston")
grafico = ggplot(Boston, aes(x = rm, y = medv)) +
geom_point(aes(rm, medv), color = "darkblue", alpha = 0.4) +
theme_bw() + xlab("Número medio de habitaciones por vivienda") + ylab("Valor mediano de las viviendas ($1000's)") +
ggtitle("Valor mediano de las viviendas y Número medio de habitaciones por vivienda") +
theme(plot.title = element_text(hjust = 0.5))
ggplotly(grafico)
data(Boston)
head(Boston)
## crim zn indus chas nox rm age dis rad tax ptratio black lstat
## 1 0.00632 18 2.31 0 0.538 6.575 65.2 4.0900 1 296 15.3 396.90 4.98
## 2 0.02731 0 7.07 0 0.469 6.421 78.9 4.9671 2 242 17.8 396.90 9.14
## 3 0.02729 0 7.07 0 0.469 7.185 61.1 4.9671 2 242 17.8 392.83 4.03
## 4 0.03237 0 2.18 0 0.458 6.998 45.8 6.0622 3 222 18.7 394.63 2.94
## 5 0.06905 0 2.18 0 0.458 7.147 54.2 6.0622 3 222 18.7 396.90 5.33
## 6 0.02985 0 2.18 0 0.458 6.430 58.7 6.0622 3 222 18.7 394.12 5.21
## medv
## 1 24.0
## 2 21.6
## 3 34.7
## 4 33.4
## 5 36.2
## 6 28.7
modelo_lineal = lm(medv ~ rm, data = Boston)
summary(modelo_lineal)
##
## Call:
## lm(formula = medv ~ rm, data = Boston)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.346 -2.547 0.090 2.986 39.433
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -34.671 2.650 -13.08 <2e-16 ***
## rm 9.102 0.419 21.72 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.616 on 504 degrees of freedom
## Multiple R-squared: 0.4835, Adjusted R-squared: 0.4825
## F-statistic: 471.8 on 1 and 504 DF, p-value: < 2.2e-16
ggplot(Boston, aes(x = rm, y = medv)) +
geom_point() +
geom_smooth(method = "lm", col = "red") +
labs(title = "Regresión lineal simple: MEDV ~ RM",
x = "Número medio de habitaciones por vivienda (RM)",
y = "Valor medio de las viviendas ocupadas por sus propietarios (MEDV)",
caption = "Línea de regresión lineal representada en rojo")
## `geom_smooth()` using formula = 'y ~ x'
modelo = lm(medv ~ rm, data = Boston)
modelo_mult = lm(medv ~ rm + crim + age, data = Boston)
summary(modelo)
##
## Call:
## lm(formula = medv ~ rm, data = Boston)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.346 -2.547 0.090 2.986 39.433
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -34.671 2.650 -13.08 <2e-16 ***
## rm 9.102 0.419 21.72 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.616 on 504 degrees of freedom
## Multiple R-squared: 0.4835, Adjusted R-squared: 0.4825
## F-statistic: 471.8 on 1 and 504 DF, p-value: < 2.2e-16
summary(modelo_mult)
##
## Call:
## lm(formula = medv ~ rm + crim + age, data = Boston)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.959 -3.143 -0.633 2.150 39.940
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -23.60556 2.76938 -8.524 < 2e-16 ***
## rm 8.03284 0.40201 19.982 < 2e-16 ***
## crim -0.21102 0.03407 -6.195 1.22e-09 ***
## age -0.05224 0.01046 -4.993 8.21e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.094 on 502 degrees of freedom
## Multiple R-squared: 0.5636, Adjusted R-squared: 0.561
## F-statistic: 216.1 on 3 and 502 DF, p-value: < 2.2e-16
r2_ajustado_modelo = summary(modelo)$adj.r.squared
r2_ajustado_modelo_mult = summary(modelo_mult)$adj.r.squared
print(paste("R cuadrado ajustado para el modelo simple: ", r2_ajustado_modelo))
## [1] "R cuadrado ajustado para el modelo simple: 0.482500704911952"
print(paste("R cuadrado ajustado para el modelo múltiple: ", r2_ajustado_modelo_mult))
## [1] "R cuadrado ajustado para el modelo múltiple: 0.561023992253402"
ggplot(Boston, aes(x = crim, y = medv)) +
geom_point() +
geom_smooth(method = "lm", col = "blue") +
labs(title = "Componente CRIM de la regresión lineal múltiple",
x = "Tasa de criminalidad per cápita por ciudad",
y = "Valor medio de las viviendas ocupadas por sus propietarios",
caption = "Línea de regresión lineal representada en azul")
## `geom_smooth()` using formula = 'y ~ x'
ggplot(Boston, aes(x = age, y = medv)) +
geom_point() +
geom_smooth(method = "lm", col = "green") +
labs(title = "Componente AGE de la regresión lineal múltiple",
x = "Proporción de viviendas construidas antes de 1940",
y = "Valor medio de las viviendas ocupadas por sus propietarios",
caption = "Línea de regresión lineal representada en verde")
## `geom_smooth()` using formula = 'y ~ x'
Cuando realizamos un análisis de regresión, cada coeficiente representa el cambio esperado en la variable de respuesta (en este caso, valor medio de la vivienda) por unidad de cambio en la variable correspondiente, manteniendo todas las demás variables constantes.Por lo tanto, un coeficiente positivo en habitaciones medianas por hogar generalmente indica que a medida que aumenta la cantidad mediana de habitaciones por hogar en el comunidad, se espera que también aumente el valor promedio de la vivienda. Específicamente, el valor del coeficiente le dice cuánto aumenta el valor medio de la vivienda por cada habitación adicional. Asimismo, los coeficientes negativos para la tasa de criminalidad per cápita en una ciudad y la proporción de unidades construidas antes de 1940 pueden indicar que las áreas con tasas de criminalidad más altas y más viviendas antiguas tienden a tener viviendas de menor valor. Estos resultados pueden ser útiles para varias partes interesadas en el mercado inmobiliario de Boston. Por ejemplo, los compradores de viviendas pueden usar la información para ayudar a evaluar los valores de las viviendas en diferentes áreas, en función de factores como el tamaño de la vivienda y las tasas de criminalidad en el área. Los inversores inmobiliarios también pueden encontrar útil esta información para identificar áreas que pueden estar infravaloradas o sobrevaloradas.
Valor de la vivienda en los suburbios de Boston - https://www.kaggle.com/competitions/boston-housing/data