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.
A continuación se realiza la exploración y análisis univariado sobre los datos dispuestos.
# Librerias necesarias
library(readxl)
library(psych)
require(ggplot2)
require(plotly)
require(CGPfunctions)
# Cargue de los datos
acciones_ecopetrol <- read_excel("ecopetrol.xlsx")
attach(acciones_ecopetrol)
Un primera exploración gráfica (Histograma y curva normal) a las variables “precio_petroleo_WTI_US” (independiente) y “precio_accion_ecopetrol_COP” (dependiente) muestra que ambas variables se alejan un poco de la Distribución Normal. Esto lo confirma la aplicación de un gráfico QQ de normalidad sobre ambas variables.
Posteriormente se aplica un test de normalidad de Shapiro-Wilks para verificar si las muestras de cada variable provienen de una Distribución Normal(hipótesis Nula \(H0\)) con un nivel de confianza establecido en un \(α=0.05\) (5%).
Para el caso de la variable “precio_petroleo_WTI_US” se obtiene un \(p-value = 0.03224\) que es ligeramente menor a \(0.05\). Podemos establecer que la hipótesis nula NO es rechazada y la variable \(X\) presenta una Distribución Normal.
Para la variable “precio_accion_ecopetrol_COP” el test de Shapiro-Wilks muestra un \(p-valor=0.3518\) que ya es bastante elevado y supera notablemente el umbral \(0.05\). La hipótesis nula NO es rechazada y la variable \(Y\) presenta una distribución normal.
# Exploración de los datos
describe(acciones_ecopetrol)
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| fecha | 1 | 18 | NaN | NA | NA | NaN | NA | Inf | -Inf | -Inf | NA | NA | NA |
| precio_accion_ecopetrol_COP | 2 | 18 | 1108.38889 | 78.423540 | 1120.000 | 1110.3750 | 70.42350 | 955.00 | 1230.00 | 275.00 | -0.5163108 | -0.8021738 | 18.4846057 |
| precio_petroleo_WTI_US | 3 | 18 | 35.53056 | 2.118183 | 36.055 | 35.7025 | 1.77912 | 30.44 | 37.87 | 7.43 | -1.0058958 | -0.0024506 | 0.4992605 |
# Histograma variable -> precio_petroleo_WTI_US
hist(precio_petroleo_WTI_US, probability=TRUE, breaks=9, col="#336699", ylab="Densidad", xlab="WTI", main="Histograma Precio WTI", )
x = seq(min(precio_petroleo_WTI_US), max(precio_petroleo_WTI_US), length = 40)
f = dnorm(x, mean = mean(precio_petroleo_WTI_US), sd = sd(precio_petroleo_WTI_US))
lines(x,f, col="black", lwd=3)
l_media = mean(precio_petroleo_WTI_US)
abline(v=l_media, col="red", lwd=3)
# Test de Normalidad sobre la variable precio_petroleo_WTI_US
qqnorm(precio_petroleo_WTI_US, main = "Gráfico QQ de Normalidad - precio_petroleo_WTI_US", col = "darkred")
qqline(precio_petroleo_WTI_US)
shapiro.test(precio_petroleo_WTI_US)
##
## Shapiro-Wilk normality test
##
## data: precio_petroleo_WTI_US
## W = 0.88542, p-value = 0.03224
# Histograma variable -> Precio_accion_ecopetrol_COP
hist(precio_accion_ecopetrol_COP, probability=TRUE, breaks=5, col="#336699", ylab="Densidad", xlab="Precio_accion", main="Histograma Precio accion Ecopetrol")
x = seq(min(precio_accion_ecopetrol_COP), max(precio_accion_ecopetrol_COP), length = 40)
f = dnorm(x, mean = mean(precio_accion_ecopetrol_COP), sd = sd(precio_accion_ecopetrol_COP))
lines(x,f, col="black", lwd=3)
l_media = mean(precio_accion_ecopetrol_COP)
abline(v=l_media, col="red", lwd=3)
qqnorm(precio_accion_ecopetrol_COP, main = "precio_accion_ecopetrol_COP", col = "blue")
qqline(precio_accion_ecopetrol_COP)
shapiro.test(precio_accion_ecopetrol_COP)
##
## Shapiro-Wilk normality test
##
## data: precio_accion_ecopetrol_COP
## W = 0.94498, p-value = 0.3518
Se aplica un gráfico de dispersión que muestra de manera visual y aproximada un posible correlación positiva entre las variables.
Posteriormente se aplica la función de correlación y se encuentra el Coeficiente de Correlación \(R = 0.707\). Que indica que las variables tienen una correlación en un rango que puede considerarse Alto.
# EXPLORACION Y ANALISIS BIVARIADO
g1=ggplot(data=acciones_ecopetrol,aes(y=precio_accion_ecopetrol_COP, x=precio_petroleo_WTI_US))+geom_point()+geom_smooth()
ggplotly(g1)
# CORRELACION DE LAS VARIABLES
cor(precio_petroleo_WTI_US,precio_accion_ecopetrol_COP)
## [1] 0.7074373
A continuación se aplica un test de significancia a la correlación obtenida para verificar si posee un p-valor significativo. En este caso el resultado del p-valor indica el nivel de dependencia o correlación de las variables, podemos entonces establecer el valor \(\alpha=0.05\) y como Hipótesis Nula \(H0 = \text{Las variables no tienen correlacion alguna}\).
El resultado obtenido es un \(p-valor=0.001024\) lo cual indica que se rechaza la hipótesis Nula (\(H0\)) y las variables SI estás correlacionadas.
cor.test(x = precio_petroleo_WTI_US,
y = (precio_accion_ecopetrol_COP),
alternative = "two.sided",
conf.level = 0.95,
method = "pearson")
##
## Pearson's product-moment correlation
##
## data: precio_petroleo_WTI_US and (precio_accion_ecopetrol_COP)
## t = 4.0037, df = 16, p-value = 0.001024
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.3592064 0.8827512
## sample estimates:
## cor
## 0.7074373
A continuación se aplica un Modelo de Regresión Lineal a las variables “precio_petroleo_WTI_US” (independiente o predictora) y “precio_accion_ecopetrol_COP” (dependiente o respuesta).
Aunque en el paso anterior se verificó la significancia de la correlación, en el modelo de regresión planteado, se obtiene un Coeficiente de Determinación bajo igual a \(R^2=0.4692\). Lo que implica que en el modelo de regresión obtenido explica el 47% de la variablidad de la variable dependiente \(Y\) (“precio_accion_ecopetrol_COP”).
modelo=lm(precio_accion_ecopetrol_COP~precio_petroleo_WTI_US,data=acciones_ecopetrol)
summary(modelo)
##
## Call:
## lm(formula = precio_accion_ecopetrol_COP ~ precio_petroleo_WTI_US,
## data = acciones_ecopetrol)
##
## 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_WTI_US 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
par(mfrow=c(2,2))
plot(modelo)
A continuación se aplican distintas transformaciones sobre el modelo para mejorar la bondad del ajuste y por consiguiente el nivel de predictibilidad.
# 1.- AJUSTE EXPONENCIAL
modelog1=lm(log(precio_accion_ecopetrol_COP)~precio_petroleo_WTI_US,data=acciones_ecopetrol)
summary(modelog1)
##
## Call:
## lm(formula = log(precio_accion_ecopetrol_COP) ~ precio_petroleo_WTI_US,
## data = acciones_ecopetrol)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.05440 -0.03599 -0.01496 0.02970 0.12101
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.122915 0.208590 29.354 2.42e-15 ***
## precio_petroleo_WTI_US 0.024917 0.005861 4.251 0.000609 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.05119 on 16 degrees of freedom
## Multiple R-squared: 0.5304, Adjusted R-squared: 0.5011
## F-statistic: 18.07 on 1 and 16 DF, p-value: 0.0006095
par(mfrow=c(2,2))
plot(modelog1)
# 1.- AJUSTE LOGARITMICO
modelog2=lm(precio_accion_ecopetrol_COP~log(precio_petroleo_WTI_US),
data=acciones_ecopetrol)
summary(modelog2)
##
## Call:
## lm(formula = precio_accion_ecopetrol_COP ~ log(precio_petroleo_WTI_US),
## data = acciones_ecopetrol)
##
## Residuals:
## Min 1Q Median 3Q Max
## -61.16 -40.91 -14.21 32.96 134.99
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2135.3 790.5 -2.701 0.015730 *
## log(precio_petroleo_WTI_US) 908.9 221.5 4.104 0.000829 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 56.42 on 16 degrees of freedom
## Multiple R-squared: 0.5128, Adjusted R-squared: 0.4824
## F-statistic: 16.84 on 1 and 16 DF, p-value: 0.0008295
par(mfrow=c(2,2))
plot(modelog2)
# 3.- AJUSTE DOBLEMENTE LOGARITMICO
modelog3=lm(log(precio_accion_ecopetrol_COP)~log(precio_petroleo_WTI_US),
data=acciones_ecopetrol)
summary(modelog3)
##
## Call:
## lm(formula = log(precio_accion_ecopetrol_COP) ~ log(precio_petroleo_WTI_US),
## data = acciones_ecopetrol)
##
## 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_WTI_US) 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(modelog3)
# 4.- AJUSTE HIPERBOLICO
modelog4=lm(precio_accion_ecopetrol_COP~(1/precio_petroleo_WTI_US),
data=acciones_ecopetrol)
summary(modelog4)
##
## Call:
## lm(formula = precio_accion_ecopetrol_COP ~ (1/precio_petroleo_WTI_US),
## data = acciones_ecopetrol)
##
## Residuals:
## Min 1Q Median 3Q Max
## -153.39 -42.14 11.61 55.36 121.61
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1108.39 18.48 59.96 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 78.42 on 17 degrees of freedom
par(mfrow=c(2,2))
plot(modelog4)
A la pregunta 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 R2
Se observa que el mejor ajuste se obtiene con un ajuste Inverso descrito por la siguiente expresión: \(Y=1/(α+βX)\)
Con este ajuste se obtiene un Coefeciente de Determinación \(R^2=0.5317\)
# 5.- AJUSTE INVERSO
modelog5=lm((1/precio_accion_ecopetrol_COP)~precio_petroleo_WTI_US,
data=acciones_ecopetrol)
summary(modelog5)
##
## Call:
## lm(formula = (1/precio_accion_ecopetrol_COP) ~ precio_petroleo_WTI_US,
## data = acciones_ecopetrol)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.075e-04 -2.640e-05 1.289e-05 3.181e-05 4.980e-05
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.751e-03 1.877e-04 9.329 7.16e-08 ***
## precio_petroleo_WTI_US -2.376e-05 5.274e-06 -4.506 0.000359 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.606e-05 on 16 degrees of freedom
## Multiple R-squared: 0.5592, Adjusted R-squared: 0.5317
## F-statistic: 20.3 on 1 and 16 DF, p-value: 0.0003593
par(mfrow=c(2,2))
plot(modelog5)
A partir de esta transformacion con un ajuste Inverso, podemos establecer la siguiente ecuacion de regresion:
\(Y=1/((1.751E-03) + (-2.376E-05X)\)
A continuación una predicción con el modelo estimado: Para un valor de \(X=35\) se obtiene un valor de \(Y=1087.66\) (precio de la acción de ecopetrol)
Yp1=1/(1.751e-03 + (-2.376e-05*35))
Yp1
## [1] 1087.666
A la pregunta __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 α = 0.05__
Prueba de hipotesis t. Se establecen las siguientes hipotesis:
- Hipotesis Nula H0: El coeficente \(β1 = 0\). Esto implicaria que la pendiente de la recta es 0, es decir que no hay relación entre la variable predictora \(X\) y la variable respuesta \(Y\).
- Hipotesis altenativa H1: El coeficiente \(β1 ≠ 0\). Esto implicaría que existe realmente una pendiente para la recta del modelo, es decir que si existe relacion entre las variables.
Resultado: Se encuentra un \(P-valor = 0.0003593\), que es mucho mas pequeño que el valor convencional de \(α = 0.05\). Lo cual implica que la hipotesis nula H0 puede ser rechazada, considerandose valida la Hipótesis Alternativa \(H1\).
A continuación se realiza la exploración y análisis univariado sobre los datos dispuestos.
# Cargue de los datos
inflacionSML <- read_excel("inflacionSML.xlsx")
attach(inflacionSML)
A continuación se presenta una exploración gráfica (Histograma y curva normal) de las variables “Inflacion” (independiente) y “SMLM” (dependiente). También se aplica un gráfico QQ de Normalidad y un test de normalidad de Shapiro-Wilks a ambas variables.
El gráfico de normalidad muestra prácticamente una distribución normal para las dos variables.
Posteriormente se aplica un test de normalidad de Shapiro-Wilks para verificar si las muestras de cada variable provienen de una Distribución Normal(hipótesis Nula \(H0\)) con un nivel de confianza establecido en un \(\alpha=0.05\).
Estos resultados del p-valor indican que las muestras de las variables son coherentes con una Distribución Normal.
# Histograma variable -> INFLACION
hist(inflacion, probability=TRUE, breaks=10, col="#336699", ylab="Densidad", xlab="inflación", main="Histograma Inflación", )
x = seq(min(inflacion), max(inflacion), length = 40)
f = dnorm(x, mean = mean(inflacion), sd = sd(inflacion))
lines(x,f, col="black", lwd=3)
l_media = mean(inflacion)
abline(v=l_media, col="red", lwd=3)
# Test de Normalidad sobre la variable Inflación
qqnorm(inflacion, main = "Gráfico QQ de Normalidad - Inflación", col = "darkred")
qqline(inflacion)
shapiro.test(inflacion)
##
## Shapiro-Wilk normality test
##
## data: inflacion
## W = 0.95677, p-value = 0.5717
En el caso de la variable SMLM (Salario Mínimo Legal Mensual) fue expresada en términos de logaritmo base 10 para mejorar la visualización del histograma.
# Histograma variable -> SMLM
smlm_log=log10(smlm)
hist(smlm_log, probability=TRUE, breaks=10, col="#336699", ylab="Densidad", xlab="smlm", main="Histograma SMLM")
x = seq(min(smlm_log), max(smlm_log), length = 80)
f = dnorm(x, mean = mean(smlm_log), sd = sd(smlm_log))
lines(x,f, col="black", lwd=3)
l_media = mean(smlm_log)
abline(v=l_media, col="red", lwd=3)
# Test de Normalidad sobre la variable SMLM
qqnorm(smlm, main = "Gráfico QQ de Normalidad - SMLM", col = "darkred")
qqline(smlm)
shapiro.test(smlm)
##
## Shapiro-Wilk normality test
##
## data: smlm
## W = 0.95948, p-value = 0.6218
A continuación, se presenta el análisis Bivariado para comprender mejor la naturaleza de los datos y el fenómeno planteado.
A partir de un gráfico de dispersión se observa que existe una relación inversa entre las dos variables.
# EXPLORACION Y ANALISIS BIVARIADO
g_inf=ggplot(data=inflacionSML,aes(y=smlm,x=inflacion))+geom_point()+geom_smooth()
ggplotly(g_inf)
Posteriormente se aplica la función de correlación y se encuentra el Coeficiente de Correlación \(R=-0.708\). Que indica que las variables tienen una correlación en un rango que puede considerarse Alto.
# CORRELACION DE LAS VARIABLES
cor(inflacion,smlm)
## [1] -0.7086581
A continuación se aplica un test de significancia a la correlación obtenida para verificar si posee un p-valor significativo. En este caso el resultado del p-valor indica el nivel de dependencia o correlación de las variables, podemos entonces establecer el valor \(α=0.05\) y como Hipótesis Nula H0=Las variables no tienen correlacion alguna. El resultado obtenido es un \(p−valor=0.00145\) lo cual indica que se rechaza la hipótesis Nula (\(H0\)) y las variables SI estás correlacionadas.
cor.test(x = inflacion,
y = (smlm),
alternative = "two.sided",
conf.level = 0.95,
method = "pearson")
##
## Pearson's product-moment correlation
##
## data: inflacion and (smlm)
## t = -3.89, df = 15, p-value = 0.00145
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.8871337 -0.3457958
## sample estimates:
## cor
## -0.7086581
A continuación se aplica un Modelo de Regresión Lineal a las variables “inflacion” (independiente o predictora) y “smlm” (dependiente o respuesta). Aunque en el paso anterior se verificó la significancia de la correlación, en el modelo de regresión planteado, se obtiene un Coeficiente de Determinación bajo igual a \(R^2=0.469\). Lo que implica que en el modelo de regresión obtenido explica aprox. el 47% de la variablidad de la variable dependiente Y (“smlm”).
# MODELO DE REGRESION LINEAL
modelo_inf=lm(smlm~inflacion,data=inflacionSML)
summary(modelo_inf)
##
## Call:
## lm(formula = smlm ~ inflacion, data = inflacionSML)
##
## Residuals:
## Min 1Q Median 3Q Max
## -75463 -63456 -42854 17623 263207
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 648486 58947 11.00 1.4e-08 ***
## inflacion -39489 10151 -3.89 0.00145 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 94130 on 15 degrees of freedom
## Multiple R-squared: 0.5022, Adjusted R-squared: 0.469
## F-statistic: 15.13 on 1 and 15 DF, p-value: 0.00145
par(mfrow=c(2,2))
plot(modelo_inf)
#### 1.4.- Transformaciones sobre el Modelo
A continuación se aplican distintas transformaciones sobre el modelo para mejorar la bondad del ajuste y por consiguiente el nivel de predictibilidad.
# 1.- AJUSTE EXPONENCIAL
modelo_inf1=lm(log(smlm)~inflacion,data=inflacionSML)
summary(modelo_inf1)
##
## Call:
## lm(formula = log(smlm) ~ inflacion, data = inflacionSML)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.17778 -0.14056 -0.11307 0.07049 0.57569
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.48553 0.13378 100.806 < 2e-16 ***
## inflacion -0.10121 0.02304 -4.393 0.000524 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2136 on 15 degrees of freedom
## Multiple R-squared: 0.5627, Adjusted R-squared: 0.5335
## F-statistic: 19.3 on 1 and 15 DF, p-value: 0.0005238
par(mfrow=c(2,2))
plot(modelo_inf1)
# 1.- AJUSTE LOGARITMICO
modelo_inf2=lm(smlm~log(inflacion),
data=inflacionSML)
summary(modelo_inf2)
##
## Call:
## lm(formula = smlm ~ log(inflacion), data = inflacionSML)
##
## Residuals:
## Min 1Q Median 3Q Max
## -94445 -62759 -41824 25832 266979
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 712980 80886 8.815 2.56e-07 ***
## log(inflacion) -175482 49169 -3.569 0.0028 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 98110 on 15 degrees of freedom
## Multiple R-squared: 0.4592, Adjusted R-squared: 0.4232
## F-statistic: 12.74 on 1 and 15 DF, p-value: 0.002798
par(mfrow=c(2,2))
plot(modelo_inf2)
# 3.- AJUSTE DOBLEMENTE LOGARITMICO
modelo_inf3=lm(log(smlm)~log(inflacion),
data=inflacionSML)
summary(modelo_inf3)
##
## Call:
## lm(formula = log(smlm) ~ log(inflacion), data = inflacionSML)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.2829 -0.1381 -0.0585 0.1100 0.5827
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.6383 0.1890 72.165 < 2e-16 ***
## log(inflacion) -0.4418 0.1149 -3.846 0.00159 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2292 on 15 degrees of freedom
## Multiple R-squared: 0.4965, Adjusted R-squared: 0.4629
## F-statistic: 14.79 on 1 and 15 DF, p-value: 0.001588
par(mfrow=c(2,2))
plot(modelo_inf3)
# 4.- AJUSTE HIPERBOLICO
modelo_inf4=lm(smlm~(1/inflacion),
data=inflacionSML)
summary(modelo_inf4)
##
## Call:
## lm(formula = smlm ~ (1/inflacion), data = inflacionSML)
##
## Residuals:
## Min 1Q Median 3Q Max
## -200619 -105079 -3379 98521 207271
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 437079 31331 13.95 2.26e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 129200 on 16 degrees of freedom
par(mfrow=c(2,2))
plot(modelo_inf4)
# 5.- AJUSTE INVERSO
modelo_inf5=lm((1/smlm)~inflacion,
data=inflacionSML)
summary(modelo_inf5)
##
## Call:
## lm(formula = (1/smlm) ~ inflacion, data = inflacionSML)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.341e-06 -1.971e-07 1.824e-07 2.834e-07 6.656e-07
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.047e-06 3.337e-07 3.138 0.006765 **
## inflacion 2.726e-07 5.747e-08 4.744 0.000261 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.329e-07 on 15 degrees of freedom
## Multiple R-squared: 0.6, Adjusted R-squared: 0.5734
## F-statistic: 22.5 on 1 and 15 DF, p-value: 0.0002611
par(mfrow=c(2,2))
plot(modelo_inf5)
A continuacion un analisis de acuerdo con las preguntas planetadas en este punto del taller:
Se observa que el mejor ajuste se obtiene con modelo original con pendiente negativa descrito por la siguiente expresión: \(Y = \alpha - βX\)
Con este ajuste se obtiene un Coefeciente de Determinación \(R^2=0.469\) Quiere decir que explica aprox. el 47% de la variabilidad de la variable respuesta \(Y\) (smlm).
A partir de este modelo de regresion obtenido, podemos establecer la siguiente ecuación de regresión: \(Y = 648486 - 39489X\).
Con respecto al coeficiente \(\alpha\) del modelo o intercepto podemos decir que equivale a la media de la variable respuesta “smlm” si no estuviera influenciada por la variable independiete “inflacion”. Con respecto a la coeficiente \(β\) que representa la pendiente de la recta de regresión, podemos decir que por cada unidad de incremento de la variable independiente “inflación”, la variable “smlm” disminuye 34489 pesos
A continuación una predicción con el modelo estimado: Para un valor de \(X=12\) se obtiene un valor de \(Y=174618\) (smlm)
Yi1= 648486 - 39489*12
Yi1
## [1] 174618
Con respecto a la grafica de residuos del modelo elejdo podemos decir que no se observa una tendencia evidente y se distribuyen sin mayor varianza que se equilibra por aquellos valores del “smlm” que son mas elevados frente al valor de la inflacion del respectivo año. El grafico Q-Q de normalidad muestra un buen ajuste de los residuos lo que permite inferir que tienen una Distribución Normal.
par(mfrow=c(2,2))
plot(modelo_inf)
Con respecto a la cuestion sobre la conveniencia de usar el modelo propuesto para predecir el SMLM para Colombia, es posible decir que a pesar de que los coeficientes de determinacion y correlacion estan en un rango medio-alto, el modelo permite dar un buen nivel de prediccion. Por otro lado, del grafico de residuos se puede ver tambien que el modelo no es sesgado.
Sin embargo, es claro que el SMLM esta asociado a otras variables predictorias para ser correctamente explicado; Esta es una de las razones por las que el modelo presenta cierta llimitacion frenete al nivel de predictibilidad. Quiza variables predictoras como el nivel de productividad economica del pais, meta de inflacion fijada por el Banco de la Republica, el comportamiento del Producto Interno Bruto, etc.
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?).
# Cargue de los datos
datos_vivienda <- read_excel("Datos_Vivienda.xlsx")
attach(datos_vivienda)
pos_2=which(datos_vivienda$zona=="Zona Norte" & datos_vivienda$precio_millon<500 & datos_vivienda$area_construida<300 & datos_vivienda$tipo=="Apartamento")
datos_sub2=datos_vivienda[pos_2,]
head(datos_sub2)
| zona | piso | estrato | precio_millon | area_construida | parqueaderos | banos | habitaciones | tipo | barrio | coordenada_longitud | coordenada_latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Zona Norte | NA | 6 | 450 | 118 | NA | 3 | 3 | Apartamento | acopi | -76.52910 | 3.34525 |
| Zona Norte | NA | 6 | 400 | 110 | NA | 3 | 3 | Apartamento | acopi | -76.52843 | 3.35073 |
| Zona Norte | NA | 6 | 310 | 93 | NA | 3 | 3 | Apartamento | acopi | -76.52701 | 3.36394 |
| Zona Norte | NA | 4 | 270 | 86 | NA | 2 | 2 | Apartamento | Cali | -76.52274 | 3.36400 |
| Zona Norte | NA | 5 | 265 | 94 | NA | 2 | 3 | Apartamento | acopi | -76.52386 | 3.36403 |
| Zona Norte | 1 | 6 | 450 | 106 | NA | 4 | 3 | Apartamento | ciudad jardin | -76.53729 | 3.36487 |
summary(datos_sub2)
## zona piso estrato precio_millon
## Length:1077 Length:1077 Min. :3.000 Min. : 65.0
## Class :character Class :character 1st Qu.:3.000 1st Qu.:132.0
## Mode :character Mode :character Median :4.000 Median :220.0
## Mean :4.195 Mean :233.8
## 3rd Qu.:5.000 3rd Qu.:320.0
## Max. :6.000 Max. :495.0
## area_construida parqueaderos banos habitaciones
## Min. : 35.00 Length:1077 Min. :0.000 Min. :0.000
## 1st Qu.: 60.00 Class :character 1st Qu.:2.000 1st Qu.:3.000
## Median : 76.00 Mode :character Median :2.000 Median :3.000
## Mean : 85.94 Mean :2.138 Mean :2.851
## 3rd Qu.:100.00 3rd Qu.:2.000 3rd Qu.:3.000
## Max. :287.00 Max. :5.000 Max. :5.000
## tipo barrio coordenada_longitud coordenada_latitud
## Length:1077 Length:1077 Min. :-76.59 Min. :3.345
## Class :character Class :character 1st Qu.:-76.53 1st Qu.:3.462
## Mode :character Mode :character Median :-76.52 Median :3.476
## Mean :-76.52 Mean :3.467
## 3rd Qu.:-76.50 3rd Qu.:3.488
## Max. :-76.47 Max. :3.498
require(leaflet)
leaflet() %>% addCircleMarkers(lng=datos_sub2$coordenada_longitud, lat=datos_sub2$coordenada_latitud, radius=0.3) %>% addTiles()
De acuerdo con las condiciones del requerimiento, se obtienen 1077 registros. Sin embargo, algunos apartamentos a pesar de estar etiquetdos como Zona Norte, las coordenadas ingresadas no corresponden a esta zona de la ciudad. Posiblemente se trate de un caso donde es necesario una actividad inicial de limpieza de datos.
Para este ejercicio se continuará con el total de registros encontrados (1077).
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.
graf1=ggplot(data=datos_sub2,aes(y=precio_millon, x=area_construida))+geom_point()+geom_smooth()
ggplotly(graf1)
graf2=ggplot(data=datos_sub2,aes(x=estrato, fill=precio_millon))+geom_bar()
ggplotly(graf2)
g21 = ggplot(data=datos_sub2,aes(x=estrato,y=precio_millon,fill=estrato))+geom_boxplot()+theme_bw()
ggplotly(g21)
graf3=ggplot(data=datos_sub2,aes(x=parqueaderos, fill=precio_millon))+geom_bar()
ggplotly(graf3)
g31 = ggplot(data=datos_sub2,aes(x=parqueaderos,y=precio_millon,fill=parqueaderos))+geom_boxplot()+theme_bw()
ggplotly(g31)
1.- Para ilustrar la relacion entre el gráfico que relaciona el Precio de la vivienda con el Area construida, se construyó un gráfico de dispersion. Este recurso muestra una relación lineal directa entre las dos variables.
2.- Para ilustrar la relación entre el Precio de la vivienda y la variable categórica Estrato, se construyeron dos recursos: Un gráfico de barras que indica cuantos apartamentos se ubican en cada estrato. Se encontró que que el estrato 5 tiene la mayor cantidad de apartamentos (451).
El segundo recurso corresponde a un gráfico de cajas y bigotes que muestra la ubicacion de cada elemento “caja/bigotes” frente al eje Y (Precio) y al eje X (estrato); y brinda distintos indicadores estadisticos de la variable Precio. En este gráfico se puede observar que el estrato 5 es el que posee los apartamentos con precios mas elevados, con una media=315 millones.
3.- Para ilustrar la relación entre el Precio de la vivienda y la variable Parqueaderos, se construyeron dos recursos: Un gráfico de barras que indica cuantos apartamentos poseen un determinado número de parqueaderos (incluidos los que poseen el dato NA). Se observa que la mayoría de apartamentos poseen 1 parqueadero (559).
El segundo recurso corresponde a un gráfico de cajas y bigotes que muestra la ubicacion de cada elemento “caja/bigotes” frente al eje Y (Precio) y al eje X (parqueaderos); y brinda distintos indicadores estadisticos de la variable Precio. Por otro lado, en este grafico podemos observar que los apartamentos con 3 parqueaderos son en promedio los mas costosos, con una media=395 millones.
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).
En primer lugar, es necesario tener en cuenta que la variable “Parqueaderos” es de tipo caracter e incluye datos “NA” que se infiere no se sabe a que equivale, en este trabajo tampoco se ha asumido que es equivalente a 0. Así pues, es necesario por un lado filtrar aquellos inmuebles que tienen parqueadero=NA. por otro lado, es necesario convertir la variable a tipo númerico.
pos_3=which(datos_vivienda$zona=="Zona Norte" & datos_vivienda$precio_millon<500 & datos_vivienda$area_construida<300 & datos_vivienda$tipo=="Apartamento" & parqueaderos!="NA")
datos_sub3=datos_vivienda[pos_3,]
datos_sub31 <- transform(datos_sub3,parqueaderos = as.numeric(parqueaderos))
head(datos_sub31)
| zona | piso | estrato | precio_millon | area_construida | parqueaderos | banos | habitaciones | tipo | barrio | coordenada_longitud | coordenada_latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Zona Norte | 1 | 5 | 240 | 87 | 1 | 3 | 3 | Apartamento | acopi | -76.51700 | 3.36971 |
| Zona Norte | 6 | 5 | 170 | 56 | 1 | 1 | 2 | Apartamento | acopi | -76.51735 | 3.37251 |
| Zona Norte | 9 | 5 | 435 | 113 | 2 | 3 | 3 | Apartamento | la flora | -76.54583 | 3.37370 |
| Zona Norte | 2 | 5 | 320 | 86 | 1 | 2 | 3 | Apartamento | la flora | -76.56107 | 3.37993 |
| Zona Norte | 1 | 5 | 310 | 137 | 2 | 3 | 4 | Apartamento | acopi | -76.53105 | 3.38296 |
| Zona Norte | 3 | 5 | 285 | 82 | 1 | 2 | 3 | Apartamento | la flora | -76.54702 | 3.38611 |
summary(datos_sub31)
## zona piso estrato precio_millon
## Length:755 Length:755 Min. :3.000 Min. : 70.0
## Class :character Class :character 1st Qu.:4.000 1st Qu.:160.0
## Mode :character Mode :character Median :5.000 Median :260.0
## Mean :4.419 Mean :260.4
## 3rd Qu.:5.000 3rd Qu.:340.0
## Max. :6.000 Max. :495.0
## area_construida parqueaderos banos habitaciones
## Min. : 42.00 Min. :1.000 Min. :0.000 Min. :0.000
## 1st Qu.: 67.00 1st Qu.:1.000 1st Qu.:2.000 1st Qu.:3.000
## Median : 85.00 Median :1.000 Median :2.000 Median :3.000
## Mean : 91.25 Mean :1.268 Mean :2.285 Mean :2.877
## 3rd Qu.:107.00 3rd Qu.:2.000 3rd Qu.:3.000 3rd Qu.:3.000
## Max. :287.00 Max. :4.000 Max. :5.000 Max. :5.000
## tipo barrio coordenada_longitud coordenada_latitud
## Length:755 Length:755 Min. :-76.59 Min. :3.370
## Class :character Class :character 1st Qu.:-76.53 1st Qu.:3.464
## Mode :character Mode :character Median :-76.52 Median :3.479
## Mean :-76.52 Mean :3.472
## 3rd Qu.:-76.51 3rd Qu.:3.489
## Max. :-76.47 Max. :3.498
Posterior a estas operaciones de preparación y limpieza de datos, se construyó el siguiente gráfico matricial de correlacciones entre las variables. Este grafico da una excelente idea del tipo y fuerza de la correlacion entre las distintas variables estudiadas.
library(GGally)
ggpairs(datos_sub31, columns=c("precio_millon", "area_construida", "estrato", "parqueaderos"), columnLabels = c("precio_millon", "area_construida", "estrato", "parqueaderos"), lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axisLabels = "none")
Despues de los pasos anteriores, se procede a plantear un Modelo de Regresión Lineal Multiple con las variables bajo estudio.
Con el modelo estimado se obtiene un Coeficiente de Determinacion alto \(R²=0.708\) que explica el 70% de la variabilidad de la variable Precio de la Vivienda \(Y\) .
Por otro lado, estableciendo la Hipótesis Nula como \(H0= Las variables no estàn correlacionadas\), el \(p-valor= < 2.2e-16\) obtenido tiene significancia estadistica, permite rechazar la hipotesis Nula y confirma que el modelo obtenido no obedece al azar.
modelorlm <- lm(data=datos_sub31, precio_millon ~ area_construida + estrato + parqueaderos )
summary(modelorlm)
##
## Call:
## lm(formula = precio_millon ~ area_construida + estrato + parqueaderos,
## data = datos_sub31)
##
## Residuals:
## Min 1Q Median 3Q Max
## -184.798 -37.957 0.529 31.854 231.856
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -172.21312 10.87566 -15.835 < 2e-16 ***
## area_construida 0.76566 0.08161 9.382 < 2e-16 ***
## estrato 69.77587 2.89836 24.074 < 2e-16 ***
## parqueaderos 42.94832 5.24414 8.190 1.12e-15 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 56.62 on 751 degrees of freedom
## Multiple R-squared: 0.7096, Adjusted R-squared: 0.7084
## F-statistic: 611.6 on 3 and 751 DF, p-value: < 2.2e-16
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).
A continuación se presenta el gráfico de Residuos del modelo. De este gráfico podemos evaluar los primeros dos supuestos.
1.- Homocedasticidad de los residuos: El resultado del grafico de “Residuos vs Valores ajustados” permite observar que la distribución tiende a ser aleatoria y de varianza constante, que es lo que se espera.
2.- Distribucion normal de los residuos: El resultado del gráfico Q-Q de normalidad permite observar que la distribcion practicamente se ajusta a la normal, que es lo que se espera y da fuerza la modelo de regresión obtenido. Del grafico.
3.- Linealidad: Este supuesto del modelo, prevee que existe una relación lineal entre la variable dependiente o respuesta y las independientes o predictoras. Este supuesto queda cumplido mediante el grafico tipo matriz construido anteriomente en el que se observa que existe una correlacion alta entre cada predictor y la variable respuesta.
4.- No colinealidad: Este supuesto del modelo prevee que no existe colinealidad entre los predictores, es decir que deben ser independientes. Puesto que se entiende que colinealidad entre predictores presenta un coeficiente de correlacion cercano a 1, del grafico tipo matriz construido anteriormente podemos establecer que no existe colinealidad entre los predictores.
5.- Parsimonia: Este supuesto del modelo prevee que el mejor modelo explica con alto nivel de precision la varibalidad observada en la variable respuesta empleando el menor numero posible de predictores. En este caso tenemos un dataframe con 12 posibles variables predictoras, y se ha logrado un coeficiente de dterminacion \(R^=0.70\) empleando solo tres predictores; Podemos decir que cumple con el supuesto.
par(mfrow=c(2,2))
plot(modelorlm)
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?
DE acuerdo con la expresion general del Modelo de Regresion Lineal Multiple tenemos: Yi=(β0+β1X1i+β2X2i+⋯+βnXni)+ei.
Ahora bien, de acuerdo con el modelo obtenido podemos plantear la siguiente expresión: Yi= -172.21312 + 0.76566X1 + 69.77587X2 + 42.94832X3.
Para un apartamento con las caracteristicas propuestas tenemos un precio estimado de 226.4 millones.
Y=-172.21312 + (0.76566*100) + (69.77587*4) + (42.94832*1)
Y
## [1] 226.4047
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 en cuenta 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.
#OFERTA 1
Y1=-172.21312 + (0.76566*200) + (69.77587*4) + (42.94832*1)
Y1
## [1] 302.9707
#OFERTA 2
Y2=-172.21312 + (0.76566*250) + (69.77587*4) + (42.94832*1)
Y2
## [1] 341.2537
#OFERTA 3 - Area=250 , Con 2 parqueaderos
Y3=-172.21312 + (0.76566*250) + (69.77587*4) + (42.94832*2)
Y3
## [1] 384.202
#OFERTA 4 - Area=270 Con 2 parqueaderos
Y4=-172.21312 + (0.76566*270) + (69.77587*4) + (42.94832*2)
Y4
## [1] 399.5152
#OFERTA 5 - Area=300 Con 1 parqueaderos
Y5=-172.21312 + (0.76566*300) + (69.77587*4) + (42.94832*1)
Y5
## [1] 379.5367
# Creamos un dataframe con las propuestas
df <- data.frame(
"precio" = c(302.97,341.25,384.20,399.51,379.53),
"area" = c(200, 250, 250, 270,300),
"estrato" = c(4, 4, 4, 4, 4),
"parqueaderos" = c(1, 1, 2, 2, 1),
"lat" = c(3.479,3.482,3.493,3.495,3.48),
"long"= c(-76.518,-76.519,-76.545,-76.541,-76.531)
)
require(leaflet)
leaflet() %>% addCircleMarkers(lng=df$long, lat=df$lat, radius=0.3) %>% addTiles()
Con base en los datos de árboles 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.
# Cargue de los datos
datos_arboles <- read_excel("data_arboles-o.xlsx")
attach(datos_arboles)
head(datos_arboles)
| finca | mg | peso | diametro | altura |
|---|---|---|---|---|
| FINCA_1 | 1 | 13.73 | 4.7 | 5.0 |
| FINCA_1 | 1 | 14.58 | 5.3 | 5.6 |
| FINCA_1 | 1 | 15.88 | 4.8 | 5.8 |
| FINCA_1 | 1 | 8.99 | 3.2 | 4.3 |
| FINCA_1 | 1 | 6.99 | 2.2 | 3.3 |
| FINCA_1 | 2 | 19.34 | 6.3 | 7.9 |
summary(datos_arboles)
## finca mg peso diametro
## Length:90 Min. :1.0 Min. : 5.98 Min. :2.200
## Class :character 1st Qu.:1.0 1st Qu.:13.64 1st Qu.:4.525
## Mode :character Median :1.5 Median :17.48 Median :5.400
## Mean :1.5 Mean :18.77 Mean :5.446
## 3rd Qu.:2.0 3rd Qu.:22.80 3rd Qu.:6.500
## Max. :2.0 Max. :47.87 Max. :8.800
## altura
## Min. : 3.300
## 1st Qu.: 5.225
## Median : 6.450
## Mean : 6.634
## 3rd Qu.: 7.875
## Max. :11.300
A continuacion se construye se construye el siguiente gráfico matricial de correlacciones entre las variables.
De acuerdo con los resultados obtenido, se eligen las variables predictoras “diametro” y “altura” por tener alto Coeficiente de Correlacion con la variable respuesta “peso”. El grafico de dispersión de estas dos variables predictoras frente a la varible respuesta, muestra una correlacion lineal positiva en ambos casos.
library(GGally)
ggpairs(datos_arboles, columns=c("peso", "mg", "diametro", "altura"), columnLabels = c("PESO", "MG","DIAMETRO", "ALTURA"), lower = list(continuous = "smooth"),
diag = list(continuous = "barDiag"), axisLabels = "none")
A continuación se plantea un Modelo de Regresión Lineal Múltiple con las variables predictoras elegidas para estimar el peso de un árbol.
Con el modelo estimado se obtiene un Coeficiente de Determinación elevado \(R^2=0.8213\) que explica aprox. el 82% de la variabilidad de la variable “peso”.
Por otro lado, se establecen las siguientes hipotesis:
modelorlm_a <- lm(data=datos_arboles, peso ~ diametro + altura)
summary(modelorlm_a)
##
## Call:
## lm(formula = peso ~ diametro + altura, 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 ***
## diametro 4.7395 0.7128 6.649 2.49e-09 ***
## 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
A continuación se presenta el grafico y analisis de residuos del modelo:
1.- Homocedasticidad de los residuos: El resultado del grafico de “Residuos vs Valores ajustados” permite observar que la distribución tiende a ser aleatoria y de varianza constante, que es lo que se espera.
2.- Distribucion normal de los residuos: El resultado del gráfico Q-Q de normalidad permite observar que la distribucion practicamente se ajusta a la normal, que es lo que se espera y da fuerza la modelo de regresión obtenido.
3.- Linealidad: Este supuesto del modelo, prevee que existe una relación lineal entre la variable dependiente o respuesta y las independientes o predictoras. Este supuesto queda cumplido mediante el grafico tipo matriz construido anteriomente en el que se observa que existe una correlacion muy alta entre cada predictor y la variable respuesta.
4.- No colinealidad: Este supuesto del modelo prevee que no existe colinealidad entre los predictores, es decir que deben ser independientes. Puesto que se entiende que colinealidad entre predictores presenta un coeficiente de correlacion cercano a 1, del grafico tipo matriz construido anteriormente podemos decir que aunque la colinealidad entre los predictores no es perfecta (igual a 1), si existe una colinealidad bastante alta.
5.- Parsimonia: Este supuesto del modelo prevee que el mejor modelo explica con alto nivel de precision la variabilidad observada en la variable respuesta empleando el menor numero posible de predictores. En este caso tenemos un dataframe con 4 posibles variables predictoras, y se ha logrado un coeficiente de determinacion \(R^2=0.8213\) empleando dos predictores; En el marco de este ejercicio, podemos decir que cumple con este supuesto.
par(mfrow=c(2,2))
plot(modelorlm_a)
Proponga un método de evaluación por medio de validación cruzada. Presente métricas apropiadas como el RMSE y MAE.
El proposito de los metodos de validación cruzada es medir el desempeño del modelo predictivo sobre nuevos conjuntos de datos. Esto lo realizamos mediante la division del conjunto de datos original, en dos conjuntos:
+ El conjunto de entrenamiento del modelo.
+ El conjunto de prueba, usado para medir el dsempeño del modelo mediante la estimacion del error.
Los pasos generales que seguiremos son los siguientes:
+ Reservamos una muestra del conjunto de datos. Este es el cojunto de prueba. + Construimos o Entrenamos el modelo con el resto de datos.
+ Probamos el desempeño de modelo sobre el conjunto de prueba y se calcula la prediccion de los errores. Si el modelo funciona bien (con metricas como RMSE y MAE) sobre el conjunto de prueba, podemos decir entonces que el modelo es valido.
library(caret)
entrenamiento.muestras <- datos_arboles %>%
createDataPartition(p = 0.8, list = FALSE)
entrenamiento.datos <- datos_arboles[entrenamiento.muestras, ]
prueba.datos <- datos_arboles[-entrenamiento.muestras, ]
predicciones <- modelorlm_a %>% predict(prueba.datos)
data.frame( R2 = R2(predicciones, prueba.datos$peso),
RMSE = RMSE(predicciones, prueba.datos$peso),
MAE = MAE(predicciones, prueba.datos$peso))
| R2 | RMSE | MAE |
|---|---|---|
| 0.8226329 | 3.428771 | 2.773912 |
A partir de los resultados obtenidos podemos establecer que el Coeficiente de Determinación es muy alto ($R^2=0.8226) y coherente el obtenido antes de la validacion cruzada.