Antonio jose Fajardo Macias
# Carga de Datos
library(readxl)
datos_Ecopetrol = read_excel("C:/Ant/MCD/S2_M7/bdEcopetrol.xlsx")
datos_Ecopetrol$Precio_Accion = as.numeric(as.character(trimws(datos_Ecopetrol$Precio_Accion)))
datos_Ecopetrol$Precio_Petroleo = as.numeric(as.character(trimws(datos_Ecopetrol$Precio_Petroleo)))
attach(datos_Ecopetrol)
head(datos_Ecopetrol)
Fecha | Precio_Accion | Precio_Petroleo |
---|---|---|
dic 14-15 | 1090 | 35.62 |
dic 15-15 | 1170 | 36.31 |
dic 16-15 | 1160 | 37.35 |
dic 18-15 | 1230 | 34.95 |
dic 21-15 | 1155 | 34.53 |
dic 22-15 | 1165 | 35.81 |
ID=1:lengths(datos_Ecopetrol)
datos=data.frame(ID,datos_Ecopetrol)
plot(Precio_Petroleo,Precio_Accion, xlim = c(30,40), ylim = c(900,1500), las=1, pch=19, col="#b0394a")
#Esta funcion Genera los indicadores
Generar_Indicadores_Cuantitativa = function(pdataframe, pColumna){
require(ggplot2)
require(ggpubr)
xsum <- summary(pdataframe[, pColumna])
# xsum
g1 <- ggplot2::ggplot(data = pdataframe, mapping = aes(x = pdataframe[, pColumna])) + geom_histogram(bins = 40) + labs(x = pColumna, y = "Frecuencia")
g2 <- ggplot2::ggplot(data = pdataframe, mapping = aes(x = pdataframe[, pColumna])) + geom_boxplot() + labs(x = pColumna)
xgraphs <- ggarrange(xsum,g1,g2,ncol = 3, nrow = 1)
retObj <- list ("Resumen" = xsum, "Graficos" = xgraphs)
return(retObj)
}
Generar_Indicadores_Cuantitativa(datos, "Precio_Accion")
## $Resumen
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 955 1066 1120 1108 1164 1230
##
## $Graficos
Generar_Indicadores_Cuantitativa(datos, "Precio_Petroleo")
## $Resumen
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 30.44 34.63 36.05 35.53 36.98 37.87
##
## $Graficos
cor(Precio_Petroleo, Precio_Accion )
## [1] 0.7074373
modeloRL = lm(Precio_Accion~Precio_Petroleo)
summary(modeloRL)
##
## Call:
## lm(formula = Precio_Accion ~ Precio_Petroleo)
##
## 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
## Precio_Petroleo 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
plot(Precio_Petroleo, Precio_Accion , xlab='Pr. Petroleo', ylab='Pr. Accion')
abline(modeloRL)
Modelo de Regresion Lineal Planteado Y = B0 + B1X Y = 178 +
26.192(X)
Donde Y= Precio de la Accion de Ecopetrol X= Valor del Barril de petroleo El Modelo predice que cada dolar que sube el barril de petroleo el valor de la accion de Ecopetrol sube 26 Dolares
El modelo de regresion lineal con la informacion ingresada genera un R2 de 0.5 lo cual indica que el modelo puede explicar el 50% de los casos
H0 : El precio del petroleo no es significativo para estimar el precio de la accion de Ecopetrol H1 : El precio del petroleo si es significativo para estimar el precio de la accion de Ecopetrol
El P value calculado es 0.001024, al ser inferior a 0.05, indica que la hipotesis nula (H0) no es valida, por consiguiente la hipotesis H1, es valida
El Modelo predice que cada dolar que sube el barril de petroleo el valor de la accion de Ecopetrol sube 26 Dolares Basado en el modelo, si el precio del petroleo es cero, la accion de ecopetrol costaria US $ 178
par(mfrow=c(2,2))
plot(modeloRL)
#Revisar que la suma de los residuos sea cero
mean(modeloRL$residuals)
## [1] -5.527407e-15
#
El grafico residuals vs Fitted no muestra una clara dispersion de los dato, esto indica que los datos no son completamente lineales Se puede evidenciar en el grafico Normal Q-Q donde los graficos no siempre siguen la recta, indicando que estos no cumple una distribucion normal
Se cumple que la media de los residuos es muy cercana a cero
modelo= lm(log(Precio_Accion)~log(Precio_Petroleo))
summary(modelo)
##
## Call:
## lm(formula = log(Precio_Accion) ~ log(Precio_Petroleo))
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.05435 -0.03615 -0.01306 0.02928 0.11927
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.9229 0.7072 5.547 4.42e-05 ***
## log(Precio_Petroleo) 0.8646 0.1981 4.364 0.000482 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05048 on 16 degrees of freedom
## Multiple R-squared: 0.5434, Adjusted R-squared: 0.5149
## F-statistic: 19.04 on 1 and 16 DF, p-value: 0.0004824
par(mfrow=c(2,2))
plot(modelo)
Al aplicar logaritmo natural para tratar de normalizar los datos podemos
observar una mejora en el R2 al pasar del 50% al 54%
Modelo de Regresion Lineal Planteado Y = B0 + B1X log(Y) = 3.9299 + log(0.86(X))
Donde Y= Precio de la Accion de Ecopetrol X= Valor del Barril de petroleo Se encuentra que hay una relacion positiva entre el precio del barril del petroleo y la accion de Ecopetrol, pero no es una relacion lineal.
#Limieza de los dataset utilizados
rm(datos)
rm(datos_ecopetrol)
rm(model_ep)
rm(model_ep_log)
rm(modelo)
rm(modelRL)
# Carga de Datos
library(readxl)
datos = read_excel("C:/Ant/MCD/S2_M7/inflacion_smlv.xlsx")
attach(datos)
#se agrega columna de variacion del smlv
datos$VarSMLM <-c(NA,diff(datos$smlm)/head(smlm,-1)*100)
newdata <- datos[-c(1), ]
datos <- newdata
head(datos)
año | inflacion | smlm | VarSMLM |
---|---|---|---|
2000 | 8.75 | 260100 | 9.997463 |
2001 | 7.65 | 286000 | 9.957709 |
2002 | 6.99 | 309000 | 8.041958 |
2003 | 6.49 | 332000 | 7.443366 |
2004 | 5.50 | 358000 | 7.831325 |
2005 | 4.85 | 381500 | 6.564246 |
attach(datos)
ID=1:lengths(datos)
datos=data.frame(ID,datos)
cor(inflacion, VarSMLM )
## [1] 0.6257148
modeloRL = lm(VarSMLM~inflacion)
summary(modeloRL)
##
## Call:
## lm(formula = VarSMLM ~ inflacion)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.8423 -1.2470 0.1983 0.9290 2.9818
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.5353 1.0613 3.331 0.00495 **
## inflacion 0.5768 0.1922 3.001 0.00953 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.608 on 14 degrees of freedom
## Multiple R-squared: 0.3915, Adjusted R-squared: 0.3481
## F-statistic: 9.008 on 1 and 14 DF, p-value: 0.009526
plot(inflacion,VarSMLM, xlim = c(0,12), ylim = c(1,20), las=1, pch=19, col="#b0394a")
abline(modeloRL)
require(ggplot2)
require(plotly)
g1 = ggplot(data = datos, aes(y = VarSMLM, x = inflacion)) + geom_point() + geom_smooth()
ggplotly(g1)
Modelo de Regresion Lineal Planteado Y = B0 + B1X Y = 3.5353 + 0.5768(X)
Donde Y= Salario Minimo Legal Mensual X= Inflacion El Modelo predice que cada punto porcentual que sube la inflacion aumenta el porcentaje del salario minimo en 0.5768
plot(modeloRL)
Supuesto 1: Relación lineal El grafico residuals vs Fitted muestra dispersion de los datos, esto indica que los datos se pueden considera lineales
Supuesto 2: Independencia
Supuesto 3: Homoscedasticidad
Supuesto 4: Normalidad Se puede evidenciar en el grafico Normal Q-Q donde los graficos siguen la recta, indicando que estos cumplen una distribucion normal
El modelo de regresion lineal con la informacion ingresada genera un R2 de 0.3915 lo cual indica que el modelo puede explicar el 40% de los casos
H0 : La inflacion no es significativq para estimar el porcentaje de aumento del salario minimo H1 : La inflacion si es significativq para estimar el porcentaje de aumento del salario minimo
El P value calculado es 0.009526, al ser inferior a 0.05, indica que la hipotesis nula (H0) no es valida, por consiguiente la hipotesis H1, es valida
La correlacion entre la inflacion y el aumento del salario minimo es 0.6257148, lo que indica una correlacion que no es fuerte entre estas dos variables
Donde Y= Salario Minimo Legal Mensual X= Inflacion El Modelo predice que cada punto porcentual que sube la inflacion aumenta el porcentaje del salario minimo en 0.5768 Cuando la inflacion es cero el salario minimo deberia subir 3.5353 %
plot(modeloRL)
El modelo propuesto no es conveniente para calcular el SMLM puesto que la correlacion de las variables no es directa, es de 0.62, el r2 de 0.39 no ayuda para soportar el modelo. podriamos inferir que pueden existir otras variables con mayor peso en la determinacion del salario minimo, como factores sociales y politicos.
# Carga de Datos
library(readxl)
datos = read_excel("C:/Ant/MCD/S2_M7/Datos_Vivienda.xlsx")
attach(datos)
head(datos)
Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud |
---|---|---|---|---|---|---|---|---|---|---|---|
Zona Sur | 2 | 6 | 880 | 237 | 2 | 5 | 4 | Casa | pance | -76.46300 | 3.43000 |
Zona Oeste | 2 | 4 | 1200 | 800 | 3 | 6 | 7 | Casa | miraflores | -76.46400 | 3.42800 |
Zona Sur | 3 | 5 | 250 | 86 | NA | 2 | 3 | Apartamento | multicentro | -76.46400 | 3.42900 |
Zona Sur | NA | 6 | 1280 | 346 | 4 | 6 | 5 | Apartamento | ciudad jardín | -76.46400 | 3.43300 |
Zona Sur | 2 | 6 | 1300 | 600 | 4 | 7 | 5 | Casa | pance | -76.46438 | 3.43463 |
Zona Sur | 3 | 6 | 513 | 160 | 2 | 4 | 4 | Casa | pance | -76.46438 | 3.43463 |
ID=1:lengths(datos)
datos=data.frame(ID,datos)
Muestra1 <- subset(datos, Zona == "Zona Norte" & precio_millon < 500 & Area_contruida < 300,select=ID:Cordenada_latitud)
head(Muestra1, 3)
ID | Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 31 | Zona Norte | 2 | 3 | 135 | 56 | 1 | 1 | 3 | Apartamento | torres de comfandi | -76.46745 | 3.40763 |
58 | 58 | Zona Norte | NA | 5 | 400 | 212 | NA | 2 | 4 | Casa | santa mónica residencial | -76.47300 | 3.41800 |
71 | 71 | Zona Norte | NA | 3 | 78 | 54 | 2 | 1 | 3 | Apartamento | chiminangos | -76.47820 | 3.44898 |
library(tidyverse)
library(sf)
library(mapview)
mapview(Muestra1, xcol = 12, ycol = 13, crs = 4269, grid = FALSE)
Nota : Se asume que los parqueaderos marcados como n/a es porque no cuentan con parqueadero
Muestra1$Parqueadero <- ifelse(Muestra1$parqueaderos != "NA", 0, 1)
Muestra2 <- select(Muestra1, precio_millon,Area_contruida,Parqueadero,Estrato)
summary(Muestra2)
## precio_millon Area_contruida Parqueadero Estrato
## Min. : 65.0 Min. : 30.0 Min. :0.0000 Min. :3.000
## 1st Qu.:145.0 1st Qu.: 64.0 1st Qu.:0.0000 1st Qu.:3.000
## Median :240.0 Median : 88.0 Median :0.0000 Median :4.000
## Mean :247.2 Mean :106.5 Mean :0.3419 Mean :4.084
## 3rd Qu.:335.0 3rd Qu.:125.0 3rd Qu.:1.0000 3rd Qu.:5.000
## Max. :495.0 Max. :297.0 Max. :1.0000 Max. :6.000
require(table1)
table1(~precio_millon+Area_contruida/Estrato + Parqueadero, data=Muestra2)
Overall (N=1483) |
|
---|---|
precio_millon | |
Mean (SD) | 247 (111) |
Median [Min, Max] | 240 [65.0, 495] |
Area_contruida | |
Mean (SD) | 107 (56.3) |
Median [Min, Max] | 88.0 [30.0, 297] |
Estrato | |
Mean (SD) | 4.08 (0.935) |
Median [Min, Max] | 4.00 [3.00, 6.00] |
Parqueadero | |
Mean (SD) | 0.342 (0.474) |
Median [Min, Max] | 0 [0, 1.00] |
library(psych)
corr.test(Muestra2,
use = "pairwise",
method = "pearson",
adjust = "none")
## Call:corr.test(x = Muestra2, use = "pairwise", method = "pearson",
## adjust = "none")
## Correlation matrix
## precio_millon Area_contruida Parqueadero Estrato
## precio_millon 1.00 0.62 -0.34 0.73
## Area_contruida 0.62 1.00 -0.12 0.28
## Parqueadero -0.34 -0.12 1.00 -0.40
## Estrato 0.73 0.28 -0.40 1.00
## Sample Size
## [1] 1483
## Probability values (Entries above the diagonal are adjusted for multiple tests.)
## precio_millon Area_contruida Parqueadero Estrato
## precio_millon 0 0 0 0
## Area_contruida 0 0 0 0
## Parqueadero 0 0 0 0
## Estrato 0 0 0 0
##
## To see confidence intervals of the correlations, print with the short=FALSE option
library(PerformanceAnalytics)
chart.Correlation(Muestra2,
method="pearson",
histogram=TRUE,
pch=16)
Analisis de la corelacion Tanto de la matrix de corelacion como del diagrama de corelacion podemos concluir que la relacion mas fuerte y positiva es entre el area construida y el precio, tambien hay una relacion significativa positiva entre el estrato y el precio.
Muestra2$Parqueadero = as.numeric(Muestra2$Parqueadero)
Muestra2[is.na(Muestra2)] <- 0
model_vivienda = lm(precio_millon~Area_contruida+Estrato+Parqueadero,data = Muestra2)
summary(model_vivienda)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + Estrato + Parqueadero,
## data = Muestra2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -210.715 -36.146 -5.293 26.811 296.601
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -124.71852 7.98184 -15.625 < 2e-16 ***
## Area_contruida 0.89644 0.02803 31.976 < 2e-16 ***
## Estrato 68.67890 1.82356 37.662 < 2e-16 ***
## Parqueadero -11.70523 3.47803 -3.365 0.000784 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 58.33 on 1479 degrees of freedom
## Multiple R-squared: 0.7229, Adjusted R-squared: 0.7224
## F-statistic: 1286 on 3 and 1479 DF, p-value: < 2.2e-16
Según la regresión estimada tenemos los siguientes parámetros:
β Area_contruida: 0.89644
β Estrato: 68.67890 β parqueaderos: -11.70523 β0 = -124.71852
Teniendo como ecuación del modelo:
precio_millon = (0.89644 * Area_contruida) + (68.67890 * Estrato) + (-11.70523 * parqueaderos) -124.71852
plot(model_vivienda)
library(MASS)
shapiro.test(studres(model_vivienda))
##
## Shapiro-Wilk normality test
##
## data: studres(model_vivienda)
## W = 0.97871, p-value = 5.179e-14
mean(model_vivienda$residuals)
## [1] -3.271457e-16
El grafico de normalidad no muestra los puntos bien esparcidos, tambien el grafico QQ, no muestra una linea recta . Se podrian aplicar transformaciones para tratar de mejorar estos indicadores
predict(model_vivienda, list(Area_contruida=100,Estrato=4,Parqueadero=1),interval = "confidence")
## fit lwr upr
## 1 227.9358 222.6366 233.2351
Acorde con la prediccion el precio promedio de un apartamento con las caracteristicas indicadas deberia estar en 222 mlns de pesos y maximo de 233. 450 millones es un precio excesivo. seria bueno revisar la oferta para determinar si hay factores adiciones que hacen que el precio este mas elevado que el promedio.
Muestra3 <- datos
Muestra3$Parqueadero <- ifelse(Muestra3$parqueaderos != "NA", 0, 1)
Muestra2 <- subset(Muestra3, Zona == "Zona Norte" & precio_millon < 400 & Area_contruida > 100 & Estrato==4 & Parqueadero==1,select=ID:Cordenada_latitud)
head(Muestra2, 5)
ID | Zona | piso | Estrato | precio_millon | Area_contruida | parqueaderos | Banos | Habitaciones | Tipo | Barrio | cordenada_longitud | Cordenada_latitud | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
364 | 364 | Zona Norte | 3 | 4 | 160 | 120 | NA | 2 | 3 | Casa | villa del sol | -76.49404 | 3.48257 |
406 | 406 | Zona Norte | 3 | 4 | 170 | 120 | NA | 2 | 3 | Casa | calima | -76.49519 | 3.48211 |
410 | 410 | Zona Norte | 3 | 4 | 160 | 120 | NA | 2 | 3 | Casa | villa del sol | -76.49523 | 3.48207 |
411 | 411 | Zona Norte | 3 | 4 | 170 | 120 | NA | 2 | 3 | Casa | villa del sol | -76.49527 | 3.48108 |
420 | 420 | Zona Norte | 3 | 4 | 160 | 120 | NA | 2 | 3 | Casa | villa del sol | -76.49545 | 3.48172 |
library(tidyverse)
library(sf)
library(mapview)
mapview(Muestra2, xcol = 12, ycol = 13, crs = 4269, grid = FALSE)
Al aplicar un filtro con los criterios podemos desplegar las ofertas disponibles que cumplen los criterios. se encontraron en total 36 ofertas.
# Carga de Datos
library(readxl)
datos_arbolesTemp = read_excel("C:/Ant/MCD/S2_M7/data arboles.xlsx")
datos_arbolesTemp$finca <- ifelse(datos_arbolesTemp$finca == "FINCA_1", 1,datos_arbolesTemp$finca)
datos_arbolesTemp$finca <- ifelse(datos_arbolesTemp$finca == "FINCA_2", 2,datos_arbolesTemp$finca)
datos_arbolesTemp$finca <- ifelse(datos_arbolesTemp$finca == "FINCA_3", 3,datos_arbolesTemp$finca)
datos_arbolesTemp$mg <- ifelse(datos_arbolesTemp$mg == "GENOTIPO_1", 1,datos_arbolesTemp$mg)
datos_arbolesTemp$mg <- ifelse(datos_arbolesTemp$mg == "GENOTIPO_2", 2,datos_arbolesTemp$mg)
datos_arbolesTemp$altura = as.numeric(datos_arbolesTemp$altura)
datos_arbolesTemp$peso = as.numeric(datos_arbolesTemp$peso)
datos_arbolesTemp$diametro = as.numeric(datos_arbolesTemp$diametro)
datos_arbolesTemp$finca = as.numeric(datos_arbolesTemp$finca)
datos_arbolesTemp$mg = as.numeric(datos_arbolesTemp$mg)
summary(datos_arbolesTemp)
## finca mg peso diametro altura
## Min. :1 Min. :1.0 Min. : 5.98 Min. :2.200 Min. : 3.300
## 1st Qu.:1 1st Qu.:1.0 1st Qu.:13.64 1st Qu.:4.525 1st Qu.: 5.225
## Median :2 Median :1.5 Median :17.48 Median :5.400 Median : 6.450
## Mean :2 Mean :1.5 Mean :18.77 Mean :5.446 Mean : 6.634
## 3rd Qu.:3 3rd Qu.:2.0 3rd Qu.:22.80 3rd Qu.:6.500 3rd Qu.: 7.875
## Max. :3 Max. :2.0 Max. :47.87 Max. :8.800 Max. :11.300
dt = sort(sample(nrow(datos_arbolesTemp), nrow(datos_arbolesTemp)*.7))
datos_arboles<-datos_arbolesTemp[dt,]
datos_arbolesPrueba<-datos_arbolesTemp[-dt,]
attach(datos_arboles)
head(datos_arboles)
finca | mg | peso | diametro | altura |
---|---|---|---|---|
1 | 1 | 14.58 | 5.3 | 5.6 |
1 | 1 | 8.99 | 3.2 | 4.3 |
1 | 1 | 6.99 | 2.2 | 3.3 |
1 | 2 | 19.34 | 6.3 | 7.9 |
1 | 2 | 21.44 | 6.6 | 8.3 |
1 | 2 | 13.81 | 5.3 | 7.3 |
#ID=1:lengths(datos_arboles)
#datos_arboles=data.frame(ID,datos_arboles)
require(table1)
table1(~datos_arboles$altura+ datos_arboles$peso + datos_arboles$diametro, data=datos_arboles)
Overall (N=62) |
|
---|---|
datos_arboles$altura | |
Mean (SD) | 6.65 (1.95) |
Median [Min, Max] | 6.15 [3.30, 11.3] |
datos_arboles$peso | |
Mean (SD) | 18.9 (8.91) |
Median [Min, Max] | 17.8 [5.98, 47.9] |
datos_arboles$diametro | |
Mean (SD) | 5.45 (1.59) |
Median [Min, Max] | 5.40 [2.20, 8.80] |
library(psych)
corr.test(datos_arboles,
use = "pairwise",
method = "pearson",
adjust = "none")
## Call:corr.test(x = datos_arboles, use = "pairwise", method = "pearson",
## adjust = "none")
## Correlation matrix
## finca mg peso diametro altura
## finca 1.00 0.00 0.33 0.27 0.15
## mg 0.00 1.00 0.51 0.59 0.76
## peso 0.33 0.51 1.00 0.92 0.88
## diametro 0.27 0.59 0.92 1.00 0.94
## altura 0.15 0.76 0.88 0.94 1.00
## Sample Size
## [1] 62
## Probability values (Entries above the diagonal are adjusted for multiple tests.)
## finca mg peso diametro altura
## finca 0.00 0.98 0.01 0.04 0.25
## mg 0.98 0.00 0.00 0.00 0.00
## peso 0.01 0.00 0.00 0.00 0.00
## diametro 0.04 0.00 0.00 0.00 0.00
## altura 0.25 0.00 0.00 0.00 0.00
##
## To see confidence intervals of the correlations, print with the short=FALSE option
library(PerformanceAnalytics)
chart.Correlation(datos_arboles,
method="pearson",
histogram=TRUE,
pch=16)
Del grafico de correlacion podemos observar que las corellaciones mas fuertes estan con el diametro y la altura, sin embargo voy a incluir el genotipo para ver como se comporta el modelo
library(dplyr)
model_arboles = lm(peso~altura+diametro+mg,data = datos_arboles)
summary(model_arboles)
##
## Call:
## lm(formula = peso ~ altura + diametro + mg, data = datos_arboles)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.0311 -2.8827 0.1364 1.8600 11.0811
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -8.4175 1.6759 -5.023 5.18e-06 ***
## altura 1.9257 0.9762 1.973 0.0533 .
## diametro 3.5067 0.9659 3.630 0.0006 ***
## mg -3.1241 1.6223 -1.926 0.0591 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.482 on 58 degrees of freedom
## Multiple R-squared: 0.8546, Adjusted R-squared: 0.8471
## F-statistic: 113.7 on 3 and 58 DF, p-value: < 2.2e-16
#Prediccion con el conjunto de prueba
predicciones <- model_arboles%>% predict (datos_arbolesPrueba)
library(caret)
data.frame (R_squared = R2 (predicciones, datos_arbolesPrueba$peso),
RMSE = RMSE (predicciones, datos_arbolesPrueba$peso),
MAE = MAE (predicciones, datos_arbolesPrueba$peso))
R_squared | RMSE | MAE |
---|---|---|
0.7541548 | 3.082425 | 2.708467 |
```
Según la regresión estimada tenemos con base en el conjunto de datos de entrenamiento los siguientes parámetros:
β Altura: 1.269
β Diametro: 4.545 β Genotipo: -3.645 β0 = -8.809
Teniendo como ecuación del modelo:
precio_millon = (1.269 * Altura) + (4.545 * Diametro) + (-3.645 * Genotipo) -8.809
Me atreveria a afirmar que la colinealidad esta afectando el modelo porque el pvalue de altura en este modelo indica que la altura no es significativa,
un RMSE de 3.132463 un MAE de 2.561696