我正在仿真COM-Poisson分布中的时间序列。
我正在使用R包“ compoisson” https://cran.r-project.org/web/packages/compoisson/compoisson.pdf 以获得组合分布的样本。
此代码可以正常工作,但是对于大样本量(n> 100)花费了非常长的时间,也许for循环太多。
library(compoisson)
set.seed(10)
a0 = 0.6; a1 = 0.3; b1 = 0.6; v = 1.5; n=15
x = lambda = jj = z = rep(0, n)
nor = vector()
lambda[1] = 5
归一化常数约束和公式:
#normalizing constant
jj[1] <- ceiling(lambda[1]^(1/v))
for (j in 0:jj[1]) {
nor[j] <- ((lambda[1])^j) / ((factorial(j))^v)
}
z[1] <- sum(nor)
x[1] = rcom(n=1,lambda= lambda[1], nu= v, log.z=
log(z[1]))
for (i in 2:n) {
lambda[i] = a0 + a1 * x[i-1] + b1 * lambda[i-1]
jj[i] <- ceiling(lambda[i]^(1/v))
for (j in 0:jj[i]) {
nor[j] <- ((lambda[i])^j) / ((factorial(j))^v)
}
z[i] <- sum(nor)
x[i] = rcom(n=1,lambda= lambda[i], nu= v, log.z=
log(z[i]))
}
如何在R中更有效地做到这一点?