INLA パッケージhttp://www.r-inla.orgをご覧ください。
これはベイジアンですが、モデルの速度を頻度論的モデル (glm、glmm) と比較できるようにする、統合されたネストされたラプラス近似を使用します。
L = 40 の Ricardo Oliveros-Ramos から開始しmu
ます。最初にデータセットを準備します。env
dataset <- data.frame(
count = rpois(length(mu), lambda = mu),
year = rep(seq_len(T), L),
site = rep(seq_len(L), each = T),
env = as.vector(env)
)
library(reshape2)
n <- as.matrix(dcast(year ~ site, data = dataset, value.var = "count")[, -1])
dataset$year2 <- dataset$year
モデルを実行する
library(INLA)
system.time(
model <- inla(
count ~
env +
f(year, model = "ar1", replicate = site) +
f(year2, model = "iid"),
data = dataset,
family = "poisson"
)
)
user system elapsed
0.18 0.14 3.77
Ricardo のソリューションと速度を比較する
system.time(test <- fitModel(obs=n, env=env, T=T, L=L))
user system elapsed
11.06 0.00 11.06
速度を頻度論的 glmm と比較します (自己相関なし)
library(lme4)
system.time(
m <- glmer(
count ~ env + (1|site) + (1|year),
data = dataset,
family = poisson
)
)
user system elapsed
0.44 0.00 0.44
自己相関のない inla の速度
system.time(
model <- inla(
count ~
env +
f(site, model = "iid") +
f(year, model = "iid"),
data = dataset,
family = "poisson"
)
)
user system elapsed
0.19 0.11 2.09