#EJERCICIO 1
##1)ESTIMANDO MODELO PARA EXPLICAR LOS SALARIOS
#importacion de datos
options(scipen = 999999)
load("C:/doc R/datos_parcial.RData")
library(lmtest)
modelo.wage<- lm(total~expend+ratio+salary+takers, data = sat)
summary(modelo.wage)
##
## Call:
## lm(formula = total ~ expend + ratio + salary + takers, data = sat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -90.531 -20.855 -1.746 15.979 66.571
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1045.9715 52.8698 19.784 < 0.0000000000000002 ***
## expend 4.4626 10.5465 0.423 0.674
## ratio -3.6242 3.2154 -1.127 0.266
## salary 1.6379 2.3872 0.686 0.496
## takers -2.9045 0.2313 -12.559 0.000000000000000261 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 32.7 on 45 degrees of freedom
## Multiple R-squared: 0.8246, Adjusted R-squared: 0.809
## F-statistic: 52.88 on 4 and 45 DF, p-value: < 0.00000000000000022
##2)VERIFICANDO LA CAPACIDAD PREDICTIVA DEL MODELO
###definicion de las funciones para el calculo
#Bias Proportion
Um<-function(pronosticado,observado){
library(DescTools)
((mean(pronosticado)-mean(observado))^2)/MSE(pronosticado,observado)
}
#Variance Proportion
Us<-function(pronosticado,observado){
library(DescTools)
((sd(pronosticado)-sd(observado))^2)/MSE(pronosticado,observado)
}
#Covariance Proportion
Uc<-function(pronosticado,observado){
library(DescTools)
(2*(1-cor(pronosticado,observado))*sd(pronosticado)*sd(observado))/MSE(pronosticado,observado)}
#Coeficiente U de Theil (también aparece en la librería "DescTools")
THEIL_U<-function(pronosticado,observado){
library(DescTools)
RMSE(pronosticado,observado)/(sqrt(mean(pronosticado^2))+sqrt(mean(observado^2)))
}
###ejecutando simulacion
library(dplyr)
library(magrittr)
library(caret) #Realizar muestreo
library(DescTools) # Funciones para calcular Performance
library(stargazer) # Formato, y Resumen estadistico de las simulaciones
set.seed(35)
numero_de_muestras<-150
muestras<- sat$total %>%
createDataPartition(p = 0.8,
times = numero_de_muestras,
list = TRUE)
# Listas para datos de entrenamiento
Modelos_Entrenamiento<-vector(mode = "list",
length = numero_de_muestras)
Pronostico_Prueba<-vector(mode = "list",
length = numero_de_muestras)
Resultados_Performance_data_entrenamiento<-vector(mode = "list",
length = numero_de_muestras)
Resultados_Performance<-vector(mode = "list",
length = numero_de_muestras)
#Estimación de los modelos lineales para cada muestra, los pronósticos y cálculo de las estadisticas de performance.
for(j in 1:numero_de_muestras){
Datos_Entrenamiento<- sat[muestras[[j]], ]
Datos_Prueba<- sat[-muestras[[j]], ]
Modelos_Entrenamiento[[j]]<-lm(formula =total~expend+ratio+salary+takers, data = Datos_Entrenamiento)
Pronostico_Prueba[[j]]<-Modelos_Entrenamiento[[j]] %>% predict(Datos_Prueba)
Resultados_Performance_data_entrenamiento[[j]]<-data.frame(
R2 = R2(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$total),
RMSE = RMSE(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$wage),
MAE = MAE(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$total),
MAPE= MAPE(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$total)*100,
THEIL=TheilU(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$wage,type = 1),
Um=Um(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$total),
Us=Us(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$total),
Uc=Uc(Modelos_Entrenamiento[[j]]$fitted.values,
Datos_Entrenamiento$total)
)
Resultados_Performance[[j]]<-data.frame(
R2 = R2(Pronostico_Prueba[[j]], Datos_Prueba$total),
RMSE = RMSE(Pronostico_Prueba[[j]], Datos_Prueba$total),
MAE = MAE(Pronostico_Prueba[[j]], Datos_Prueba$total),
MAPE= MAPE(Pronostico_Prueba[[j]], Datos_Prueba$total)*100,
THEIL=TheilU(Pronostico_Prueba[[j]], Datos_Prueba$total,
type = 1),
Um=Um(Pronostico_Prueba[[j]], Datos_Prueba$total),
Us=Us(Pronostico_Prueba[[j]], Datos_Prueba$total),
Uc=Uc(Pronostico_Prueba[[j]], Datos_Prueba$total)
)
}
# Resultados performance Data entrenamiento
bind_rows(Resultados_Performance_data_entrenamiento) %>%
stargazer(title = "Medidas de Performance Datos del Modelo",
type = "html",
digits = 3)
| Statistic | N | Mean | St. Dev. | Min | Max |
| R2 | 150 | 0.831 | 0.019 | 0.800 | 0.881 |
| MAE | 150 | 23.638 | 1.548 | 19.172 | 27.036 |
| MAPE | 150 | 2.455 | 0.158 | 2.007 | 2.807 |
| Um | 150 | 0.000 | 0.000 | 0 | 0 |
| Us | 150 | 0.047 | 0.006 | 0.032 | 0.057 |
| Uc | 150 | 0.977 | 0.006 | 0.967 | 0.992 |
# Resultados perfmormance
bind_rows(Resultados_Performance) %>%
stargazer(title = "Medidas de Performance Simulación",
type = "html",
digits = 3)
| Statistic | N | Mean | St. Dev. | Min | Max |
| R2 | 150 | 0.806 | 0.110 | 0.458 | 0.974 |
| RMSE | 150 | 34.465 | 9.848 | 12.123 | 56.590 |
| MAE | 150 | 27.305 | 7.408 | 9.242 | 45.964 |
| MAPE | 150 | 2.837 | 0.753 | 0.961 | 4.676 |
| THEIL | 150 | 0.018 | 0.005 | 0.006 | 0.029 |
| Um | 150 | 0.116 | 0.139 | 0.00000 | 0.681 |
| Us | 150 | 0.129 | 0.155 | 0.00000 | 0.810 |
| Uc | 150 | 0.881 | 0.213 | 0.310 | 1.139 |
##3)error porcentual maximo esperado de preiccipn MAPE = 2.807
##4)error absoluto minimo esperado de prediccion MAE = 19.172
##5)El porcentaje de la varianza de la variable endógena que es explicada por los pronósticos del modelo está entre 0.458 (valor mínimo) y 0.974 (valor máximo) y la media del R cuadraro es 0.806, entonces, en promedio la varianza de la variable endógena es explicada en 80.6%.
##6)El coheficiente de sesgo (Um) en promedio es de 0.116 por tanto el valor pronosticado y el real es bastante bajo, el coheficiente de varianza (Us) en promedio es 0.129 en este caso el modelo explica muy bien la varianza entre los datos reales y estimados y el coheficiente de covarianza (Uc) en promedio es de 0.881 que representa un correlación alta entre el valor pronosticado por el modelo y el real EL MODELO SI ES RECOMENDABLE.
#EJERCICIO 2 ESIMAR MODELO SARIMA
library(forecast)
library(wooldridge)
data("AirPassengers")
AirPassengers<-na.omit(AirPassengers)
Yt<-AirPassengers
AirPassengers%>%autoplot(main = "grafico AirPassengers",xlab = "años/meses",ylab = "pasajeros")
library(forecast)
library(dplyr)
library(tsibble)
library(fable)
library(fabletools)
#convertimos
Yt<-Yt %>%
as_tsibble() %>%
rename(AirPassengers=value)
#generador de la dta (roja)
data.cross.validation<-Yt %>%
as_tsibble() %>%
stretch_tsibble(.init = 60,.step = 1)
#generador de pronostico (verde) y simulacion
TSCV<-data.cross.validation %>%
model(ARIMA(AirPassengers ~ pdq(0, 1, 0) + PDQ(1, 1, 1))) %>%
forecast(h=1) %>% accuracy(Yt)
print(TSCV)
## # A tibble: 1 x 10
## .model .type ME RMSE MAE MPE MAPE MASE RMSSE ACF1
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ARIMA(AirPassengers ~~ Test 0.451 13.8 10.4 0.0390 2.93 0.325 0.381 -0.285