En el siguiente post se vera como podemos descargar datos directamente del BCRP usando el Web Scraping y posteriormente se usara los difrenetes algoritmos de regresión los cuales son:
- Regresión lineal simple.
- Regresión polinomial.
- Maquinas de soporte vectorial para regresión (SVR).
- Arboles de desicion.
- Bosques aleatorios.
Además se vera como corregir la autocorrelación en la parte final.
Web Scraping
Paquetes a utilizar
Función de extracción
extraccion<- function(codigo=NULL,start=NULL,end=NULL){
vector<- vector()
datos<- NULL
for(i in 1:length(codigo)){
ex<- paste0("https://estadisticas.bcrp.gob.pe/estadisticas/series/api/",
codigo[i], "/xml/",start,"/",end)
ObjXML <- httr::GET(ex)
L_parseXML <- xmlParse(ObjXML)
L_XML <- xmlToList(L_parseXML)
dt_BCRP <- data.table::data.table()
for (a in 1:length(L_XML$periods)){
dt_temp <- data.table(
serie= L_XML$periods[[a]]$v)
dt_BCRP <- rbind(dt_BCRP,dt_temp)
}
vector[i]<- dt_BCRP[,serie:=as.numeric(serie)]
}
for(i in 1: length(codigo)){
datos<- cbind(datos,vector[[i]])
}
datos<- as.data.frame(datos)
names(datos)<- codigo
return(datos)
}Analísis de Regresión
Regresión Simple
datos=datos
modelo_r<- lm(Exportaciones~Tipo_de_cambio,data = datos)
linea<- predict(modelo_r,datos)
a1<-ggplot(datos,mapping = aes(y=Exportaciones,x=Tipo_de_cambio))+
geom_point(color="red")+geom_line(mapping = aes(x=Tipo_de_cambio,
y=linea))+theme_minimal()+
xlab("Tipo de cambio")+labs(title ="Regresión lineal")
E_c_M_1= (Exportaciones-linea)^2 %>% mean()
a1Regresión polinomial
modelo_r<- lm(Exportaciones~poly(Tipo_de_cambio,2),data = datos)
linea_1<- predict(modelo_r,datos)
a2<-ggplot(datos,mapping = aes(y=Exportaciones,x=Tipo_de_cambio))+
geom_point(color="red")+geom_line(mapping = aes(x=Tipo_de_cambio,
y=linea_1))+theme_minimal()+
xlab("Tipo de cambio")+labs(title ="Regresión polinomica")
E_c_M_2= (Exportaciones-linea_1)^2 %>% mean()
a2 Maquinas de soporte vectorial
library(e1071)
modelo_r<- svm(Exportaciones~Tipo_de_cambio,data = datos)
linea_2<- predict(modelo_r,datos)
a3<-ggplot(datos,mapping = aes(y=Exportaciones,x=Tipo_de_cambio))+
geom_point(color="red")+geom_line(mapping = aes(x=Tipo_de_cambio,
y=linea_2))+theme_minimal()+
xlab("Tipo de cambio")+labs(title ="Maquina de soporte vectorial")
E_c_M_3= (Exportaciones-linea_2)^2 %>% mean()
a3Arboles de decisión
library(rpart)
modelo_r<- rpart(Exportaciones~Tipo_de_cambio,data = datos)
linea_3<- predict(modelo_r,datos)
a4<-ggplot(datos,mapping = aes(y=Exportaciones,x=Tipo_de_cambio))+
geom_point(color="red")+geom_line(mapping = aes(x=Tipo_de_cambio,
y=linea_3))+theme_minimal()+
xlab("Tipo de cambio")+labs(title ="Arboles de desición")
E_c_M_4= mean((Exportaciones-linea_3)^2)
a4Bosques aleatorios
# library(randomForest)
modelo_r<- randomForest(Exportaciones~Tipo_de_cambio,data = datos)
linea_4<- predict(modelo_r,datos)
a5<-ggplot(datos,mapping = aes(y=Exportaciones,x=Tipo_de_cambio))+
geom_point(color="red")+geom_line(mapping = aes(x=Tipo_de_cambio,
y=linea_4))+theme_minimal()+
xlab("Tipo de cambio")+labs(title ="Bosques Aleatorios")
E_c_M_5= (Exportaciones-linea_4)^2 %>% mean()
a5Elección del mejor modelo
Nota: El mejor modelo es en el cual se aplico el metódo de Random forest pues presente un menor \(R^2\).
Corrección de la autocorrelación
Para ver si presenta autocorrelación usamos el test de durwin watson que nos permite ver si se presenta esto. Para corregirla se presenta las siguientes funciones.
Uso de la prueba de autocorrelación
##
## Call:
## lm(formula = Exportaciones ~ Tipo_de_cambio, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -536.5 -200.2 -24.1 190.2 1006.0
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14778.8 949.9 15.56 <2e-16 ***
## Tipo_de_cambio -4021.5 277.7 -14.48 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 286.6 on 84 degrees of freedom
## Multiple R-squared: 0.714, Adjusted R-squared: 0.7106
## F-statistic: 209.7 on 1 and 84 DF, p-value: < 2.2e-16
Resultado: podemos ver que de forma gráfica se presenta autocorrelación
Ahora aplicamos una prueba formal
##
## Durbin-Watson test
##
## data: modelo_r
## DW = 0.5182, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Podemos ver que el DW calculado es mayor a lo permitido así que podemos deducir que si presenta autocorrelación
Corrección
Agregando un resago
## Warning in summary.lm(modelo_a): essentially perfect fit: summary may be
## unreliable
##
## Time series regression with "numeric" data:
## Start = 1, End = 86
##
## Call:
## dynlm(formula = Exportaciones ~ Tipo_de_cambio + L(Exportaciones))
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.073e-13 -2.086e-14 -9.510e-15 -6.000e-17 7.833e-13
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.417e-12 5.901e-13 1.087e+01 <2e-16 ***
## Tipo_de_cambio -1.762e-12 1.637e-13 -1.076e+01 <2e-16 ***
## L(Exportaciones) 1.000e+00 3.440e-17 2.907e+16 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.038e-14 on 83 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 1.477e+33 on 2 and 83 DF, p-value: < 2.2e-16
Analizando los resultados:
##
## Durbin-Watson test
##
## data: modelo_a
## DW = 2.0655, p-value = 0.5445
## alternative hypothesis: true autocorrelation is greater than 0
Nota: Ahora este indicador se aproxima a 2 así que podemos decir que no presenta acutocrrelación.
Algortimo de ourcurt
## Loading required package: lmtest
## Call:
## lm(formula = Exportaciones ~ Tipo_de_cambio, data = datos)
##
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1021.77 2150.97 0.475 0.6360
## Tipo_de_cambio 137.68 629.46 0.219 0.8274
##
## Residual standard error: 165.273 on 83 degrees of freedom
## Multiple R-squared: 6e-04 , Adjusted R-squared: -0.0115
## F-statistic: 0 on 1 and 83 DF, p-value: < 8.274e-01
##
## Durbin-Watson statistic
## (original): 0.51820 , p-value: 1.866e-17
## (transformed): 2.77543 , p-value: 9.999e-01