如何避免for循环? (COM-泊松仿真)

时间:2018-07-19 08:22:40

标签: r simulation

我正在仿真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

归一化常数约束和公式:

enter image description here

enter image description here

#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中更有效地做到这一点?

0 个答案:

没有答案