如何处理“零星的”多重措施?

时间:2016-01-27 12:13:31

标签: r data-structures statistics

我发现自己正在分析我真不知道如何处理的数据。我接受任何建议,即使是关键字也会有所帮助。理想情况下,我正在寻找在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中实现这一点?我没有在任何地方找到类似数据结构的示例。这可能类似于一种非常不平衡的重复测量数据结构,但实际上该措施是同时期的。

1 个答案:

答案 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代码以适应新格式。