关于数据挖掘:R语言生态学JAGS模拟数据线性回归CormackJollySeber-CJS-模型拟合MCMC-估计动物存活率和可视化

8次阅读

共计 2455 个字符,预计需要花费 7 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=24721  

本文,我通过两个种群生态学家可能感兴趣的例子来阐明应用“JAGS”来模仿数据:首先是线性回归,其次是预计动物存活率(公式化为状态空间模型)。

最近,我始终在致力模仿来自简单分层模型的数据。我当初正在应用 JAGS

模仿数据 JAGS 很不便,因为你能够应用(简直)雷同的代码进行模仿和推理,并且你能够在雷同的环境(即 JAGS)中进行模仿钻研(偏差、精度、区间笼罩)。

线性回归示例

咱们首先加载本教程所需的包:

library(R2jags)

而后间接切入正题,让咱们从线性回归模型生成数据。应用一个 data 块,并将参数作为数据传递。

data{
# 似然函数:
for (i in 1:N){y\[i\] ~  # tau 是精度(1/ 方差)。}

这里,alpha 和 beta 是截距和斜率、tau 方差的精度或倒数、y 因变量和 x 解释变量。

咱们为用作数据的模型参数抉择一些值:

# 模仿的参数 
N  # 样本
x <- 1:N # 预测因子
alpha # 截距
beta  # 斜率
sigma# 残差 sd
 1/(sigma*sigma) # 精度
# 在模仿步骤中,参数被当作数据处理 

当初运行 JAGS; 请留神,咱们监控因变量而不是参数,就像咱们在进行规范推理时所做的那样:

# 运行后果
out

输入有点乱,须要适当格式化:

# 从新格式化输入
mcmc(out)

dim

dat

当初让咱们将咱们用来模仿的模型拟合到咱们刚刚生成的数据中。不再赘述,假如读者相熟 JAGS 线性回归。

# 用 BUGS 语言指定模型
model <-     

for (i in 1:N){y\[i\] ~ dnorm(mu\[i\], tau) # tau 是精度 (1/ 方差)


alpha  截距
beta # 斜率
sigma  # 标准差


# 数据
dta <- list(y = dt, N = length(at), x = x)

# 初始值
inits 


# MCMC 设置
ni <- 10000


# 从 R 中调用 JAGS
jags()

让咱们看看后果并与咱们用来模仿数据的参数进行比拟(见上文):

# 总结后验
print(res)

查看收敛:

# 追踪图
plot(res)

绘制回归参数和残差标准差的后验散布:

# 后验散布
plot(res)

模仿示例

我当初阐明如何应用 JAGS 来模仿来自具备恒定生存和从新捕捉概率的模型的数据。我假如读者相熟这个模型及其作为状态空间模型的公式。

让咱们模仿一下!

# 恒定的生存和从新捕捉概率
for (i in 1:nd){for (t in f:(on-1)){

#概率
for (i in 1:nid){
   # 定义埋伏状态和第一次捕捉时的察看值
   z\[i,f\[i\] <- 1
   mu2\[i,1\] <- 1 * z\[i,f\[i\] # 在第一次捕捉时检测为 1("以第一次捕捉为条件")。# 而后解决当前的状况
   for (t in (f\[i\]+1):non){
      # 状态过程
      mu1\[i,t\] <- phi * z 
      # 察看过程
      mu2\[i,t\] <- p * z

让咱们为参数抉择一些值并将它们存储在数据列表中:

# 用于模仿的参数 
n = 100 # 个体的数量
meanhi <- 0.8 # 存活率
meap <- 0.6 # 重捕率
data<-list

当初运行 JAGS

out

格式化输入:

as.mcmc(out)

head(dat)

我只监测了检测和非检测,但也能够取得状态的模仿值,即集体在每种状况下是生是死。你只须要批改对 JAGS 的调用 monitor=c("y","x") 并相应地批改输入。

当初咱们将 Cormack-Jolly-Seber (CJS) 模型拟合到咱们刚刚模仿的数据中,假如参数不变:

# 倾向性和束缚
for (i in 1:nd){for (t in f\[i\]:(nn-1)){mehi ~ dunif(0, 1) # 均匀生存率的先验值
Me ~ dunif(0, 1) # 均匀重捕的先验值
# 概率
for (i in 1:nd){
   # 定义第一次捕捉时的埋伏状态
   z\[i\]\] <- 1
   for (t in (f\[i\]+1):nions){
      # 状态过程
      z\[i,t\] ~ dbern(mu1\[i,t\])
      # 察看过程
      y\[i,t\] ~ dbern(mu2\[i,t\])

筹备数据:

# 标记的场合的向量
gerst <- function(x) min(which(x!=0))
# 数据
jagta
# 初始值
for (i in 1:dim\]){min(which(ch\[i,\]==1))
      max(which(ch\[i,\]==1))

function(){list(meaphi, mep , z) }

咱们想对生存和从新捕捉的概率进行推断:

规范 MCMC 设置:

ni <- 10000

筹备运行 JAGS

# 从 R 中调用 JAGS
jags(nin = nb, woy = getwd() )

总结后验并与咱们用来模仿数据的值进行比拟:

print(cj3)

十分靠近!

跟踪图

trplot

后验分布图

denplot


最受欢迎的见解

1.matlab 应用贝叶斯优化的深度学习

2.matlab 贝叶斯隐马尔可夫 hmm 模型实现

3.R 语言 Gibbs 抽样的贝叶斯简略线性回归仿真

4.R 语言中的 block Gibbs 吉布斯采样贝叶斯多元线性回归

5.R 语言中的 Stan 概率编程 MCMC 采样的贝叶斯模型

6.Python 用 PyMC3 实现贝叶斯线性回归模型

7.R 语言应用贝叶斯 层次模型进行空间数据分析

8.R 语言随机搜寻变量抉择 SSVS 预计贝叶斯向量自回归(BVAR)模型

9.matlab 贝叶斯隐马尔可夫 hmm 模型实现

正文完
 0