SSブログ

CARBayesで2次元のCAR [統計]

前回のデータを今度はRのCARBayesパッケージで解析してみる。以前ためしたときの記事→R: CARBayesをためす

以前は、分布別に関数がわかれていたが、CARBayes 3.0ではまとめられていて、familyで指定するようになっている。

library(CARBayes)
qg <- read.csv("Qglauca.csv")

n.site <- nrow(qg)
adj <- matrix(0, nrow = n.site, ncol = n.site)
## corner
adj[1, 2] <- 1
adj[1, 11] <- 1
adj[10, 9] <- 1
adj[10, 20] <- 1
adj[191, 181] <- 1
adj[191, 192] <- 1
adj[200, 190] <- 1
adj[200, 199] <- 1
## upper side
for (i in seq(11, 181, 10)) {
  adj[i, i - 10] <- 1
  adj[i, i + 1] <- 1
  adj[i, i + 10] <- 1
}
## lower side
for (i in seq(20, 190, 10)) {
  adj[i, i - 10] <- 1
  adj[i, i - 1] <- 1
  adj[i, i + 10] <- 1
}
## left side
for (i in 2:9) {
  adj[i, i - 1] <- 1
  adj[i, i + 10] <- 1
  adj[i, i + 1] <- 1
}
## right side
for (i in 192:199) {
  adj[i, i - 1] <- 1
  adj[i, i - 10] <- 1
  adj[i, i + 1] <- 1
}
## inside
for (i in seq(11, 181, 10)) {
  for (j in 1:8) {
    adj[i + j, i + j - 1] <- 1
    adj[i + j, i + j - 10] <- 1
    adj[i + j, i + j + 1] <- 1
    adj[i + j, i + j + 10] <- 1
  }
}

## Intrinsic Conditional Autoregressive model
fit <- iarCAR.re(N ~ 1, W = adj, family = "poisson", data = qg,
                 burnin = 1000, n.sample = 41000, thin = 20)

隣のメッシュを指定するところはもっと効率的にできそうな気もするが。

結果

軌跡を表示

> plot(fit$samples[["beta"]])

Rplot.png

要約量の表示

> print(fit)
#################
#### Model fitted
#################
Likelihood model - Poisson (log link function) 
Random effects model - Intrinsic CAR
Regression equation - N ~ 1

############
#### Results
############
Posterior quantiles and DIC

             Median    2.5%   97.5% n.sample % accept
(Intercept) -0.5132 -0.7926 -0.2722     2000       60
tau2         1.2885  0.6706  2.3089     2000      100

DIC =  489.3751       p.d =  53.7228 

元のデータと95%信用区間を重ねてプロットしてみる。

library(ggplot2)
ggplot(data.frame(x = 1:n.site,
                  y = qg$N,
                  ymean = fit$fitted.values[, "Mean"],
                  ymax = fit$fitted.values[, "97.5%"],
                  ymin = fit$fitted.values[, "2.5%"])) +
    geom_point(aes(x = x, y = y)) +
    geom_pointrange(aes(x = x, y = ymean, ymax = ymax, ymin = ymin),
                  colour = "red", alpha = 0.5, shape = 3) +
    xlab("Index") + ylab("N") + ylim(0, 9)

Rplot2.png
結果は、OpenBUGSのcar.normalに ちかいようだ。


タグ:MCMC R
nice!(1)  コメント(0)  トラックバック(1) 
共通テーマ:日記・雑感

nice! 1

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 1