Inicio

Alumno: Daniel Lorenzo Medina Salcedo

Correo:

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:

Ver en línea en R PUbs

1. Modelo del precio de la acción de Ecopetrol

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:

Análisis descriptivo

Para iniciar realizaremos un análisis descriptivo de los datos.

Datos a estudiar
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
Summary de los datos
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

Visualización

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

a

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")

Resumen Modelo
beta_0 beta_1 correlacion R_2
(Intercept) 177.7678 26.19213 0.7074373 0.5004675

Respuesta:

  • \(\beta_0\) = 177.76

  • \(\beta_1\) = 26.19

  • y = \(\beta_0\) + \(\beta_1\)x sería (precio accion ecopetrol) = 177.76 + 26.19 * (precio del petroleo)

  • \(R^2\) = 0.50

  • Coeficiente de correlación: Cor= 0.70

b

Pruebe la significancia del modelo propuesto en “a)” plantee las hipótesis respectivas y use el concepto de Valor _p para tomar la decisión sobre las hipótesis. Use alpha = 0.05

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

  • \(\beta_0\) = 177.76 (P-valor 0.45 es mayor a 0.05) por consiguiente este coeficiente no es significativo estadisticamente.

    T Student

  • \(\beta_1\) = 26.19 (P-valor 0.001 es menor a 0.05) por consiguiente este coeficiente en importante en la explicación de la variable y (precio acción).

    Significancia Conjunta Usando Estadistico F
  • P-valor = 0.001024 es menor a 0.05 por consiguiente el modelo estadisticamente significativo.

    Estadistico F

c

Interprete los coeficientes del modelo propuesto en “a)”

Respuesta:

  • \(\beta_0\) = 177.76 es el intercepto y representaría el valor base de la acción en el caso de un valor 0 del petroleo.

  • \(\beta_1\) = 26.19 este valor reprenta el multipo de valor de la acción versus el precio del petroleo.

  • \(R^2\) = 0.50 significa que el modelo solo explica el 50% de la relación entre las variables.

d

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

e

Concluya sobre la validez del modelo propuesto en a)

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.

2. Modelo del salario mínimo

Los siguientes datos corresponden a la INFLACION y al SALARIO MINIMO LEGAL MENSUAL (SMLM) desde el año 1999 para Colombia.

Análisis descriptivo

Para iniciar realizaremos un análisis descriptivo de los datos.

Datos a estudiar
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

Visualización

Summary de los datos
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

a

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
Resumen Modelo
beta_0 beta_1 correlacion R_2
(Intercept) 2.153837 0.8234076 0.9844105 0.969064

Respuesta:

  • \(\beta_0\) = 2.1538

  • \(\beta_1\) = 0.8234

  • y = \(\beta_0\) + \(\beta_1\)x sería salario minimo = 2.1538 + 0.8234 * inflacion

  • \(R^2\) = 0.9690

  • Coeficiente de correlación: Cor= 0.9844

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")

b

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

c

Indique e interprete el coeficiente de correlación del modelo propuesto en a)

Respuesta:

  • Coeficiente de correlación: Cor= 0.9844, se evidencia un indicador cercano a 1, lo cual indica relación lineal muy fuerte.

d

Interprete cada uno de los coeficientes del modelo propuesto en a)

Respuesta:

  • \(\beta_0\) = 2.1538, es altamente significativo estadisticamente y en caso de tener inflación 0 la predición sería el valor de \(\beta_0\).

  • \(\beta_1\) = 0.8234, es altamente significativo estadisticamente y por cada punto de inflación sube 0.8234 el salario minimo .

  • \(R^2\) = 0.9690, quiere decir que en el 96% de los casos se explica la relación de las variables-

e

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)

f

Comente sobre la conveniencia de usar el modelo propuesto en a) para predecir el SMLM para Colombia.

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.

3. Modelo precios de vivienda

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.

a

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)

Diez primeros registros

kbl(head(grupo1, 10),caption = "Primeros 10 resultados")%>% kable_classic(full_width = F)
Primeros 10 resultados
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

Gráfica de cajas y bigotes de area y precio

Mapa con colores con todas las Zonas

Zona Norte

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.

b

Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) en función del área construida, estrato y si tiene parqueadero. Use gráficos interactivos con plotly e interprete los resultados.

Summary de los 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.

c

Estime un modelo de regresión lineal múltiple con las variables del punto anterior e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

Crearemos cuatro modelos lineales multiples

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)
Resumen R2 Modelos
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.

d

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.

e

Con el modelo identificado predecir el precio de un apartamento con 100 mt2, de estrato 4 y con parqueadero. ¿Si este apartamento lo están ofreciendo en 450 millones cual seria su opinión con base en el resultado del modelo considera que es una buena oferta?

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.

f

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)
Ofertas
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

4. Modelo pesos de arboles

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)

Exploración de datos

Primeros registros de los datos
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

Correlación de datos

##                  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

Segmentación de los datos (80% entrenamiento - 20% para test)

#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,]

Creación del modelo

#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
Modelo
Variable M1_Combinado
R_2 0.8252828

Verificación de residuos

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"

Predecir y comparación

#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)
Summary de los datos
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

Indicadores de error de la predicción

MAE = mean(abs(error_modelo1)) #Mean absolute error
RSME = sqrt(mean((error_modelo1)^2))
result = data.frame(MAE, RSME)
Indicadores de evaluación de la predicción
MAE RSME
7.245245 9.196602
Predicciones y errores (10 primeros registros)
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