load("C:/Users/Andre/Downloads/moluscos.RData")
head(BD_moluscos)
| c_agua | molusco | cons_o |
|---|---|---|
| 100 | A | 7.16 |
| 100 | A | 8.26 |
| 100 | A | 6.78 |
| 100 | A | 14.00 |
| 100 | A | 13.60 |
| 100 | A | 11.10 |
## tibble [48 × 3] (S3: tbl_df/tbl/data.frame)
## $ c_agua : num [1:48] 100 100 100 100 100 100 100 100 100 100 ...
## $ molusco: chr [1:48] "A" "A" "A" "A" ...
## $ cons_o : num [1:48] 7.16 8.26 6.78 14 13.6 11.1 8.93 9.66 6.14 6.14 ...
El dataset original está integrado por tres variables y 48 registros. Las variables “cantidad de agua” y “consumo de oxígeno” son cuantitativas continuas, y la variable “molusco” es cualitativa nominal.
| Variable | Valores_únicos |
|---|---|
| Consumo de agua | 3 |
| Molusco | 2 |
| Consumo de oxígeno | 41 |
Al explorar los valores únicos se observa que la variable “consumo de agua” sólo toma uno de tres valores. De modo que se comporta más como una variable categórica que como una cuantitativa. Por su parte, la variable “molusco” sólo toma uno de dos valores. Esto cumple con las características esperadas para el diseño de experimentos previsto.
BD_moluscos$molusco <- as.factor(BD_moluscos$molusco)
BD_moluscos$c_agua <- as.factor(BD_moluscos$c_agua)
Una vez hechos los ajustes, se obtiene el siguiente resumen:
## c_agua molusco cons_o
## 50 :16 A:24 Min. : 1.800
## 75 :16 B:24 1st Qu.: 6.312
## 100:16 Median : 9.700
## Mean : 9.305
## 3rd Qu.:11.232
## Max. :18.800
library(ggplot2)
library(hrbrthemes)
library(dplyr)
library(tidyr)
library(viridis)
p4 <- ggplot(data=BD_moluscos, aes(x=cons_o, group=c_agua, fill=factor(c_agua))) +
geom_density(adjust=1.5, alpha=.4) +
theme_ipsum()
p4 <- p4 + theme(legend.position="bottom")
p5 <- ggplot(data=BD_moluscos, aes(x=cons_o, group=molusco, fill=molusco)) +
geom_density(adjust=1.5, alpha=.4) +
theme_ipsum()
p5 <- p5 + theme(legend.position="bottom")
ggarrange(p4, p5, ncol=2, nrow =1, labels = c("Consumo O VS. Cantidad Agua ","Consumo O VS. Moluscos"))
En las gráficas de exploración bivariada se observa lo siguiente:
Las gráficas de distribución muestran un comportamiento aproximadamente normal. Sin embargo, se puede resaltar que el consumo de oxígeno de una concentración de agua de mar de 75 es leptocúrtica.
La superposición entre las gráficas de densidad de consumo de oxígeno por tipo de molusco parecieran sugerir que no hay una gran diferencia en el consumo de oxígeno de los dos tipos de molusco.
Aunque también hay alguna superposición entre las gráficas de densidad de consumo de oxígeno por nivel de concentración de agua, al menos una de ellas pareciera distinguirse de las otras dos, lo que podría aportar poder de discriminación.
mod1 <- lm(cons_o ~ molusco + c_agua, BD_moluscos)
summary(mod1)
##
## Call:
## lm(formula = cons_o ~ molusco + c_agua, data = BD_moluscos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.1750 -1.9877 -0.7019 2.1244 6.1450
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.9463 0.8521 15.193 < 2e-16 ***
## moluscoB -1.3913 0.8521 -1.633 0.10966
## c_agua75 -5.2581 1.0436 -5.038 8.49e-06 ***
## c_agua100 -3.5794 1.0436 -3.430 0.00132 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.952 on 44 degrees of freedom
## Multiple R-squared: 0.3986, Adjusted R-squared: 0.3575
## F-statistic: 9.719 on 3 and 44 DF, p-value: 4.866e-05
ggplot(BD_moluscos,aes(x=factor(c_agua),y=cons_o,fill=factor(c_agua)))+
geom_boxplot()+theme_bw()+scale_fill_brewer()+facet_grid(~molusco)
Un análisis de la gráfica que combia las tres variables permite evidenciar que:
El consumo de oxígeno pareciera ser distinto para las distintas concentraciones de agua de mar, y especialmente alta para la concentración del 50%.
El patrón enunciado en el punto anterior se mantiene para los dos grupos de moluscos.
BD_moluscos$c_agua <- as.factor(BD_moluscos$c_agua)
tapply(BD_moluscos$cons_o, BD_moluscos$c_agua, mean)
## 50 75 100
## 12.25062 6.99250 8.67125
names(BD_moluscos)
## [1] "c_agua" "molusco" "cons_o"
BD_moluscos$c_agua <- as.factor(BD_moluscos$c_agua)
El modelo de diseño de experimentos estimado para evaluar el efecto de la concentración de agua de mar y los tipos de molusco sobre el consumo oxigeno es el siguiente:
model1 <- lm(cons_o ~ ., data=BD_moluscos)
model1
##
## Call:
## lm(formula = cons_o ~ ., data = BD_moluscos)
##
## Coefficients:
## (Intercept) c_agua75 c_agua100 moluscoB
## 12.946 -5.258 -3.579 -1.391
summary(model1)
##
## Call:
## lm(formula = cons_o ~ ., data = BD_moluscos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.1750 -1.9877 -0.7019 2.1244 6.1450
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.9463 0.8521 15.193 < 2e-16 ***
## c_agua75 -5.2581 1.0436 -5.038 8.49e-06 ***
## c_agua100 -3.5794 1.0436 -3.430 0.00132 **
## moluscoB -1.3913 0.8521 -1.633 0.10966
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.952 on 44 degrees of freedom
## Multiple R-squared: 0.3986, Adjusted R-squared: 0.3575
## F-statistic: 9.719 on 3 and 44 DF, p-value: 4.866e-05
En una primera impresión de los resultados, a partir de la interpretación de los coeficientes del modelo, se tiene que el valor promedio del consumo de oxígeno para cada una de las combinaciones de las variables regresoras es el siguiente:
table <- data.frame(
c("11.555", "6.297", "7.976"),
c("12.946", "7.688", "9.367")
)
rownames(table) <- c("c_agua_50", "c_agua_75", "c_agua_100")
colnames(table) <- c("Molusco_B", "Molusco_A")
table
| Molusco_B | Molusco_A | |
|---|---|---|
| c_agua_50 | 11.555 | 12.946 |
| c_agua_75 | 6.297 | 7.688 |
| c_agua_100 | 7.976 | 9.367 |
Con los resultados obtenidos hasta ahora se pude decir que la combinación que tiene el mayor nivel de consumo de oxígeno promedio es “concentración de agua de mar 50%” y “molusco A” , alcanzando 12,946. En contraparte, la combinación que tiene el menor nivel de consumo promedio es concentración de agua de mar 75%“” y “molusco B”.
Al examinar con mayor detalle el valor de probabilidad de los coeficientes, se tiene que el valor de probabilidad de la variable moluscos es 0.10966, y por tanto no es significativa.
Ahora, para evaluar si la diferencia entre las medias de todas las combinaciones es significativa, se realiza el análisis de varianzas.
anova(model1)
| Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
|---|---|---|---|---|---|
| c_agua | 2 | 230.81603 | 115.408015 | 13.245654 | 0.0000314 |
| molusco | 1 | 23.22692 | 23.226919 | 2.665809 | 0.1096627 |
| Residuals | 44 | 383.36745 | 8.712897 | NA | NA |
Dado que la hipótesis nula es que no existen diferencia estadística entre las medias de los grupos, el valor de probabilidad del estadístico F arroja que solo la variable “concentración de agua de mar” tiene diferencias significativa entre las medias de sus grupos.
Para determinar las diferencias específicas entre los niveles de concentración de agua de mar, se plantea el uso de la prueba de Tukey. Así, se podrá identificar a cuáles grupos específicos responden las posibles diferencias en media identificadas por el test Anova.
TukeyHSD(aov(model1))
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = model1)
##
## $c_agua
## diff lwr upr p adj
## 75-50 -5.258125 -7.7893709 -2.726879 0.0000250
## 100-50 -3.579375 -6.1106209 -1.048129 0.0037144
## 100-75 1.678750 -0.8524959 4.209996 0.2527584
##
## $molusco
## diff lwr upr p adj
## B-A -1.39125 -3.108545 0.3260451 0.1096627
Por un lado, el test de Tukey indica que no existen diferencia en el nivel de consumo de oxígeno entre los dos tipos de moluscos.
Por otro lado, para la opciones entre la variable “concentración de agua de mar”, los resultados indican que no existe diferencia significativa entre los niveles 75 y 100, contrario a los demás grupos comparados, donde si se observan diferencias.
Si se grafican estos resultados, se tiene lo siguiente:
anova = aov(model1)
intervals = TukeyHSD(anova)
par(mfrow=c(2,1))
plot(intervals)
Utilizando la lógica de los intervalos de confianza, si el cero está contenido en un intervalo, no se puede rechazar la hipótesis nula de que esta diferencia entre las opciones comparadas es igual a cero.
## 'data.frame': 45 obs. of 5 variables:
## $ Biomasa : num 765 954 828 755 896 ...
## $ pH : num 5 4.7 4.2 4.4 5.55 5.5 4.25 4.45 4.75 4.6 ...
## $ Salinidad: int 33 35 32 30 33 33 36 30 38 30 ...
## $ Zinc : num 16.5 14 15.3 17.3 22.3 ...
## $ Potasio : num 1442 1299 1154 1045 522 ...
Se tiene una base de datos integrada por 5 variables cuantitativas continuas.
summary(Salinidad)
## Biomasa pH Salinidad Zinc
## Min. : 369.8 Min. :3.200 Min. :24.00 Min. : 0.2105
## 1st Qu.: 654.8 1st Qu.:3.450 1st Qu.:27.00 1st Qu.:13.9852
## Median : 991.8 Median :4.450 Median :30.00 Median :19.2420
## Mean :1082.2 Mean :4.609 Mean :30.27 Mean :17.8308
## 3rd Qu.:1346.9 3rd Qu.:5.350 3rd Qu.:33.00 3rd Qu.:22.6758
## Max. :2337.3 Max. :7.450 Max. :38.00 Max. :31.2865
## Potasio
## Min. : 350.7
## 1st Qu.: 527.0
## Median : 773.3
## Mean : 797.4
## 3rd Qu.: 954.1
## Max. :1441.7
De la exploración inicial de los registros se tiene que: - La Biomasa tiene un valor mínimo de 369.8, máximo de 2337.3 y promedio de 1082.2. - El pH tiene un valor mínimo de 3.20, máximo de 7.45 y promedio de 4.61. - La Salinidad tiene un valor mínimo de 24, máximo de 38 y promedio de 30.27. - El Zinc tiene un valor mínimo de 0.21, máximo de 31.28 y promedio de 17.83 - El Potasio tiene un valor mínimo de 350.7 , máximo de 1441.7 y promedio de 797.4
ggpairs(Salinidad, lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axisLabels = "none")
En el gráfico se pueden observar un histograma de cada variable, un gráfico de dispersión para cada pareja de datos y los coeficientes de correlación entre las covariables.
Al considerar los histogramas, pareciera que ninguna de las variables parece distribuirse de forma completamente normal. Al analizar los diagramas de dispersión entre covariables es posible reconocer un caso de relación fuerte y directamente proporcional, y dos casos de relación lineal moderada e inversamente proporcional, los cuales se examinarán a continuación.
corrplot.mixed(cor(Salinidad), order = 'AOE')
En el gráfico se pueden observar los tres casos de asociación lineal más importantes anunciados. Por un lado, se tiene una relación lineal fuerte y directa entre el pH y la Biomasa (r=0.93). Por otro lado, se observan dos casos de relación lineal moderada e inversa, una entre el Zinc y la Biomasa (r=-0.78) y la otra entre el Zinc y el pH (r=-0.72).
Es de especial interés la relación identificada entre el Zinc y el pH porque su inclusión en el modelo podría generar problemas de multicolinealidad.
A continuación se presenta el modelo de regresión lineal múltiple propuesto para explicar la biomasa en función de las covariables.
model<-lm(Biomasa ~ ., data = Salinidad)
summary(model)
##
## Call:
## lm(formula = Biomasa ~ ., data = Salinidad)
##
## Residuals:
## Min 1Q Median 3Q Max
## -293.98 -88.83 -9.48 88.20 387.27
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1492.8076 453.6013 3.291 0.002091 **
## pH 262.8829 33.7304 7.794 1.51e-09 ***
## Salinidad -33.4997 8.6525 -3.872 0.000391 ***
## Zinc -28.9727 5.6643 -5.115 8.20e-06 ***
## Potasio -0.1150 0.0819 -1.404 0.167979
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 158.9 on 40 degrees of freedom
## Multiple R-squared: 0.9231, Adjusted R-squared: 0.9154
## F-statistic: 120 on 4 and 40 DF, p-value: < 2.2e-16
En primer lugar, el valor de probabilidad de la prueba t determina el significancia de cada una de las covariables. Siendo que la \(H_0\) es que los coeficientes son cero, los resultado obtenidos para las variables pH, Salinidad y Zinc permiten asumir que se trata de coeficientes distintos de cero. Por el contrario, el resultado del Potasio lo clasifica como una variable no significativa para el modelo y por tanto se lo excluye de la siguiente parte del análisis.
En segundo lugar, el significado de los coeficientes de correlación parciales significativos es el siguiente:
El \(B_0\) mide el valor promedio de la Biomasa si el PH, la Salinidad y el Zinc son cero. En ese caso el valor promedio de la Biomasa sería 1492.81.
El \(B_1\) mide el cambio en el valor promedio de la Biomasa por unidad de cambio del PH con la Salinidad y el Zinc constantes. Así, por cada unidad adicional de pH, en las condiciones anunciadas, se incrementa la Biomasa en promedio en 262.88.
El \(B_2\) mide el cambio en el valor promedio de la Biomasa por cada una unidad de cambio de la Salinidad con el pH y el Zinc constantes. Así, por cada unidad adicional de Salinidad, en las condiciones anunciadas, la Biomasa disminuye en promedio en 33.49.
El \(B_3\) mide el cambio en el valor promedio de la Biomasa por cada una unidad de cambio del Zinc con el pH y la Salinidad constantes. Así, por cada unidad adicional de Zinc, en las condiciones anunciadas, la Biomasa disminuye en promedio en 28.97
En tercer lugar, el \(R^2\) = 0.9231 y \(R^2 Ajustado\) = 0.9154 son medidas de bondad del ajuste del modelo a los datos analizados, y tomando este último de referencia, indica que el modelo puede explicar el 91,54% de la variación de la Biomasa en función de las variables regresoras.
model<-lm(log(Biomasa)~log(pH) + log(Salinidad) + log(Zinc) + log(Potasio), data = Salinidad)
#summary(model)
library(dgof)
table2 <- data.frame(c("t", "KS", "Goldfeld-Quandt", "Durbin Watson"),
c(t.test(summary(model)$residuals)$p.value,
ks.test(model$residuals,"pnorm")$p.value,
lmtest::gqtest(model)$p.value,
lmtest::dwtest(model)$p.value))
colnames(table2) <- c("Prueba"," P-Valor")
table2
| Prueba | P-Valor |
|---|---|
| t | 1.0000000 |
| KS | 0.0000332 |
| Goldfeld-Quandt | 0.1897359 |
| Durbin Watson | 0.0019595 |
Una evaluación de los supuestos de los residuos a través de pruebas estadísticas conduce a la conclusión de que el modelo no cumple los supuestos de normalidad e independencia de los residuos. Este resultado debería se un insumo para la búsqueda de alternativas para obtener un mejor modelo, cuestión que se intentó solucionar con diferentes transformaciones sin obtener un resultado satisfactorio.
Por medio de web scraping descargar la base de datos de precios de vehículos Mazda 2 para Colombia del portal olx, on las variables: precio, modelo, transmisión y ciudad.
Se empleó la herramienta Web Scraper para extraer el registro de los anuncios publicados para el vehículo Mazda 2 con las variables requeridas; a continuación se presenta el proceso de limpieza y transformación del datafram resultante, de al forma que permita realizar construir y analizar el modelo propuesto.
mazda <- read_excel("C:/Users/Andre/Downloads/mazda2.xlsx")
mazda$kilometraje=as.numeric(str_replace_all(mazda$kilometraje, "[km ,.]", ""))
mazda$precio=as.numeric(str_replace_all(mazda$precio,"[$,.]",""))
mazda$anio=as.numeric(mazda$anio)
mazda=filter(mazda,grepl("2",modelo,ignore.case=TRUE))
mazda=filter(mazda,modelo!="B2200")
mazda$modelo <- gsub("Mazda 2", "SEDAN", mazda$modelo)
mazda$modelo <- gsub("2 SEDAN", "SEDAN", mazda$modelo)
mazda$modelo <- gsub("2 HATCHBACK", "HATCHBACK", mazda$modelo)
mazda$modelo <- gsub("2", "SEDAN", mazda$modelo)
mazda$descripcion=toupper(mazda$descripcion)
mazda$modelo <- gsub("TRUE", "GRAND", mazda$modelo)
Tipo <- grepl("GRAND TOURING|GT|TURIN|TURÍN|TURING|TOURING",mazda$descripcion)
mazda=cbind(mazda,Tipo)
mazda$Tipo<- gsub("TRUE", "GT", mazda$Tipo)
mazda$Tipo<- gsub("FALSE", "CLASSIC", mazda$Tipo)
submodelo_LX <- grepl(" LX ",mazda$descripcion)
submodelo_LX<- gsub(TRUE, "LX",submodelo_LX)
submodelo_LX<- gsub(FALSE,"",submodelo_LX)
submodelo_MT <- grepl(" MT ",mazda$descripcion)
submodelo_MT<- gsub(TRUE, "MT",submodelo_MT)
submodelo_MT<- gsub(FALSE,"",submodelo_MT)
submodelo_AT <- grepl(" AT ",mazda$descripcion)
submodelo_AT<- gsub(TRUE, "AT",submodelo_AT)
submodelo_AT<- gsub(FALSE,"",submodelo_AT)
submodelo= gsub(" ","",paste(mazda$submodelo_AT,mazda$submodelo_LX,mazda$submodelo_MT))
mazda=cbind(mazda,submodelo_LX,submodelo_MT,submodelo_AT)
submodelo=str_remove_all(paste(submodelo_LX,submodelo_MT,submodelo_AT)," ")
mazda=cbind(mazda,submodelo)
mazda$submodelo_AT=NULL
mazda$submodelo_LX=NULL
mazda$submodelo_MT=NULL
mazda <- mazda %>%
mutate(submodelo = ifelse(submodelo == '',"Basic",submodelo))
mazda$`web-scraper-order`=NULL
mazda$`web-scraper-start-url`=NULL
mazda$link=NULL
mazda$`link-href`=NULL
mazda$ciudad=NULL
mazda$descripcion=NULL
Realizar una exploración de datos para evaluar la posible relación entre precio con las demás variables.
ggplot(mazda,aes(x=transmision,y=precio,fill=factor(transmision)))+
geom_boxplot()+theme_bw()+scale_fill_brewer()
ggplot(mazda,aes(x=submodelo,y=precio,fill=factor(submodelo)))+
geom_boxplot()+theme_bw()+scale_fill_brewer()
par(mfrow=c(1:2))
plot(mazda$anio,mazda$precio,xlab="Anio",ylab="Precio")
plot(mazda$kilometraje,mazda$precio,xlab="Kilometraje",ylab="Precio")
Al realizar un análisis bivariado entre la transmisión y el precio, es posible observar que los vehículos con una transmisión mecánica tienen un precio significativamente menor que los que poseen otro tipo de tranmisión (Automática o Automática Secuencial); además, los modelos AT y LX también tienen un precio significativamente superior con respecto a los modelos Basic y MT.
Por otra parte, si realizamos un análisis de las variables cuantitativas, podemos observar que existe una relación directamente proporcional entre el año del vehículo y su preccio, así como una relación inversamente proporcional entre el kilometraje recorrido y el precio.
Proponer un modelo de regresión lineal múltiple e interpretar los resultados (betas).
str(mazda)
## 'data.frame': 336 obs. of 7 variables:
## $ precio : num 22000000 55000000 42000000 57000000 47000000 40000000 44000000 38500000 32000000 28000000 ...
## $ anio : num 2011 2016 2014 2017 2016 ...
## $ kilometraje: num 102000 94000 60000 58600 80000 ...
## $ modelo : chr "SEDAN" "SEDAN" "SEDAN" "HATCHBACK" ...
## $ transmision: chr "Mecánica" "Automática" "Mecánica" "Mecánica" ...
## $ Tipo : chr "CLASSIC" "GT" "CLASSIC" "GT" ...
## $ submodelo : chr "Basic" "Basic" "Basic" "Basic" ...
model_mazda=lm(precio~.,mazda)
summary(model_mazda)
##
## Call:
## lm(formula = precio ~ ., data = mazda)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11850902 -2539609 -342374 2653192 15669256
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -6.433e+09 1.969e+08 -32.669 < 2e-16 ***
## anio 3.219e+06 9.755e+04 33.001 < 2e-16 ***
## kilometraje -2.807e+01 7.488e+00 -3.748 0.000211 ***
## modeloSEDAN 1.062e+05 4.750e+05 0.224 0.823207
## transmisionAutomática Secuencial 1.306e+05 9.243e+05 0.141 0.887701
## transmisionMecánica -2.965e+06 5.135e+05 -5.774 1.82e-08 ***
## TipoGT 4.989e+06 7.111e+05 7.016 1.36e-11 ***
## submodeloBasic -2.252e+06 1.458e+06 -1.544 0.123535
## submodeloLX 5.436e+06 1.601e+06 3.395 0.000772 ***
## submodeloMT -9.976e+05 2.167e+06 -0.460 0.645578
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4239000 on 322 degrees of freedom
## (4 observations deleted due to missingness)
## Multiple R-squared: 0.9485, Adjusted R-squared: 0.947
## F-statistic: 658.5 on 9 and 322 DF, p-value: < 2.2e-16
cor(mazda$precio,mazda$anio)
## [1] 0.9555599
cor(mazda$precio,mazda$kilometraje)
## [1] -0.7442694
cor(mazda$anio,mazda$kilometraje)
## [1] -0.7327831
Al depurar la base de datos, se obtiene un total de 7 variables, de las cuales 2 son numéricas: precio, y kilometraje y 5 categóricas: anio, modelo, transmisión, tipo y submodelo.
Luego, al analizar los p-values de estas variables en un modelo de regresión lineal en el que la variable independiente es el precio, es posible afirmar que las variables con un alto nivel de significancia para el modelo son: Intercepto, Año, Kilometraje, Contar con una transmisión Mecánica, ser del tipo GT y ser un submodelo LX.
Además, los coeficientes de correlación entre las 3 variables numéricas son:
Precio~Anio = 0.9555599 Precio~Kilometraje= -0.7442694 Kilometraje~Anio= -0.7327831
plot(model_mazda)
table3 <- data.frame(c("t", "Shapiro", "Goldfeld-Quandt", "Durbin Watson"),
c(t.test(summary(model_mazda)$residuals)$p.value,
shapiro.test(model_mazda$residuals)$p.value,
lmtest::gqtest(model_mazda)$p.value,
lmtest::dwtest(model_mazda)$p.value))
colnames(table3) <- c("Prueba"," P-Valor")
table3
| Prueba | P-Valor |
|---|---|
| t | 1.0000000 |
| Shapiro | 0.0043513 |
| Goldfeld-Quandt | 0.4122219 |
| Durbin Watson | 0.0663778 |
Por último, se realizan las 4 gráficas de validación de supuestos del modelo, así como las 4 pruebas estadísticas correspondientes, donde es posible afirmar que el modelo cumple la mayor parte de los supuestos, exceptuando la normalidad, por lo cual podría ser pertinente analizar posibles transformaciones en las variables del modelo que permitiesen satisfacer la totalidad de los supuestos.
Validar el poder predictivo del modelo con Validación Cruzada.
mazda= mazda %>%
drop_na()
set.seed(125)
train_control <- trainControl(method = "repeatedcv",number = 10, repeats = 3)
model <- train(precio ~., data = mazda,method = "lm",trControl = train_control)
print(model)
## Linear Regression
##
## 332 samples
## 6 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold, repeated 3 times)
## Summary of sample sizes: 300, 300, 297, 299, 298, 299, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 4253764 0.9490331 3300234
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
4270221/mean(mazda$precio)
## [1] 0.08354829
3322876/mean(mazda$precio)
## [1] 0.06501317
Al realizar validación cruzada, es posible observar un coeficiente de determinación (\(R^2\)) de 0.9486, de lo cual se puede afirmar que el modelo permite explicar el 94.86% de las variaciones en el precio del vehículo Mazda 2 en función de las variables predictoras. Además, el valor del RMSE es de 4.270.221, correspondiente a un 8.35% del promedio del precio y del MAE de 3.322.876, siendo un 6.5% del promedio del precio.
Discutir potenciales usos del modelo como herramienta práctica (Como monetizar los resultados de este modelo).
Los usos potenciales del modelo serían: permitir la obtención de información sobre cualquier artículo cuyo precio esté disponible online, extraer sus características, y estar en capacidad de predecir el valor para la adquisición de dicho producto; para este caso tenemos automóviles, sin embargo, podrían ser viviendas, celulares, computadores, entre otros artículos.