我发现自己正在分析我真不知道如何处理的数据。我接受任何建议,即使是关键字也会有所帮助。理想情况下,我正在寻找在Jags上运行贝叶斯分层模型的提示(我正在研究R和RJags)。
想象一下,例如10个人报告他们对5个项目的看法。
困难在于,对于某些个体,我对一个(或多个)项目有两个或三个感知,在其他情况下我可能有NA
个。因此,数据的结构本质上是不平衡的。以下是数据结构的示例(id是标识符和Kn正在测量的项目):
[id] [K1] [K2] [K3] [K4] [K5] [K6]
[1] 1 ?? -1 2 3 -3 4
[2] 2 NA -2 1 2 -4 5
[3] 3 0 NA NA 3 -2 3
[4] 4 NA -2 2 NA NA 5
[5] 5 2 -1 3 4 -5 4
[6] 6 1 NA 1 1 -1 3
我提出的解决方案是为那些具有多个测量值的个体复制行,并为那些除了多次测量的项目之外的项目“填充”行,并使用唯一可用的度量。举一个简单的例子,让个人1对项目K1有两个可用的度量(例如1和2):
[id] [K1] [K2] [K3] [K4] [K5] [K6]
[1] 1 1 -1 2 3 -3 4
[2] 1 2 -1 2 3 -3 4
[3] 2 NA -2 1 2 -4 5
[4] 3 0 NA NA 3 -2 3
[5] 4 NA -2 2 NA NA 5
[6] 5 2 -1 3 4 -5 4
[7] 6 1 NA 1 1 -1 3
id
是个人标识符,现在id == 1对K1有两种不同的度量。我不能平均,我真的需要一种系统地包含这些额外信息的方法。然后,我使用嵌套索引在JAGS中运行分层模型,为每个个体提供一个系数,而不是每行一个系数。我想知道另一种选择可能是使用“选择器”,0
s和值1
的矩阵表示正在测量的项目。是否有可能在Jags中实现这一点?我没有在任何地方找到类似数据结构的示例。这可能类似于一种非常不平衡的重复测量数据结构,但实际上该措施是同时期的。
答案 0 :(得分:1)
只需创建一个包含id,measure_id和value的长表,而不是使用NA的宽表:
n.subjects <- 10
new.df <- data.frame( id = rep(old.df$id, 6),
measure_id = rep(1:6, each=n.subjects)
values = c(old.df$K1,
old.df$K2,
old.df$K3,
old.df$K4,
old.df$K5,
old.df$K6))
df <- df[!is.na(df$value)] # remove measurements with NA's
然后,您可以轻松修改JAGS代码以适应新格式。