##—-Maria Camila Gómez (2040636)————## ##—-Nicolás Salazar Castillo—————## ##—-Alexandra Osorio Martínez (1734535)—-##
library(MASS)
data("Boston")
datos <- Boston
names(datos)
## [1] "crim" "zn" "indus" "chas" "nox" "rm" "age"
## [8] "dis" "rad" "tax" "ptratio" "black" "lstat" "medv"
str(datos)
## 'data.frame': 506 obs. of 14 variables:
## $ crim : num 0.00632 0.02731 0.02729 0.03237 0.06905 ...
## $ zn : num 18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
## $ indus : num 2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
## $ chas : int 0 0 0 0 0 0 0 0 0 0 ...
## $ nox : num 0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
## $ rm : num 6.58 6.42 7.18 7 7.15 ...
## $ age : num 65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
## $ dis : num 4.09 4.97 4.97 6.06 6.06 ...
## $ rad : int 1 2 2 3 3 3 5 5 5 5 ...
## $ tax : num 296 242 242 222 222 222 311 311 311 311 ...
## $ ptratio: num 15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
## $ black : num 397 397 393 395 397 ...
## $ lstat : num 4.98 9.14 4.03 2.94 5.33 ...
## $ medv : num 24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...
#Ajustar la variable chas como factor –> (“No”, “Si”)
datos$chas <- factor(datos$chas, labels= c("No", "Si"))
str(datos$chas)
## Factor w/ 2 levels "No","Si": 1 1 1 1 1 1 1 1 1 1 ...
#Dar un vistazo a la variable dependiente e independiente, de manera gráfica
library(ggplot2)
#Histograma para la variable dependiente (medv)
x11()
ggplot(data=datos, mapping= aes(x=medv)) +
geom_histogram(aes(y= ..density..), color= "black", fill="gray") +
geom_density(fill="black", alpha=0.2)+
#stat_function(fun= dnorm, args= list(mean= mean(datos$medv), sd= sd(datos$medv)))+
theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#Histograma para la independiente (rm)
x11()
ggplot(data=datos, mapping= aes(x=rm)) +
geom_histogram(aes(y= ..density..), color= "black", fill="gray") +
geom_density(fill="black", alpha=0.2)+
#stat_function(fun= dnorm, args= list(mean= mean(datos$medv), sd= sd(datos$medv)))+
theme_bw()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#Diagrama de cajas de la variable dependiente (medv)
x11()
ggplot(data=datos, mapping= aes(x=medv)) +
geom_boxplot()+
theme_bw()
#Diagrama de cajas de la variable independiente
x11()
ggplot(data=datos, mapping= aes(x=rm)) +
geom_boxplot()+
theme_bw()
#Conclusión de las gráficas histograma y de los diagramas de caja: como podemos ver en los gráficos, tanto la variable medv como rm parecen tener un comportamiento no normal.
#Gráfico de cuantiles para ambas variables
library(car)
## Loading required package: carData
qqPlot(datos$medv, pch=20)
## [1] 162 163
qqPlot(datos$rm, pch=20)
## [1] 366 365
#Conclusión de las gráficas qqplot, se evidencia que para ambas variables (medv y rm) los puntos negros están muy alejados de lo azul. Esto nos indica que las variables no se distribuyen de manera normal
#Ahora, se realizará la prueba formal para ver la normalidad de ambas variables #Ho:se distribuye normalmente #H1: no se distribuye normalmente
library(tseries)
## Warning: package 'tseries' was built under R version 4.1.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
jarque.bera.test(datos$rm)
##
## Jarque Bera Test
##
## data: datos$rm
## X-squared = 86.677, df = 2, p-value < 2.2e-16
jarque.bera.test(datos$medv)
##
## Jarque Bera Test
##
## data: datos$medv
## X-squared = 148.41, df = 2, p-value < 2.2e-16
#Conclusión: debido a que el p-valor de la prueba para ambas variables dio menor a 0.05, se rechaza la hipótesis nula, por lo que, las variables no se distribuyen de manera normal
#Limpieza de datos
#Filtrando medv = 50
datos <- subset(datos, subset= medv<50) # con esto filtramos, dejando solo los valores que son menores a 50, es decir, segmentamos la base
nrow(datos)
## [1] 490
#Este el gráfico del primer punto del taller, pues indica la relación entre medv vs rm
par(mfrow=c(1,1))
ggplot(datos, aes(x= rm, y=medv)) +
geom_point()+
theme_bw()
#Conclusión, esta gráfica parece indicarnos que ambas variables tienen una relación positiva, sin embargo, más adelante se hará la prueba formal para tener certeza de ello
#Entonces, como vimos, al parecer existe una relación directa (positiva) entre la variable número medio de habitaciones por vivienda y precio mediano de la vivienda
#Esta es la prueba formal para validar la correlación entre medv y rm #H0: no existe correlación (rho=0) #H1: La correlación es positiva (rho>0)
#Antes de aplicar la prueba es importnate tener claro que, ambas variables no tienen normalidad, por lo que aplicaremos la prueba Spearman
cor.test(x= datos$rm, y= datos$medv, alternative = "less", method = "spearman")
## Warning in cor.test.default(x = datos$rm, y = datos$medv, alternative =
## "less", : Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: datos$rm and datos$medv
## S = 7391356, p-value = 1
## alternative hypothesis: true rho is less than 0
## sample estimates:
## rho
## 0.6230455
#conclusión: debido a que el p-valor es mayor que alfa (0.05), aceptamos la hipótesis nula, por lo que, no hay correlación significativa entre medv y rm.
mod1 <- lm(datos$medv ~ datos$rm)
summary(mod1)
##
## Call:
## lm(formula = datos$medv ~ datos$rm)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.6928 -2.2840 0.4704 3.1676 28.0608
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -30.0051 2.4886 -12.06 <2e-16 ***
## datos$rm 8.2686 0.3963 20.86 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.724 on 488 degrees of freedom
## Multiple R-squared: 0.4715, Adjusted R-squared: 0.4704
## F-statistic: 435.3 on 1 and 488 DF, p-value: < 2.2e-16
redis <- residuals(mod1)
summary(redis)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -20.6928 -2.2840 0.4704 0.0000 3.1676 28.0608
#Conclusiones: en primer lugar, ante ausencia de variables explicativas, el promedio del precio de las viviendas es de $30.0051, manteniendo todo lo demás constante, con una significancia estadística del 99% y un nivel de significancia 0.05% #por otro lado, manteniendo todo lo demás constante, con una significancia estadística del 99% y un nivel de signifancia del 0.05%, ante el aumento en una unidad del número medio de habitaciones por vivienda, genera un aumento en el precio de las viviendas en $8.26 #además, vemos que la variable independiente del modelo explica el 48% de las variaciones del precio de las viviendas #Por último, para la significancia global, que dado que trabajamos con una variable pues sería algo “individual” planteamos: 𝐻𝑂: 𝛽1 = 0 #vs 𝐻𝑎: “algún”𝛽 ≠ 0 ; vemos que el p-valor es menor al alfa, #entonces, se rechaza la hipótesis nula, por lo que podemos concluir que, el modelo en conjunto es estadísticamente significativo
ggplot(datos, aes(x= rm, y= medv)) +
geom_point() +
theme_bw()+
geom_line(aes( x = rm,
y = predict(mod1, datos)),
color = "red")
#Conclusión: la línea roja es el modelo que usamos, como podemos ver #el modelo está subestimando y sobreestimando los valores del precio de la vivienda para viviendas con un alto número de habitaciones por vivienda y con un bajo número de habitaciones por vivienda #Quizá, para mejorar estos resultados, se deba introducir otras variables que expliquen el promedio del precio de las viviendas, tales como: la antigÜedad, el tamaño, entorno y ubicación, atributos físicos, etc. #Así pues, se necesita un modelo multivariado.