library(Rcpp)
nbur = 10
nobs = 10
ntot = nbur + nobs
eboot = rnorm(ntot)
d = 2
p = 1
q= 2
garchorder = c(p,q)
aux3 = cumsum(garchorder)
coeff = c(0.01,0.1,0.7,0.1)
aux1 = 0.01/(1-0.1-0.7-0.1)
s2_boot = y_boot = c()
aux2 = sqrt(aux1)
s2_boot[1:d] = aux1
y_boot[1:d]=eboot[1:d]*aux2
for (m in (d+1):ntot){
s2_boot[m] = coeff[1] + sum(coeff[2:(p+1)]*y_boot[m - (1:p)]^2) + sum(coeff[(p+2):(aux3[2]+1)]*s2_boot[m - (1:q)])
y_boot[m]=eboot[m]*sqrt(s2_boot[m])
}
y_boot
Utilizando o codigo em C++ consegui que faça a mesma coisa, só que quero saber se os 2 for que utilizo para obter s1 e s2 podem ser subtituidos por outras funções (mais diretas já prontas do C) para não utilizar for.
Deixo aqui como faço para chamar utilizando o Rcpp a função em C++
sourceCpp("sbootgarch.cpp")
teste1 = sbootgarch(d, aux3, aux1, eboot, coeff, p, q)
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector sbootgarch(int d, NumericVector aux3, double aux1, NumericVector eboot, NumericVector coeff, int p, int q) {
int ntot = eboot.size();
NumericVector y_boot(ntot), s2_boot(ntot);
double s1=0,s2=0,aux2 = sqrt(aux1);
for(int n=0; n<d; n++){
s2_boot[n] = aux1;
y_boot[n] = eboot[n]*aux2;
}
for(int m=d; m<ntot+1; m++){
s1 = 0;
s2 = 0;
for(int k=1; k<p+1;k++) s1 += coeff[k]*pow(y_boot[m-k],2);
for(int l=1; l<q+1;l++) s2+= coeff[p+l]*s2_boot[m - l];
s2_boot[m] = coeff[0] + s1 + s2;
y_boot[m] = eboot[m]*sqrt(s2_boot[m]);
}
return y_boot;
}
Ps: Os for em azul são os que quero saber se podem ser subtituidos por outras funções.