さまざまなサポートを持つガンマ分布の密度を評価しています.これが私のRcppコードです..
// [[Rcpp::export]]
NumericVector fdensv(NumericVector w, NumericMatrix pard){
nj = w.size();
NumericVector out(nj);
for (int j=0;j<nj;j++){
out[j] = R::dgamma(log(w[j]),pard(0,j),pard(1,j),0);
}
return out;
}
sourceCpp("test2.cpp")
コードをテストする
nj = 200
dr = exp(rgamma(nj,2,3))
pr = matrix(runif(400*2,2,4),2,200)
gg = fdensv(dr,pr)
gg2 = NULL
for (i in 1:nj)
{
gg2[i] = dgamma(log(dr[i]),pr[1,i],pr[2,i])
}
cbind(gg,gg2)
all.equal(gg,gg2)
「平均相対差:32.77」ということを取得しました...この不一致はどこから来ているのですか?ありがとう!