3.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.

library(readxl)
library(ggplot2)
library(plotly)
library(leaflet)
library(readxl)
Datos_Vivienda <- read_excel("C:/Users/mjpenalozap/Desktop/Viviendas.xlsx")
View(Datos_Vivienda)

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?).

filtro=Datos_Vivienda$Zona=="Zona Norte"&Datos_Vivienda$precio_millon<500&Datos_Vivienda$Tipo=="Apartamento"&Datos_Vivienda$Area_contruida<300
Datos_filtro=Datos_Vivienda[filtro,]

table(Datos_filtro$Zona)
## 
## Zona Norte 
##       1077
table(Datos_filtro$Tipo)
## 
## Apartamento 
##        1077
summary(Datos_filtro$precio_millon)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    65.0   132.0   220.0   233.8   320.0   495.0       3
head(Datos_filtro,3)
## # A tibble: 3 x 12
##   Zona       piso  Estrato precio_millon Area_contruida parqueaderos Banos
##   <chr>      <chr>   <dbl>         <dbl>          <dbl> <chr>        <dbl>
## 1 Zona Norte 2           3           135             56 1                1
## 2 Zona Norte NA          3            78             54 2                1
## 3 Zona Norte NA          5           340            106 2                2
## # ... with 5 more variables: Habitaciones <dbl>, Tipo <chr>, Barrio <chr>,
## #   cordenada_longitud <dbl>, Cordenada_latitud <dbl>
leaflet()%>%addCircleMarkers(lng=Datos_filtro$cordenada_longitud,lat=Datos_filtro$Cordenada_latitud,radius = 0.05,color="green",label=Datos_filtro$precio_millon,opacity=0.9)%>%addTiles()

Los puntos en el mapa, en su gran mayoria se encuentran ubicados en la zona norte de la ciudad de Cali, Sin embargo, algunos puntos se alejan de esta zona e llegando a sectores de la zona sur. Esto puede suceder, porque exista información equivocada de la ubicación geografica de estos apartamentos dentro de la base 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.

Datos_filtro=na.omit(Datos_filtro)
Datos_filtro$Estrato=as.character(Datos_filtro$Estrato)
Datos_filtro$tiene_parqueadero=Datos_filtro$parqueaderos!="NA"

grafico1=ggplot(Datos_filtro,aes(x=Area_contruida,y=precio_millon,color=Estrato))+geom_point()+theme_bw()+geom_smooth(method = "lm")
ggplotly(grafico1)
## `geom_smooth()` using formula 'y ~ x'
grafico2=ggplot(Datos_filtro,aes(x=Area_contruida,y=precio_millon,color=tiene_parqueadero))+geom_point()+theme_bw()+geom_smooth(method = "lm")
ggplotly(grafico2)
## `geom_smooth()` using formula 'y ~ x'

Existe una relacion de tipo positiva fuerte entre el estrato y el precio de la vivienda, a mayor estrato el precio será mayor, asi mismo podriamos predecir que el numero de parqueaderos tambien influencia el precio de la vivienda,ya que a mayor catidad de parqueaderos aumentará el precio.

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

modeloviv=lm(precio_millon~Area_contruida+Estrato+tiene_parqueadero,data=Datos_filtro)
summary(modeloviv)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida + Estrato + tiene_parqueadero, 
##     data = Datos_filtro)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -242.442  -31.795   -0.944   27.529  223.738 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            49.03852    5.03387   9.742  < 2e-16 ***
## Area_contruida          1.04332    0.06037  17.281  < 2e-16 ***
## Estrato4               61.87913    4.84558  12.770  < 2e-16 ***
## Estrato5              146.16586    4.98649  29.312  < 2e-16 ***
## Estrato6              204.47149    9.27649  22.042  < 2e-16 ***
## tiene_parqueaderoTRUE  15.54122    3.98543   3.900 0.000102 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 54.8 on 1071 degrees of freedom
## Multiple R-squared:  0.7541, Adjusted R-squared:  0.7529 
## F-statistic: 656.9 on 5 and 1071 DF,  p-value: < 2.2e-16

El modelo de regresion lineal arroja un R2 ajustado de un 75,29% lo que indica que el 75,29% de los datos en la ecuacion de regresion son confiables, determinada por la extension de la varianza de la variable dependiente precio que se explica por las variables independientes de area construida, zona, estrato y si tiene o no parqueadero.

Teniendo en cuenta los datos arrojados, se puede concluir lo siguiente:

Intercepto: Teniendo en cuenta el estrato 3 como base, se puede concluir que el precio del lote es $49.038.520 millones de pesos, es decir cuando no hay nada construido, y no se tienen parqueaderos.

Coeficiente Area Construida (Area_construida): Por cada metro cuadrado construido el precio de la vivienda incrementa en $1.043.320 millones de pesos.

Coeficiente Estrato 4: Estar en estrato 4 incrementa el precio de la vivienda en $61.879.130 millones de pesos con respecto al estrato 3 (categoria base).

Coeficiente Estrato 5: Estar en estrato 5 incrementa el precio de la vivienda en $146.165.860 millones de pesos con respecto al estrato 3 (categoria base).

Coeficiente Estrato 6: Estar en estrato 5 incrementa el precio de la vivienda en $204.471.490 millones de pesos con respecto al estrato 3 (categoria base).

Coeficiente tiene_parqueadero: Que la vivienda tenga parqueadero propio, incrementa el precio de la misma en $15.541.220 millones de pesos.

Por lo que se puede concluir que los coeficientes si son estadisticamente significativos a medida que se incrementa el estrato respecto al estrato 3 como base categorica mayor es su precio.

D.Realice la validacion de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas solo realizar sugerencias de que se podria hacer).

Para esto consideraremos los siguientes gráficos para la interpretación:

Residual vs Fitted values Normal Q-Q Scale-Location Residuals vs Leverage

par(mfrow=c(2,2))
plot(modeloviv)

El grafico Residual vs Fitted values muestra que hay linealidad. En caso de que no existiera linealidad en los datos, se procede con el ajuste del modelo mediante una transformacion logaritmica.

El grafico Q-Q muestra que hay normalidad de los datos, con algunas pequeñas dispersiones en los extremos pero no afectan el modelo.

El grafico Scale-Location muestra que cumple los requisitos minimos pues esta cerca del uno (1) y su linea es recta

El grafico Residuals vs Leverage muestra que la mayoria de los datos no estan muy alejados del resto, aunque hay datos influyentes y atipicos, por lo tanto existe linealidad en los datos.

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?

preciomedio_estimadodemercado=predict(modeloviv,list(Area_contruida=100,Estrato="4",tiene_parqueadero=TRUE))
preciomedio_estimadodemercado
##        1 
## 230.7909

La oferta de un apartamento en estrato 4 a un precio de 450 millones, no es una buena oferta, ya que el precio de un apartamento con 100 mt2, de estrato 4 y que cuenta con un numero de parqueaderos entre 1 y 4, oscila entre 232 y 321 millones. Podriamos decir que ese precio es elevado.

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.

precio_modelo=modeloviv$fitted.values
precio_real=Datos_filtro$precio_millon
area=Datos_filtro$Area_contruida
tiene_p=Datos_filtro$tiene_parqueadero
estrato=Datos_filtro$Estrato

potencial=precio_modelo-precio_real
target=potencial>0&precio_real>=100&precio_real<=400&area>=100&estrato=="4"&tiene_p==TRUE

table(target)
## target
## FALSE  TRUE 
##  1072     5

El resultado muestra que hay 5 opciones potenciales de apartamentos, que se ajustan con los requerimientos del cliente interesado.

A continuacion se mostraran en el mapa en que barrios de la zona norte de la ciudad de Cali se encuentran dichos predios

Datos_filtro$potencial=round(potencial,1)

Datos_recomendados=Datos_filtro[target,]
Datos_recomendados
## # A tibble: 5 x 14
##   Zona       piso  Estrato precio_millon Area_contruida parqueaderos Banos
##   <chr>      <chr> <chr>           <dbl>          <dbl> <chr>        <dbl>
## 1 Zona Norte 4     4                 185           104  1                3
## 2 Zona Norte 6     4                 270           152  1                3
## 3 Zona Norte 3     4                 300           287  1                3
## 4 Zona Norte 4     4                 190           104. 1                3
## 5 Zona Norte NA    4                 280           173  2                3
## # ... with 7 more variables: Habitaciones <dbl>, Tipo <chr>, Barrio <chr>,
## #   cordenada_longitud <dbl>, Cordenada_latitud <dbl>, tiene_parqueadero <lgl>,
## #   potencial <dbl>
leaflet() %>% addCircleMarkers(lng = Datos_recomendados$cordenada_longitud,lat = Datos_recomendados$Cordenada_latitud,radius = 0.05,color = "blue",label  = paste("Potencial=",Datos_recomendados$potencial,";","Precio venta=",Datos_recomendados$precio_millon),opacity = 0.9)%>% addTiles()

Como podemos obervar en la tabla 5X14, donde se detalla el estrato, precio, area construida y si tienen o no parqueadero, entre otras variables y en el mapa se hace rastreo de cada una de las viviendas (apartamentos) potenciales para el comprador. Estas estan distribuidas en los barrios: San Vicente, Versalles, Campina y Santa Monica, con la ubicacion de los barrios en el mapa nos podemos dar cuenta que no hay errores en los registros y que todos coinciden con lo esperado en el modelo ya que se encuentran en la zona norte de la ciudad de Cali.

Datos_filtro$Estrato=as.character(Datos_filtro$Estrato)
Datos_filtro$tiene_parqueadero=Datos_filtro$parqueaderos!="NA"

mod2=lm(log(precio_millon)~Area_contruida+Estrato+tiene_parqueadero, data=Datos_filtro)
summary(mod2)
## 
## Call:
## lm(formula = log(precio_millon) ~ Area_contruida + Estrato + 
##     tiene_parqueadero, data = Datos_filtro)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.88986 -0.14592  0.01888  0.16240  1.02666 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           4.4664295  0.0206619  216.17  < 2e-16 ***
## Area_contruida        0.0040291  0.0002478   16.26  < 2e-16 ***
## Estrato4              0.4225632  0.0198891   21.25  < 2e-16 ***
## Estrato5              0.7603609  0.0204675   37.15  < 2e-16 ***
## Estrato6              0.9200525  0.0380761   24.16  < 2e-16 ***
## tiene_parqueaderoTRUE 0.0966817  0.0163585    5.91 4.59e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2249 on 1071 degrees of freedom
## Multiple R-squared:  0.8006, Adjusted R-squared:  0.7997 
## F-statistic:   860 on 5 and 1071 DF,  p-value: < 2.2e-16

se observa que el R2 ajustado tiene el 79,97% aun mejor que el modelo de regresion lineal que tenia un 75,29%, sin embargo al adentrarnos al analisis de los coeficientes no tienen mucho sentido, pues considerando que la base es el estrato 3 a simple vista no se alcanza a notar gran diferencia entre un estrato a otro. Para poder corroborar estos coeficientes, se procede a eliminar el exponencial para poder tener una mejor interpretacion de los coeficientes.

Intercepto_Estrato3=exp(4.4664295)
Intercepto_Estrato3
## [1] 87.04537
Coeficiente_Area_construida=exp(0.0040291) 
Coeficiente_Area_construida
## [1] 1.004037
Coeficiente_Estrato4=exp(0.4225632)
Coeficiente_Estrato4
## [1] 1.525868
Coeficiente_Estrato5=exp(0.7603609)
Coeficiente_Estrato5
## [1] 2.139048
Coeficiente_Estrato6=exp(0.9200525)
Coeficiente_Estrato6
## [1] 2.509422
Coeficiente_Tiene_parqueadero=exp(0.0966817)
Coeficiente_Tiene_parqueadero
## [1] 1.10151

Como se puede observar no hace mucho sentido que el salto de un estrato 3 al estrato 6 de una vivienda (apartamento) la diferencia sea por $2.509.422 pesos por encima de la base (estrato 3), asi mismo con los demas coeficientes, con esto se comprueba que no es necesario, ni relevante ajustar el modelo a una transformacion logaritmica.

Por lo anterior, debe considerarse el modelo de regresion lineal como la mejor base, pese que su R2 ajustado es menor pero sus coeficientes tienen mejor relacion al momento de hacer el analisis.

  1. 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. Nota: los datos se pueden cargar con el siguiente código:
library(readxl)
library('PerformanceAnalytics')
library(dplyr)
library(GGally)
library(lmtest)


Datos_arboles <- read_excel("C:/Users/mjpenalozap/Downloads/data arboles.xlsx", col_types = c("text", "text", "numeric", 
        "numeric", "numeric"))

head(Datos_arboles, 10)
## # A tibble: 10 x 5
##    finca   mg          peso diametro altura
##    <chr>   <chr>      <dbl>    <dbl>  <dbl>
##  1 FINCA_1 GENOTIPO_1 13.7       4.7    5  
##  2 FINCA_1 GENOTIPO_1 14.6       5.3    5.6
##  3 FINCA_1 GENOTIPO_1 15.9       4.8    5.8
##  4 FINCA_1 GENOTIPO_1  8.99      3.2    4.3
##  5 FINCA_1 GENOTIPO_1  6.99      2.2    3.3
##  6 FINCA_1 GENOTIPO_2 19.3       6.3    7.9
##  7 FINCA_1 GENOTIPO_2 21.4       6.6    8.3
##  8 FINCA_1 GENOTIPO_2 13.8       5.3    7.3
##  9 FINCA_1 GENOTIPO_2 11.9       4.9    6.7
## 10 FINCA_1 GENOTIPO_2 16.6       5.9    7.1
ggpairs(select_if(Datos_arboles, is.numeric), lower = list(continuous = "smooth"),diag = list(continuous = "barDiag"), axisLabels = "none") 
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

modelacion= sample(1:90, size=72)
modelacion
##  [1] 17 51 27  6 26 67 48 63 32  8 16 19 44 36 82 89 29 55 38 66 90 49 62  4 70
## [26] 59 56 60 28 75 39 10 86  2 13 69 31 76 42 52 80 23 43 85 21 68 81 37 47 40
## [51] 35 15 78 22 46 25  9 64 84 41 54 83  3 50 33 87 71 57 65  5 77 72
modelo1=lm(peso ~ altura, data= Datos_arboles)
summary(modelo1)
## 
## Call:
## lm(formula = peso ~ altura, data = Datos_arboles)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -8.228 -1.969  0.572  2.377 15.106 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -7.0456     1.7046  -4.133 8.14e-05 ***
## altura        3.8906     0.2481  15.684  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.211 on 88 degrees of freedom
## Multiple R-squared:  0.7365, Adjusted R-squared:  0.7335 
## F-statistic:   246 on 1 and 88 DF,  p-value: < 2.2e-16

Modelo RLM:

cor(Datos_arboles[3:5])
##               peso diametro    altura
## peso     1.0000000 0.908123 0.8582009
## diametro 0.9081230 1.000000 0.9355360
## altura   0.8582009 0.935536 1.0000000
plot(Datos_arboles[3:5])

modelo2 = lm( peso ~ altura + diametro, data = Datos_arboles)
summary(modelo2)
## 
## Call:
## lm(formula = peso ~ altura + diametro, data = Datos_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 ***
## altura        0.3132     0.5751   0.544    0.587    
## diametro      4.7395     0.7128   6.649 2.49e-09 ***
## ---
## 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

Validacion Cruzada:

Se utilizara el 80% de los datos para modelar y el 20% para validar. Conjunto de 90 datos (80%(72) para modelar y 20%(18) para validar)

Validacion 80%:

muestra= sample(1:90, size=72)
muestra
##  [1] 81 39 19 64 85 34 57 24 15 13  7 53 29 45 49 48  9 63 62 17 47  5 27 66 35
## [26] 31 74 79 75 36 44 55 12 70  6 54 86 56 50 25 33 16 32 80 46 43 76 58 67 60
## [51] 72  8 20 87 42 73 78 40  2  4 68 11  3 38 23 89 41 90 59 51 88 61
arboles_modelo = Datos_arboles[muestra,]
head(arboles_modelo)
## # A tibble: 6 x 5
##   finca   mg          peso diametro altura
##   <chr>   <chr>      <dbl>    <dbl>  <dbl>
## 1 FINCA_3 GENOTIPO_1  14.0      4.2    4.7
## 2 FINCA_2 GENOTIPO_1  20.8      6.2    6.8
## 3 FINCA_1 GENOTIPO_2  12        4.9    7  
## 4 FINCA_3 GENOTIPO_2  21.8      6.8    7.3
## 5 FINCA_3 GENOTIPO_1  13.3      3.5    5  
## 6 FINCA_2 GENOTIPO_2  30.8      7.9   10.9

Validacion 20%:

validacion_arboles=Datos_arboles[muestra,]
head(validacion_arboles)
## # A tibble: 6 x 5
##   finca   mg          peso diametro altura
##   <chr>   <chr>      <dbl>    <dbl>  <dbl>
## 1 FINCA_3 GENOTIPO_1  14.0      4.2    4.7
## 2 FINCA_2 GENOTIPO_1  20.8      6.2    6.8
## 3 FINCA_1 GENOTIPO_2  12        4.9    7  
## 4 FINCA_3 GENOTIPO_2  21.8      6.8    7.3
## 5 FINCA_3 GENOTIPO_1  13.3      3.5    5  
## 6 FINCA_2 GENOTIPO_2  30.8      7.9   10.9

Modelo de Regresión Lineal:

modelo_arboles=lm(peso~diametro + altura, data = arboles_modelo)

summary(modelo_arboles)
## 
## Call:
## lm(formula = peso ~ diametro + altura, data = arboles_modelo)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.2240 -2.4370 -0.1444  2.0352 11.8940 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -8.8440     1.6576  -5.335 1.15e-06 ***
## diametro      4.6457     0.7785   5.968 9.30e-08 ***
## altura        0.3485     0.6288   0.554    0.581    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.539 on 69 degrees of freedom
## Multiple R-squared:  0.8179, Adjusted R-squared:  0.8126 
## F-statistic:   155 on 2 and 69 DF,  p-value: < 2.2e-16

Modelo estimado de regresión lineal multiple:

Como vemos β0 y β1 son estadisticamente significativos (p−value<0.00), con un R2=0.828. Porlo tanto, el modelo de regresión lineal y=β0+β1∗x seria:

Peso=−9.0203+5.1026∗diametro

modelo_arboles = lm(arboles_modelo$peso~arboles_modelo$diametro, data=arboles_modelo)

Peso_predicho = predict(modelo_arboles,list(validacion_arboles$diametro))

Peso_original = arboles_modelo$peso

Diferencia_peso = Peso_original-Peso_predicho

Tabla_Constraste = data.frame(Peso_original,Peso_predicho, Diferencia_peso)

head(Tabla_Constraste)
##   Peso_original Peso_predicho Diferencia_peso
## 1         14.03     12.476373        1.553627
## 2         20.75     22.569965       -1.819965
## 3         12.00     16.009130       -4.009130
## 4         21.80     25.598043       -3.798043
## 5         13.34      8.943615        4.396385
## 6         30.83     31.149519       -0.319519
summary(modelo_arboles$residuals)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -6.2927 -2.6438 -0.2595  0.0000  2.0547 12.1784
t.test(modelo_arboles$residuals, mu = 0)
## 
##  One Sample t-test
## 
## data:  modelo_arboles$residuals
## t = 6.3819e-16, df = 71, p-value = 1
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  -0.8217142  0.8217142
## sample estimates:
##    mean of x 
## 2.630003e-16
lmtest::gqtest(modelo_arboles)
## 
##  Goldfeld-Quandt test
## 
## data:  modelo_arboles
## GQ = 0.4593, df1 = 34, df2 = 34, p-value = 0.9869
## alternative hypothesis: variance increases from segment 1 to 2
shapiro.test(modelo_arboles$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_arboles$residuals
## W = 0.94476, p-value = 0.003308
lmtest::dwtest(modelo_arboles)
## 
##  Durbin-Watson test
## 
## data:  modelo_arboles
## DW = 2.2606, p-value = 0.8674
## alternative hypothesis: true autocorrelation is greater than 0
modelo_predict = predict(modelo_arboles, list(diametro=validacion_arboles$diametro, altura=validacion_arboles$altura))

modelo_predict
##         1         2         3         4         5         6         7         8 
## 12.476373 22.569965 16.009130 25.598043  8.943615 31.149519 20.551247 14.495091 
##         9        10        11        12        13        14        15        16 
##  9.952975  2.382780 24.588684 35.186956 19.037208 18.532528 23.579325 24.084004 
##        17        18        19        20        21        22        23        24 
## 16.009130 25.093363 21.560606 23.579325 17.523169  2.382780 12.981052 21.560606 
##        25        26        27        28        29        30        31        32 
## 27.112082 20.551247 25.093363 18.027849 21.055926  9.952975 30.644839 35.691636 
##        33        34        35        36        37        38        39        40 
## 14.999771 17.523169 23.074645 32.663558 11.971693 15.504451 21.560606  8.943615 
##        41        42        43        44        45        46        47        48 
## 27.112082 24.084004 21.055926 13.485732 21.560606 31.149519 13.485732 24.588684 
##        49        50        51        52        53        54        55        56 
## 21.560606 16.513810 25.093363 18.027849 14.495091 10.962334 26.102723 25.598043 
##        57        58        59        60        61        62        63        64 
## 14.999771  3.896819 18.027849  7.429576 23.579325  3.896819 15.504451 17.018489 
##        65        66        67        68        69        70        71        72 
## 19.541888 18.532528 24.588684 13.990412 25.598043 27.616762 16.513810 14.999771
validacion= validacion_arboles$peso


error_peso= validacion - modelo_predict

resultado_peso=data.frame(validacion, modelo_predict, error_peso)
resultado_peso
##    validacion modelo_predict  error_peso
## 1       14.03      12.476373  1.55362725
## 2       20.75      22.569965 -1.81996532
## 3       12.00      16.009130 -4.00913015
## 4       21.80      25.598043 -3.79804309
## 5       13.34       8.943615  4.39638465
## 6       30.83      31.149519 -0.31951900
## 7       17.71      20.551247 -2.84124681
## 8       13.61      14.495091 -0.88509127
## 9       11.04       9.952975  1.08702539
## 10       7.47       2.382780  5.08721982
## 11      21.44      24.588684 -3.14868384
## 12      45.41      35.186956 10.22304397
## 13      14.44      19.037208 -4.59720792
## 14      16.94      18.532528 -1.59252829
## 15      20.24      23.579325 -3.33932458
## 16      22.01      24.084004 -2.07400421
## 17      11.88      16.009130 -4.12913015
## 18      22.82      25.093363 -2.27336346
## 19      24.47      21.560606  2.90939394
## 20      20.06      23.579325 -3.51932458
## 21      14.99      17.523169 -2.53316904
## 22       6.99       2.382780  4.60721982
## 23       9.89      12.981052 -3.09105238
## 24      22.85      21.560606  1.28939394
## 25      26.38      27.112082 -0.73208198
## 26      16.24      20.551247 -4.31124681
## 27      31.16      25.093363  6.06663654
## 28      18.67      18.027849  0.64215133
## 29      23.35      21.055926  2.29407356
## 30       9.97       9.952975  0.01702539
## 31      32.69      30.644839  2.04516062
## 32      47.87      35.691636 12.17836434
## 33      15.83      14.999771  0.83022911
## 34      17.26      17.523169 -0.26316904
## 35      19.34      23.074645 -3.73464495
## 36      37.74      32.663558  5.07644211
## 37      15.40      11.971693  3.42830688
## 38      12.95      15.504451 -2.55445052
## 39      20.06      21.560606 -1.50060606
## 40       9.93       8.943615  0.98638465
## 41      23.82      27.112082 -3.29208198
## 42      20.41      24.084004 -3.67400421
## 43      16.08      21.055926 -4.97592644
## 44      13.23      13.485732 -0.25573201
## 45      19.02      21.560606 -2.54060606
## 46      32.44      31.149519  1.29048100
## 47      14.52      13.485732  1.03426799
## 48      22.75      24.588684 -1.83868384
## 49      23.14      21.560606  1.57939394
## 50      14.03      16.513810 -2.48380978
## 51      27.87      25.093363  2.77663654
## 52      13.81      18.027849 -4.21784867
## 53      10.69      14.495091 -3.80509127
## 54      14.91      10.962334  3.94766613
## 55      19.81      26.102723 -6.29272272
## 56      27.45      25.598043  1.85195691
## 57      16.19      14.999771  1.19022911
## 58       5.98       3.896819  2.08318093
## 59      14.58      18.027849 -3.44784867
## 60       8.99       7.429576  1.56042353
## 61      27.33      23.579325  3.75067542
## 62       7.03       3.896819  3.13318093
## 63      15.88      15.504451  0.37554948
## 64      14.75      17.018489 -2.26848941
## 65      18.16      19.541888 -1.38188755
## 66      21.12      18.532528  2.58747171
## 67      25.24      24.588684  0.65131616
## 68      18.49      13.990412  4.49958836
## 69      23.02      25.598043 -2.57804309
## 70      30.51      27.616762  2.89323839
## 71      17.73      16.513810  1.21619022
## 72      13.98      14.999771 -1.01977089