JAGS 中缺少预测数据模型

2024-03-10

我正在尝试在 JAGS 中编写最简单的缺失数据模型。 一个预测变量(有一些缺失的数据点)和一个结果变量。 我知道这个例子不是最有用或最现实的,但它可以帮助我在继续处理更复杂的缺失预测数据场景之前解决模型问题。

模型和数据如下,但这是编译错误:

  Error in jags.model("MISSING_model.txt", data = dataList, inits = initsList, : 
    RUNTIME ERROR:
  Unable to resolve the following parameters:
  x[3] (line 5)
  x[4] (line 5)
  x[7] (line 5)
  x[13] (line 5)
  x[18] (line 5)
  x[20] (line 5)
  Either supply values for these nodes with the data
  or define them on the left hand side of a relation.

这些是缺失的数据点;我确实在下面定义了它们,所以我不确定错误在哪里。

代码:

# DEFINING THE DATA:
myData <-  matrix (
           c(64.0, 62.3,   NA,   NA, 64.8, 57.5,   NA, 70.2, 63.9, 71.1, 
             66.5, 68.1,   NA, 75.1, 64.6, 69.2, 68.1,   NA, 63.2,   NA, 
             64.1, 71.5, 76.0, 69.7, 73.3, 61.7, 66.4, 65.7, 68.3, 66.9,
            136.4,215.1,173.6,117.3,123.3, 96.5,178.3,191.1,158.0,193.9, 
            127.1,147.9,119.0,204.4,143.4,124.4,140.9,164.7,139.8,110.2, 
            134.1,193.6,180.0,155.0,188.2,187.4,139.2,147.9,178.6,111.1) ,
             nrow=30  )
colnames(myData) <- c("height","weight")
myData <- as.data.frame(myData)

我在这里定义了一个缺失的数据索引:

# this index will help setup priors and let us look at posterior values for missing x's
  mIdx <- ifelse( is.na(myData$height) , 1 , 0)
  mIdx <- sapply( 1:length(mIdx), 
                  function(n) mIdx[n]*sum(mIdx[1:n]))
    # result: mIdx = 
      #              0, 0, 1, 2, 0, 0, 3, 0, 0, 0, 
      #              0, 0, 4, 0, 0, 0, 0, 5, 0, 6, 
      #              0, 0, 0, 0, 0, 0, 0, 0, 0, 0

# add missing index to myData
  myData$mIdx <- mIdx

这是数据准备部分

# DATA PREP:
  y = myData[,"weight"]
  x = myData[,"height"]
  meanY = mean(y,na.rm=TRUE) 
  meanX = mean(x,na.rm=TRUE) 
  sdY = sd(y,na.rm=TRUE)     
  sdX = sd(x,na.rm=TRUE)
  mIdx = myData[,"mIdx"]
  Ntotal = length(y)
# Specify the data list for JAGS
    dataList = list(
    x = x ,
    y = y ,
    mIdx = mIdx , 
    meanY = meanY ,
    meanX = meanX ,
    sdY = sdY ,
    sdX = sdX ,
    Ntotal = Ntotal
)

这是模型

# THE MODEL
# Standardize the data:
data {
  for ( i in 1:Ntotal ) {
      zx[i] <- ifelse ( mIdx[i]==0, ( x[i] - meanX ) / sdX , x[i] ) # skips NA's
      zy[i] <- ( y[i] - meanY ) / sdY
    }
}
# Specify the model for standardized data:
model {
  for ( i in 1:Ntotal ) {
    zy[i] ~ dt( zbeta0 + zbeta1 * zx[i] , 1/zsigma^2 , nu )
  }
# prior for imputing missing zx's
  zx ~ dnorm( 0 , 1 )
# Priors vague on standardized scale:
  zbeta0 ~ dnorm( 0 , 1/(10)^2 )  
  zbeta1 ~ dnorm( 0 , 1/(10)^2 )
  zsigma ~ dunif( 1.0E-3 , 1.0E+3 )
  nu ~ dexp(1/30.0)
# Transform back to original scale:
  beta1 <- zbeta1 * ysd / xsd  
  beta0 <- zbeta0 * ysd  + ym - zbeta1 * xm * ysd / xsd 
  sigma <- zsigma * ysd
  x <- zx*sdX + meanX
}

最后是 MCMC 链的初始值:

# INITIALIZE VALUES
 # values hardcoded for simplicity
 beta0 = 0   ;  zbeta0 = 0
 beta1 = 3.6 ;  zbeta1 = 0.5
 sigma = 30  ;  zsigma = 1
 nu = 30
# initial values for missing x data:
  xInit = rep( NA , length(x) )
  xInit[3] <- 68 ; xInit[4]<- 64 ; xInit[7] <- 68
  xInit[13] <- 64 ; xInit[18] <- 68 ; xInit[20] <- 64
initsList = list( beta0=beta0 ,  beta1=beta1 , zbeta0=zbeta0 , zbeta1=zbeta1 , 
                zsigma=zsigma , sigma=sigma, nu = nu , x=xInit )

美洲虎叫道:

jagsModel = jags.model( "MISSING_model.txt" , data=dataList , inits=initsList , 
                      n.chains=nChains , n.adapt=adaptSteps )

该错误似乎是由于对丢失数据的先验设置不当造成的:

# imputed prior for missing zx's
  zx ~ dnorm( 0 , 1 )

我读到,当存在 NA 时,jags 会自动在数据和之前的数据之间切换,但我不确定我的代码对于 zx 来说哪里出了问题。

感谢您的提示和帮助。


该代码有几个错误。特别是,模型中的某些值被错误命名(例如,ysd 而不是 sdY),并且初始值被赋予非随机变量(beta0、beta1 和 sigma)。

但有两个问题是估算的关键问题:

首先,必须对向量的每个位置进行先验插补。代替

# prior for imputing missing zx's
zx ~ dnorm( 0 , 1 )

应该使用

# prior for imputing missing zx's
for (i in 1:Ntotal){
  zx[i] ~ dnorm( 0 , 1 )
}

其次,显然 JAGS 不乐意用 NA 来计算值data环境。一个简单的解决方案是在中创建这些标准化变量R, 之外JAGS model.

这里提供了完全可重现的代码

# DEFINING THE DATA:
myData <-  matrix (
  c(64.0, 62.3,   NA,   NA, 64.8, 57.5,   NA, 70.2, 63.9, 71.1, 
    66.5, 68.1,   NA, 75.1, 64.6, 69.2, 68.1,   NA, 63.2,   NA, 
    64.1, 71.5, 76.0, 69.7, 73.3, 61.7, 66.4, 65.7, 68.3, 66.9,
    136.4,215.1,173.6,117.3,123.3, 96.5,178.3,191.1,158.0,193.9, 
    127.1,147.9,119.0,204.4,143.4,124.4,140.9,164.7,139.8,110.2, 
    134.1,193.6,180.0,155.0,188.2,187.4,139.2,147.9,178.6,111.1) ,
  nrow=30  )
colnames(myData) <- c("height","weight")
myData <- as.data.frame(myData)



# this index will help setup priors and let us look at posterior values for missing x's
mIdx <- ifelse( is.na(myData$height) , 1 , 0)
mIdx <- sapply( 1:length(mIdx), 
                function(n) mIdx[n]*sum(mIdx[1:n]))
# result: mIdx = 
#              0, 0, 1, 2, 0, 0, 3, 0, 0, 0, 
#              0, 0, 4, 0, 0, 0, 0, 5, 0, 6, 
#              0, 0, 0, 0, 0, 0, 0, 0, 0, 0

# add missing index to myData
myData$mIdx <- mIdx



# DATA PREP:
y = myData[,"weight"]
x = myData[,"height"]
meanY = mean(y,na.rm=TRUE) 
meanX = mean(x,na.rm=TRUE) 
sdY = sd(y,na.rm=TRUE)     
sdX = sd(x,na.rm=TRUE)
Ntotal = length(y)
zx <- zy <- NULL
for ( i in 1:Ntotal ) {
  zx[i] <- ifelse ( mIdx[i]==0, ( x[i] - meanX ) / sdX , x[i] ) # skips NA's
  zy[i] <- ( y[i] - meanY ) / sdY
}
# Specify the data list for JAGS
dataList = list(
  zx = zx ,
  zy = zy ,
  meanY = meanY ,
  meanX = meanX ,
  sdY = sdY ,
  sdX = sdX ,
  Ntotal = Ntotal
)



# THE MODEL

model_string <- "
# Specify the model for standardized data:
model {
  for ( i in 1:Ntotal ) {
    zy[i] ~ dt( zbeta0 + zbeta1 * zx[i] , 1/zsigma^2 , nu )
  }
  # prior for imputing missing zx's
  for (i in 1:Ntotal){
    zx[i] ~ dnorm( 0 , 1 )
    # Estimated covariates
    ximp[i] <- zx[i]*sdX + meanX
  }
  # Priors vague on standardized scale:
  zbeta0 ~ dnorm( 0 , 1/(10)^2 )  
  zbeta1 ~ dnorm( 0 , 1/(10)^2 )
  zsigma ~ dunif( 1.0E-3 , 1.0E+3 )
  nu ~ dexp(1/30.0)
  # Transform back to original scale:
  beta1 <- zbeta1 * sdY / sdX  
  beta0 <- zbeta0 * sdY  + meanY - zbeta1 * meanX * sdY / sdX 
  sigma <- zsigma * sdY
}
"

# INITIALIZE VALUES
# values hardcoded for simplicity
zbeta0 = 0
zbeta1 = 0.5
zsigma = 1
nu = 30
# initial values for missing x data:
xInit = rep( NA , length(x) )
xInit[3] <- 68 ; xInit[4]<- 64 ; xInit[7] <- 68
xInit[13] <- 64 ; xInit[18] <- 68 ; xInit[20] <- 64
initsList = list( zbeta0=zbeta0 , zbeta1=zbeta1 , 
                  zsigma=zsigma , nu = nu , x=xInit )

nChains=2

library(rjags)
jagsModel = jags.model( textConnection(model_string) , data=dataList , inits=initsList , 
                        n.chains=nChains , n.adapt=adaptSteps )

update(jagsModel,5000)

# Running the model
samp=coda.samples(jagsModel, variable.names=c("beta0", "beta1", "sigma", "nu", "ximp"), 
                  n.iter=2000)

plot(samp)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAGS 中缺少预测数据模型 的相关文章

  • 在 R 中将文本文件拆分为段落文件

    我正在尝试将一个巨大的 text 文件拆分为多个 text 文件 每个文件仅包含一个段落 让我举个例子 我需要这样的文字 这是第一段 这没有任何意义 因为这只是一个例子 这是第二段 和前一段一样毫无意义 另存为两个独立的 txt 文件 其中
  • 将非平凡函数应用于 data.table 的有序子集

    Problem 我正在尝试使用我新发现的 data table 功能 永久 来计算一堆数据的频率内容 如下所示 Sample Channel Trial Voltage Class Subject 1 1 1 196 82253 1 1 1
  • 从 data.frame 创建新列

    我有一个长格式的数据集 其中测量 时间 嵌套在 Networkpartners NP 中 而 Networkpartners NP 又嵌套在人员 ID 中 下面是它的示例 真实数据集有数千行 ID NP Time Outcome 1 11
  • 使用 ggplot_build 和 ggplot_gtable 后使用 ggsave 保存图形

    我正在通过更改 ggplot build 生成的数据来修改使用 ggplot 构建的图表 原因类似于包括 geom boxplot 中填充美学中使用的缺失因子水平的空间 https stackoverflow com questions 1
  • 网页抓取(R 语言?)

    我想获取中间栏中的公司名称this http www consumercomplaints in bysubcategory mobile service providers page 1 html页面 以蓝色粗体书写 以及登记投诉者的位置
  • 在R中绘制3x3方形网格

    我得到了一个数字列表 n 9 想将它们画在一个 3 3 的正方形网格中 每个网格填充相应的数字 我如何在 R 中执行此操作而不安装额外的软件包 例如情节 非常感谢 这里有一个ggplot解决方案比我预期的要难一点 Setup the dat
  • geom_密度匹配geom_histogram binwitdh

    我想在 ggplot2 中的分布条形图上添加一条线以显示平均分布 但遇到了麻烦 像这样的 ggplot 调用 ggplot x aes date received geom histogram aes y count binwidth 30
  • 为什么 rbind 会抛出警告

    这与是否有更优雅的方法将不规则的数据转换为整洁的数据框 https stackoverflow com questions 25102617 are there more elegant ways to transform ragged d
  • 如何更改 Quarto pptx 中的字体格式

    我正在 R 中使用 Quarto 创建 pptx 要更改我尝试更改的默认字体格式mainfont范围 但是当我渲染它时 最终的 pptx 文件具有默认字体 Calibri 这是我的文件 YAML 将 Quarto 文件渲染为 pptx 时如
  • R 中使用 randomForest 进行内存高效预测

    TL DR我想知道使用基于大型数据集 数百个特征 数十万行 构建的随机森林模型执行批量预测的内存有效方法 Details 我正在处理一个大型数据集 内存中超过 3GB 并且想要使用以下方法进行简单的二进制分类randomForest 由于我
  • 如何获得 R 帮助?

    R 包可能有哪些可用文档 例如我尝试理解sp包裹 此外help sp 还有哪些用于搜索帮助和文档的其他功能 获取有关您知道其名称的函数的帮助 Use http www inside r org r doc utils Question或者
  • 创建后修改 ggplot 对象

    有没有首选的修改方式ggplot创建后的对象 例如 我建议我的学生将 r 对象与 pdf 文件一起保存以供以后更改 library ggplot2 graph lt ggplot mtcars aes x mpg y qsec fill c
  • 计算数据框中每一行的 R 条件运行总和

    我想创建一个等于 data Rating 的运行总和的列 假设第 3 列和第 4 列中有两个条件成立 特别是 data Year 换句话说 这应该计算直到上一年为止每个 id 的评分累积总和 它应该对数据框中的每一行 大约 50 000 行
  • 粘贴两个 data.table 列

    dt lt data table L 1 5 A letters 7 11 B letters 12 16 L A B 1 1 g l 2 2 h m 3 3 i n 4 4 j o 5 5 k p 现在我想粘贴列 A 和 B 以获得一个新
  • 当我用一个观察值运行回归时,为什么“fastLm()”会返回结果?

    为什么fastLm 当我用一项观察进行回归时返回结果吗 下面为什么不lm and fastLm 结果相等吗 library Rcpp library RcppArmadillo library data table set seed 1 D
  • svyby比例的置信区间

    是否存在创建置信区间的现有函数 从一个svyby比例对象 在我的例子中 是一个二进制项目的交叉表survey包裹 我经常比较各组之间的比例 如果有一个可以提取置信区间的函数 使用调查函数svyciprop而不是confint 下面的示例显示
  • R 中的 huxtable 即使有选项也默认为科学记数法(scipen=999)

    我试图生成像样的桌子 并在过去的一周尝试了很多软件包 我的头在游泳 今天早上开始使用 package huxtable 并试图摆脱科学记数法 x lt mtcars 1 5 1 2 x mpg lt x mpg 10000000 get s
  • R Leaflet:添加多边形时传递 popupOptions。

    Within addPolygons 有一个popup参数就像addPopups 功能 区别 我认为 是当弹出窗口创建时addPolygons 可以单击多边形内的任意位置来触发弹出窗口 但是如果addPopups 被使用 单个lng and
  • R 编程中的字符串分割

    目前 下面的脚本将组合的项目代码拆分为特定的项目代码 rule2 lt c MR df 1 lt test grep paste rule2 sep collapse test Name y SpaceName 1 lt function
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是

随机推荐

  • Android 导航栏覆盖我的视图

    我在 Nexus 等设备上遇到 Android 导航栏问题 简单地说 在所有没有硬件菜单按钮的设备上 让我更详细地解释一下这个问题 我有一个应用程序 有 3 个部分 内容 ActionBar 和带有 SeekBar 的底部面板 Action
  • 选择/拖动文本时停止页面滚动

    我有一个页面 我不希望用户能够滚动 为了防止这种情况 我只是将主体设置为隐藏溢出样式 直到用户尝试选择一些文本然后拖动到底部为止 这已经足够了 然后窗口会随着用户的拖动而滚动 我怎样才能防止这种情况发生 use position fixed
  • TabView 在切换选项卡时重置导航堆栈

    我有一个简单的 TabView TabView NavigationView VStack NavigationLink destination Text Detail Text Go to detail tabItem Text Firs
  • 从 RGBA 像素字节数据重建 UIImage 时出现问题

    我需要从单个灰度图像 红色 橙色 黄色等 创建 12 个彩色图像 源图像实际上是PNG RGBA 我正在使用我找到的一个库 https github com PaulSolt UIImage Conversion https github
  • 硒元素位置

    有没有一种简单的方法可以从另一个元素中查找子元素 这两个项目都已使用 PageFactory 定位 我们有一组包含许多模块的容器 我想确保它们显示在正确的位置 该API似乎只有以下方法 webElement findElement s By
  • Powershell 删除项目无法从函数中运行

    我需要将别名 cd 替换为名为 cd 的函数 我尝试从函数中删除别名 但没有成功 以下是一个简单的测试脚本 function remove alias get command cd Remove Item Path Alias cd get
  • 如何在 SVN Tortoise Commit 上不显示对话框?

    我有一个修改一些文件的过程 我想通过命令行 tortoise SVN 提交它们 而不必单击 确定 出现对话框 我的脚本被迫等待 直到我单击 确定 以下是我正在使用的论点 TortoiseProc exe command commit pat
  • ES6 的 webcomponents-lite 在 IE 11 和 10 中不起作用

    我们使用带有 ES6 语法的 WebComponents Web组件 http webcomponents org 填充材料webcomponents lite js 不包括 ShadowDOM 无法在 IE 11 中运行而 webcomp
  • 调整 UILabel 的大小以适合自定义 UITableViewCell 内的文本,无论宽度如何

    我试图让单元格中的标签具有正确的尺寸 无论设备或方向如何 我能够正确调整行高的大小 我还可以正确设置标签高度cellForRowAtIndexPath 并可以在我的日志中查看 但是 当它到达willDisplayRowAtIndexPath
  • 为什么在Python中关闭Sqlite3的游标

    使用Python时关闭游标有什么好处sqlite3模块 https docs python org 2 7 library sqlite3 html module sqlite3 或者它只是一个人工制品数据库API v2 0 https w
  • matplotlib 轴标签格式

    我对轴刻度标签的格式有疑问 我禁用了 y 轴的偏移 ax1 ticklabel format style sci useOffset False 并试图将其采用科学格式 但我得到的只是 0 00355872 但我期望的是这样的 3 5587
  • 在 EmberJS 中构建自动刷新的嵌套列表

    我如何在 EmberJS 中动态生成和更新嵌套列表 我的模型看起来像 App Node Em Object extend id 0 parentId 0 title The parentId代表id直接父元素的 如果我有数据 控制器内容中的
  • 如何在使用“.NETFramework,Version=v4.5.2”的项目中安装 System.Drawing.Common?

    我试图在 NETFramework Version v4 5 2 应用程序中用 C 编写一些单元测试 但所有测试都会给出下一个错误 System IO FileNotFoundException 无法加载文件或程序集 System Draw
  • SDL2 - 垂直同步不起作用

    我在程序中使用垂直同步 在我最小化窗口之前它工作正常 我在创建渲染器时这样做了 renderer SDL CreateRenderer window 1 SDL RENDERER ACCELERATED SDL RENDERER PRESE
  • 为什么 getoldtweets3 库提供 404 错误?

    我正在使用 getoldtweets3 库来抓取电晕爆发信息 我收到这个错误 error C Users Vilius anaconda3 python exe C Users Vilius PycharmProjects Sentimen
  • 使用 JSoup 解析 Html

    我正在尝试解析以下 URL 的 html http ocw mit edu courses aeronautics and astronautics 16 050 Thermal energy fall 2002 http ocw mit
  • 使用 DllImport 调用 C++ 函数

    这是基本的 如何从 C DllImport 调用下面的函数 SubscribeNewsFeed class LogAppender public L Append public LogAppender outfile TestLog txt
  • 如何声明二维字符串数组?

    string Tablero new string 3 3 我需要有一个 3x3 数组排列来保存信息 我如何在 C 中声明它 string Tablero new string 3 3 您还可以使用数组初始值设定项语法在同一行中实例化它 如
  • 如何强制 Gradle 重新下载依赖项?

    如何告诉 Gradle 从存储库重新下载依赖项 通常 您可以使用命令行选项刷新缓存中的依赖项 刷新依赖项 https docs gradle org current userguide dependency management html
  • JAGS 中缺少预测数据模型

    我正在尝试在 JAGS 中编写最简单的缺失数据模型 一个预测变量 有一些缺失的数据点 和一个结果变量 我知道这个例子不是最有用或最现实的 但它可以帮助我在继续处理更复杂的缺失预测数据场景之前解决模型问题 模型和数据如下 但这是编译错误 Er