Alumno: Daniel Lorenzo Medina Salcedo
Correo: medinada@javerianacali.edu.co
Asignatura: Métodos estadisticos para la toma de decisiones
Profesor: Daniel Enrique González Gómez
Maestria en Ciencia de Datos
Universidad Javeriana de Cali
Agosto 2022
Este documento se puede consulta en línea en el siguiente link:
Predicción de los precios de las acciones. Analizar el comportamiento de los precios de las Acciones de Ecopetrol según la variación del precio del barril de petróleo WTI producido en Colombia. Se tienen los siguientes precios:
Para iniciar realizaremos un análisis descriptivo de los datos.
| prec_ecop | prec_petr |
|---|---|
| 1090 | 35.62 |
| 1170 | 36.31 |
| 1160 | 37.35 |
| 1230 | 34.95 |
| 1155 | 34.53 |
| 1165 | 35.81 |
| 1205 | 36.14 |
| 1170 | 37.50 |
| 1150 | 37.80 |
| 1130 | 36.81 |
| 1110 | 37.87 |
| 1105 | 37.04 |
| 1085 | 36.76 |
| 1060 | 35.97 |
| 1035 | 33.97 |
| 1015 | 33.27 |
| 955 | 31.41 |
| 961 | 30.44 |
| prec_ecop | prec_petr | |
|---|---|---|
| Min. : 955 | Min. :30.44 | |
| 1st Qu.:1066 | 1st Qu.:34.63 | |
| Median :1120 | Median :36.05 | |
| Mean :1108 | Mean :35.53 | |
| 3rd Qu.:1164 | 3rd Qu.:36.98 | |
| Max. :1230 | Max. :37.87 |
Para facilitar la visualización de los datos calculo la relación cómo una razón, usando la media del precio de la acción de ecopetrol entre el precio del petroleo. Con esto podremo visualizar mejor los datos.
razon = round(mean(prec_ecop/prec_petr),0)
razon
## [1] 31
Proponga un modelo de regresión lineal simple que permita predecir el valor de las Acciones de Ecopetrol con base en el Precio del barril de petróleo en Colombia. Indique la ecuación de regresión y el valor del \(R^2\)
mod_ecopetrol=lm(prec_ecop ~ prec_petr)
ggplot(dataset, aes(x=prec_petr, y=prec_ecop))+ geom_point(size=2, color='red') + geom_smooth(method='lm', se = FALSE) + theme_bw() + ggtitle("Regresión lineal")
| beta_0 | beta_1 | correlacion | R_2 | |
|---|---|---|---|---|
| (Intercept) | 177.7678 | 26.19213 | 0.7074373 | 0.5004675 |
Respuesta:
summary(mod_ecopetrol)
##
## Call:
## lm(formula = prec_ecop ~ prec_petr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -59.90 -40.74 -15.94 33.40 136.82
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 177.768 232.828 0.764 0.45627
## prec_petr 26.192 6.542 4.004 0.00102 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 57.13 on 16 degrees of freedom
## Multiple R-squared: 0.5005, Adjusted R-squared: 0.4692
## F-statistic: 16.03 on 1 and 16 DF, p-value: 0.001024
Respuesta:
Significancia Individual: Usando T Student
Significancia Conjunta Usando Estadistico F
Respuesta:
Haga un análisis de los residuos. ¿Qué supuesto no se cumple?
Verificar_Residuos = function(modelo)
{
mean(modelo$residuals)
t_test = t.test(modelo$residuals)$p.value
if (t_test > 0.05)
print(paste("Prueba de media igual a 0: (T.test P-Value es mayor a 0.05) *** ",round(t_test,4),"*** CUMPLE"))
else
print(paste("Prueba de media igual a 0: (T.test P-Value es menor a 0.05) *** ",round(t_test,4),"*** NO CUMPLE"))
if(length(modelo$residual) > 5000)
shapiro = shapiro.test(modelo$residual[1:5000])$p.value
else
shapiro = shapiro.test(modelo$residuals)$p.value
if(shapiro > 0.05)
print(paste("Prueba de normalidad: (Shapiro Test es mayor a 0.05) *** ",round(shapiro, 4),"*** CUMPLE"))
else
print(paste("Prueba de normalidad: (Shapiro Test es menor a 0.05) *** ",round(shapiro, 4),"*** NO CUMPLE"))
test_varianzas = bptest(modelo)$p.value
if(test_varianzas > 0.05)
print(paste("Prueba de varianzas: (BP Test es mayor a 0.05) *** ",round(test_varianzas, 4),"*** CUMPLE"))
else
print(paste("Prueba de varianzas: (BP Test es menor a 0.05) *** ",round(test_varianzas, 4),"*** NO CUMPLE"))
test_independencia = dwt(modelo, alternative = "two.sided")$p[1]
if(test_independencia > 0.05)
print(paste("Prueba de Independecia: (Durbin Watson Test es mayor a 0.05) *** ",round(test_independencia, 4),"*** CUMPLE"))
else
print(paste("Prueba de Independecia: (Durbin Watson Test es menor a 0.05) *** ",round(test_independencia, 4),"*** NO CUMPLE"))
}
Verificar_Residuos(mod_ecopetrol)
## [1] "Prueba de media igual a 0: (T.test P-Value es mayor a 0.05) *** 1 *** CUMPLE"
## [1] "Prueba de normalidad: (Shapiro Test es menor a 0.05) *** 0.0428 *** NO CUMPLE"
## [1] "Prueba de varianzas: (BP Test es mayor a 0.05) *** 0.8635 *** CUMPLE"
## [1] "Prueba de Independecia: (Durbin Watson Test es menor a 0.05) *** 0 *** NO CUMPLE"
Respuesta:
Resultados de las pruebas sobre los residuos
| Criterio sobre los residuos | Prueba | Resultado |
|---|---|---|
| Media cero: | T test | CUMPLE |
| Normalidad: | Shapiro test | NO CUMPLE |
| Varianza constante (homocedasticidad): | Breusch-Pagan test | CUMPLE |
| No autocorrelación (Independencia): | Durbin-Watson test | NO CUMPLE |
Respuesta:
Se concluye que el modelo propuesto no es adecuado debido a que las variabled no tienen una relación lineal lo suficientemente fuerte, los residuos no cumplen con algunos de idoneidad y por consiguiente debería el modelo debería transformarse.
Los siguientes datos corresponden a la INFLACION y al SALARIO MINIMO LEGAL MENSUAL (SMLM) desde el año 1999 para Colombia.
Para iniciar realizaremos un análisis descriptivo de los datos.
| annio | smlm | smlm_incremento | inflacion_anterior |
|---|---|---|---|
| 1999 | 236460 | 16.00 | 16.70 |
| 2000 | 260100 | 10.00 | 9.23 |
| 2001 | 286000 | 9.96 | 8.75 |
| 2002 | 309000 | 8.04 | 7.65 |
| 2003 | 332000 | 7.44 | 6.99 |
| 2004 | 358000 | 7.83 | 6.49 |
| 2005 | 381500 | 6.56 | 5.50 |
| 2006 | 408000 | 6.95 | 4.85 |
| 2007 | 433700 | 6.30 | 4.48 |
| 2008 | 461500 | 6.41 | 5.69 |
| 2009 | 496900 | 7.67 | 7.67 |
| 2010 | 515000 | 3.64 | 2.00 |
| 2011 | 535600 | 4.00 | 3.17 |
| 2012 | 566700 | 5.81 | 3.73 |
| 2013 | 589500 | 4.02 | 2.44 |
| 2014 | 616027 | 4.50 | 1.94 |
| 2015 | 644350 | 4.60 | 3.66 |
| annio | smlm | smlm_incremento | inflacion_anterior | |
|---|---|---|---|---|
| Min. :1999 | Min. :236460 | Min. : 3.640 | Min. : 1.940 | |
| 1st Qu.:2003 | 1st Qu.:332000 | 1st Qu.: 4.600 | 1st Qu.: 3.660 | |
| Median :2007 | Median :433700 | Median : 6.560 | Median : 5.500 | |
| Mean :2007 | Mean :437079 | Mean : 7.043 | Mean : 5.938 | |
| 3rd Qu.:2011 | 3rd Qu.:535600 | 3rd Qu.: 7.830 | 3rd Qu.: 7.650 | |
| Max. :2015 | Max. :644350 | Max. :16.000 | Max. :16.700 |
Escriba la ecuación del modelo de regresión lineal simple
mod_inflacion=lm(smlm_incremento ~ inflacion_anterior)
##
## Call:
## lm(formula = smlm_incremento ~ inflacion_anterior)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.7994 -0.4290 -0.1226 0.4573 0.8026
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.15384 0.26160 8.233 6.03e-07 ***
## inflacion_anterior 0.82341 0.03799 21.677 9.80e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.5464 on 15 degrees of freedom
## Multiple R-squared: 0.9691, Adjusted R-squared: 0.967
## F-statistic: 469.9 on 1 and 15 DF, p-value: 9.798e-13
| beta_0 | beta_1 | correlacion | R_2 | |
|---|---|---|---|---|
| (Intercept) | 2.153837 | 0.8234076 | 0.9844105 | 0.969064 |
Respuesta:
ggplot(dataset_Inflacion, aes(x=inflacion_anterior, y=smlm_incremento))+ geom_point(size=2, color='red') + geom_smooth(method='lm', se = FALSE) + theme_bw() + ggtitle("Incremento SMLM vs Inflación año anterior")
Plantee y valide las hipótesis correspondientes a la linealidad general del modelo propuesto en a)
Verificar_Residuos(mod_inflacion)
## [1] "Prueba de media igual a 0: (T.test P-Value es mayor a 0.05) *** 1 *** CUMPLE"
## [1] "Prueba de normalidad: (Shapiro Test es mayor a 0.05) *** 0.3339 *** CUMPLE"
## [1] "Prueba de varianzas: (BP Test es mayor a 0.05) *** 0.2591 *** CUMPLE"
## [1] "Prueba de Independecia: (Durbin Watson Test es mayor a 0.05) *** 0.934 *** CUMPLE"
Resultados de las pruebas sobre los residuos
| Criterio sobre los residuos | Prueba | Resultado |
|---|---|---|
| Media cero: | T test | CUMPLE |
| Normalidad: | Shapiro test | CUMPLE |
| Varianza constante (homocedasticidad): | Breusch-Pagan test | CUMPLE |
| No autocorrelación (Independencia): | Durbin-Watson test | CUMPLE |
Respuesta:
Respuesta:
Construya una gráfica de residuales y haga un análisis cualitativo de los supuestos del modelo propuesto en a)
Graficar_Residuos(mod_ecopetrol, dataset$prec_petr)
Graficar_Estandar(mod_ecopetrol)
Respuesta:
El modelo construido es muy conveniente dado el cumplimiento de pruebas de los residuos, el valor casi 1 del coeficiente de determinación. Con lo anterior podemos indicar que el modelo es adecuado y podemos asegurar que la inflación del año inmediatamente anterior es determinante en el valor del nuevo salario mínimo.
Con base en los datos de precios de vivienda de la actividad en clase realizar un informe que contenga los siguientes puntos utilizando R y RMarkdown.
Realice un filtro a la base de datos e incluya solo las ofertas de apartamentos, de la zona norte de la ciudad con precios inferiores a los 500 millones de pesos y áreas menores a 300 mt2. Presente los primeros 3 registros de la base y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de la base, discutir si todos los puntos se ubican en la zona norte o se presentan valores en otras zonas, por que?).
data(vivienda)
vivienda$cordenada_longitud = vivienda$cordenada_longitud/10**(str_length(vivienda$cordenada_longitud)-3)
vivienda$Cordenada_latitud = vivienda$Cordenada_latitud/10**(str_length(vivienda$Cordenada_latitud)-1)
grupo1 = vivienda %>% filter(Zona == "Zona Norte",Tipo == "Apartamento", precio_millon < 500, Area_contruida < 300)
kbl(head(grupo1, 10),caption = "Primeros 10 resultados")%>% kable_classic(full_width = F)
| Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Zona Norte | 2 | 3 | 135 | 56 | 1 | 1 | 3 | Apartamento | torres de comfandi | -76.46745 | 3.40763 |
| Zona Norte | NA | 3 | 78 | 54 | 2 | 1 | 3 | Apartamento | chiminangos | -76.47820 | 3.44898 |
| Zona Norte | NA | 5 | 340 | 106 | 2 | 2 | 3 | Apartamento | la flora | -76.48200 | 3.43500 |
| Zona Norte | 1 | 3 | 135 | 103 | 1 | 3 | 4 | Apartamento | calimio norte | -76.48347 | 3.48626 |
| Zona Norte | 1 | 3 | 75 | 54 | 1 | 2 | 3 | Apartamento | calimio norte | -76.48381 | 3.48605 |
| Zona Norte | NA | 4 | 175 | 77 | 1 | 2 | 3 | Apartamento | urbanizaciv=n pacara | -76.48395 | 3.45104 |
| Zona Norte | NA | 3 | 99 | 58 | NA | 1 | 3 | Apartamento | comfenalco | -76.48400 | 3.45700 |
| Zona Norte | 1 | 3 | 95 | 55 | NA | 2 | 3 | Apartamento | brisas de los | -76.48400 | 3.46800 |
| Zona Norte | 2 | 3 | 110 | 57 | 1 | 2 | 3 | Apartamento | puente del comercio | -76.48458 | 3.46987 |
| Zona Norte | 3 | 3 | 155 | 62 | 1 | 2 | 3 | Apartamento | villa del prado | -76.48647 | 3.46549 |
Respuesta:
La gráfica muestra que existen inmuebles con datos errados en relación a la Zona. Aunque no soy de Cali y no conozco la configuración de la ciudad, podría inferir que los datos de zona son ingresados por el usuario en la plataforma y con ello generando posibles errores de calidad de datos.
| precio_millon | Estrato | Area_contruida | parqueaderos | log_Area_contruida | log_precio_millon | parqueaderos_aju | |
|---|---|---|---|---|---|---|---|
| Min. : 58.0 | Min. :3.000 | Min. : 30.0 | Min. : 1.000 | Min. :3.401 | Min. :4.060 | Min. :0.0000 | |
| 1st Qu.: 220.0 | 1st Qu.:4.000 | 1st Qu.: 80.0 | 1st Qu.: 1.000 | 1st Qu.:4.382 | 1st Qu.:5.394 | 1st Qu.:0.0000 | |
| Median : 330.0 | Median :5.000 | Median : 123.0 | Median : 2.000 | Median :4.812 | Median :5.799 | Median :0.0000 | |
| Mean : 433.9 | Mean :4.634 | Mean : 175.5 | Mean : 1.835 | Mean :4.925 | Mean :5.840 | Mean :0.1929 | |
| 3rd Qu.: 540.0 | 3rd Qu.:5.000 | 3rd Qu.: 229.5 | 3rd Qu.: 2.000 | 3rd Qu.:5.436 | 3rd Qu.:6.292 | 3rd Qu.:0.0000 | |
| Max. :1999.0 | Max. :6.000 | Max. :1745.0 | Max. :10.000 | Max. :7.465 | Max. :7.600 | Max. :1.0000 | |
| NA’s :2 | NA’s :3 | NA’s :151 | NA’s :1605 | NA’s :151 | NA’s :2 | NA |
Respuesta:
Se evidencia que las variables Área construida y Parqueaderos tienen mayor correlación con el precio que el estrato.
mod_vivienda1=lm(precio_millon ~ Area_contruida + parqueaderos + Estrato, dataset_vivienda)
mod_vivienda2=lm(precio_millon ~ log_Area_contruida + parqueaderos + Estrato, dataset_vivienda)
mod_vivienda2_zonanorte=lm(precio_millon ~ log_Area_contruida + parqueaderos + Estrato, dataset_vivienda_zonanorte)
mod_vivienda3=lm(precio_millon ~ log_Area_contruida + Estrato, dataset_vivienda)
| Variale | Modelo_1 | Modelo_2 | Modelo_2_ZonaNorte | Modelo_3 |
|---|---|---|---|---|
| R_2 | 0.6986499 | 0.707739 | 0.7341066 | 0.6723214 |
Respuesta:
En el resumen de la regresión lineal se evidencia que las tres variables son estadisticamente significativas. De otra para el \(R^2\) = 0.69, nos indica que el modelo no cuenta con la idoneidad suficiente para hacer predicciones de precio.
Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas solo realizar sugerencias de que se podría hacer).
Verificar_Residuos(mod_vivienda2)
## [1] "Prueba de media igual a 0: (T.test P-Value es mayor a 0.05) *** 1 *** CUMPLE"
## [1] "Prueba de normalidad: (Shapiro Test es menor a 0.05) *** 0 *** NO CUMPLE"
## [1] "Prueba de varianzas: (BP Test es menor a 0.05) *** 0 *** NO CUMPLE"
## [1] "Prueba de Independecia: (Durbin Watson Test es menor a 0.05) *** 0 *** NO CUMPLE"
Verificar_Residuos(mod_vivienda2_zonanorte)
## [1] "Prueba de media igual a 0: (T.test P-Value es mayor a 0.05) *** 1 *** CUMPLE"
## [1] "Prueba de normalidad: (Shapiro Test es menor a 0.05) *** 0.0156 *** NO CUMPLE"
## [1] "Prueba de varianzas: (BP Test es menor a 0.05) *** 0 *** NO CUMPLE"
## [1] "Prueba de Independecia: (Durbin Watson Test es menor a 0.05) *** 0 *** NO CUMPLE"
Respuesta:
Ajustes
Considero que el area y el precio no se relaciona de manera lineal con el precio. Por lo anterior utilizé la función log(area).
Tambien creé un modelo solo con los apartamentos de la zona norte y mejoró el indice de determinación del modelo.
mtable(mod_vivienda2, mod_vivienda2_zonanorte)
##
## Calls:
## mod_vivienda2: lm(formula = precio_millon ~ log_Area_contruida + parqueaderos +
## Estrato, data = dataset_vivienda)
## mod_vivienda2_zonanorte: lm(formula = precio_millon ~ log_Area_contruida + parqueaderos +
## Estrato, data = dataset_vivienda_zonanorte)
##
## ==============================================================
## mod_vivienda2 mod_vivienda2_zonanorte
## --------------------------------------------------------------
## (Intercept) -1382.618*** -510.554***
## (21.260) (31.233)
## log_Area_contruida 233.430*** 98.655***
## (4.402) (8.904)
## parqueaderos 83.578*** 39.528***
## (2.615) (5.094)
## Estrato 111.397*** 63.631***
## (2.621) (3.077)
## --------------------------------------------------------------
## R-squared 0.708 0.734
## N 6593 742
## ==============================================================
## Significance: *** = p < 0.001; ** = p < 0.01; * = p < 0.05
Conclusión: El \(R^2\) mejoró a 0.734 con los ajustes menionados.
nuevo_aju=data.frame(log_Area_contruida=c(log(100)), parqueaderos=c(1), Estrato=c(4))
predicion_precio=predict(mod_vivienda2_zonanorte, newdata=nuevo_aju, interval="confidence", level=0.95)
predicion_precio
## fit lwr upr
## 1 237.8231 230.9968 244.6494
Respuesta:
La oferta de 450 millones es una MUY BUENA OFERTA comparada contra los dos modelos definidos.
Con las predicciones del modelo sugiera potenciales ofertas para una persona interesada en un apartamento en la zona norte con mas de 100 mt2 de área, de estrato 4, que tenga parqueadero y tenga encuentra que la persona tiene un crédito preaprobado de máximo 400 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.
#vivienda$parqueaderos = as.integer(is.na(vivienda$parqueaderos))
oferta = grupo1 %>% filter( precio_millon < 400,precio_millon > predicion_precio[1], parqueaderos==1, Estrato==4, Area_contruida > 100 )
kbl(head(oferta, 20),caption = "Ofertas")%>% kable_classic(full_width = F)
| Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Zona Norte | 4 | 4 | 380 | 123 | 1 | 3 | 3 | Apartamento | la flora | -76.51437 | 3.48618 |
| Zona Norte | NA | 4 | 350 | 130 | 1 | 2 | 3 | Apartamento | la flora | -76.52100 | 3.49000 |
| Zona Norte | 1 | 4 | 290 | 108 | 1 | 2 | 3 | Apartamento | la flora | -76.52115 | 3.48930 |
| Zona Norte | 6 | 4 | 270 | 152 | 1 | 3 | 4 | Apartamento | versalles | -76.52515 | 3.46334 |
| Zona Norte | 3 | 4 | 300 | 287 | 1 | 3 | 4 | Apartamento | la campiv±a | -76.52673 | 3.47907 |
| Zona Norte | 2 | 4 | 240 | 103 | 1 | 2 | 3 | Apartamento | versalles | -76.52700 | 3.46500 |
| Zona Norte | 2 | 4 | 300 | 163 | 1 | 3 | 3 | Apartamento | san vicente | -76.52785 | 3.46701 |
| Zona Norte | 4 | 4 | 250 | 118 | 1 | 2 | 3 | Apartamento | versalles | -76.52793 | 3.46699 |
| Zona Norte | 7 | 4 | 250 | 106 | 1 | 2 | 3 | Apartamento | versalles | -76.52812 | 3.46362 |
| Zona Norte | NA | 4 | 270 | 111 | 1 | 3 | 3 | Apartamento | versalles | -76.52900 | 3.46300 |
| Zona Norte | 6 | 4 | 310 | 147 | 1 | 2 | 2 | Apartamento | santa monica | -76.53098 | 3.46780 |
| Zona Norte | 7 | 4 | 315 | 125 | 1 | 3 | 4 | Apartamento | centenario | -76.53593 | 3.45391 |
| Zona Norte | 10 | 4 | 245 | 103 | 1 | 2 | 2 | Apartamento | versalles | -76.54973 | 3.42484 |
| Zona Norte | NA | 4 | 310 | 120 | 1 | 3 | 2 | Apartamento | san pedro | -76.55400 | 3.42600 |
Con base en los datos de arboles proponga un modelo de regresión lineal múltiple que permita predecir el peso del árbol en función de las covariables que considere importantes y seleccionándolas de acuerdo con un proceso adecuado. Tenga en cuenta realizar una evaluación de la significancia de los parámetros, interpretación y proponga un método de evaluación por medio de validación cruzada. Presente métricas apropiadas como el RMSE y MAE.
data(arboles)
| finca | mg | peso | diametro | altura |
|---|---|---|---|---|
| FINCA_1 | GENOTIPO_1 | 13.73 | 4.7 | 5.0 |
| FINCA_1 | GENOTIPO_1 | 14.58 | 5.3 | 5.6 |
| FINCA_1 | GENOTIPO_1 | 15.88 | 4.8 | 5.8 |
| FINCA_1 | GENOTIPO_1 | 8.99 | 3.2 | 4.3 |
| FINCA_1 | GENOTIPO_1 | 6.99 | 2.2 | 3.3 |
| FINCA_1 | GENOTIPO_2 | 19.34 | 6.3 | 7.9 |
cor(arboles$peso, arboles$diametro)
## [1] 0.908123
cor(arboles$peso, arboles$altura)
## [1] 0.8582009
## arboles.peso arboles.diametro arboles.altura
## arboles.peso 1.0000000 0.908123 0.8582009
## arboles.diametro 0.9081230 1.000000 0.9355360
## arboles.altura 0.8582009 0.935536 1.0000000
#Paso 1 : Segmentar los datos
tamano = dim(arboles)[1]
id_modelar = sample(1:tamano, size = tamano * 0.8)
arboles_modelar = arboles[id_modelar,]
arboles_validar = arboles[-id_modelar,]
#Paso 2 : Estimar el modelo
mod_arboles_modelar1 = lm(data=arboles, arboles$peso~arboles$diametro + arboles$altura)
summary(mod_arboles_modelar1)
##
## Call:
## lm(formula = arboles$peso ~ arboles$diametro + arboles$altura,
## data = arboles)
##
## Residuals:
## Min 1Q Median 3Q Max
## -6.3083 -2.5121 0.1608 2.0088 11.7446
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -9.1205 1.4305 -6.376 8.44e-09 ***
## arboles$diametro 4.7395 0.7128 6.649 2.49e-09 ***
## arboles$altura 0.3132 0.5751 0.544 0.587
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.449 on 87 degrees of freedom
## Multiple R-squared: 0.8253, Adjusted R-squared: 0.8213
## F-statistic: 205.5 on 2 and 87 DF, p-value: < 2.2e-16
| Variable | M1_Combinado |
|---|---|
| R_2 | 0.8252828 |
Verificar_Residuos(mod_arboles_modelar1)
## [1] "Prueba de media igual a 0: (T.test P-Value es mayor a 0.05) *** 1 *** CUMPLE"
## [1] "Prueba de normalidad: (Shapiro Test es menor a 0.05) *** 0.005 *** NO CUMPLE"
## [1] "Prueba de varianzas: (BP Test es menor a 0.05) *** 8e-04 *** NO CUMPLE"
## [1] "Prueba de Independecia: (Durbin Watson Test es menor a 0.05) *** 0 *** NO CUMPLE"
#Paso 3a : Predecir el set de validación
peso_predic1 = predict(mod_arboles_modelar1, list(diametro = arboles_validar$diametro, altura = arboles_validar$altura))
#Paso 4a : Comparar las pesos del modelo contra los reales
peso_real = arboles_validar$peso
error_modelo1 = peso_real - peso_predic1
res = data.frame(peso_real, peso_predic1, error_modelo1)
| peso_real | peso_predic1 | error_modelo1 | |
|---|---|---|---|
| Min. : 6.99 | Min. : 2.34 | Min. :-29.135 | |
| 1st Qu.:14.03 | 1st Qu.:13.95 | 1st Qu.: -7.327 | |
| Median :18.75 | Median :18.38 | Median : -0.317 | |
| Mean :17.93 | Mean :18.77 | Mean : -0.835 | |
| 3rd Qu.:23.02 | 3rd Qu.:24.02 | 3rd Qu.: 5.091 | |
| Max. :27.87 | Max. :36.13 | Max. : 22.493 |
MAE = mean(abs(error_modelo1)) #Mean absolute error
RSME = sqrt(mean((error_modelo1)^2))
result = data.frame(MAE, RSME)
| MAE | RSME |
|---|---|
| 7.245245 | 9.196602 |
| peso_real | peso_predic1 | error_modelo1 |
|---|---|---|
| 6.99 | 14.720738 | -7.7307381 |
| 19.34 | 17.752309 | 1.5876909 |
| 11.88 | 15.445213 | -3.5652126 |
| 15.83 | 7.392339 | 8.4376606 |
| 7.47 | 2.339721 | 5.1302789 |
| 20.06 | 23.212037 | -3.1520367 |
| 14.09 | 24.759138 | -10.6691384 |
| 18.16 | 18.284683 | -0.1246828 |
| 14.44 | 16.201003 | -1.7610033 |
| 8.73 | 21.065725 | -12.3357250 |