[R-br] R e C++
ctrucios
ctrucios em gmail.com
Sábado Janeiro 19 16:02:49 BRST 2013
Pessoal aqui fiz alguma coisa para passar parte de um código em c++. Para
que seja reproduzível deixo o código aqui:
*# Codigo em R*
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)
# Codigo em C++
#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;
}
Espero possam me ajudar
Ps: Os for em azul são os que quero saber se podem ser subtituidos por
outras funções.
*Carlos Trucíos Maza
** : ctrucios em gmail.com
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20130119/1aee0d12/attachment.html>
Mais detalhes sobre a lista de discussão R-br