我在“贝叶斯方法:社会和行为方法”(2015),第三版杰夫吉尔一书中提到了两种指定贝叶斯分层模型的方法。
本书中的三个例子(如下所示)是关于贝叶斯分层模型的。模型中的主要差异用红色圈出:
在示例1中,嵌套结构通过嵌套索引 alpha [state.id [i]]表示。两个for循环分别指定。但是,在示例2和3中,层次结构是通过嵌套for循环而不是嵌套索引来指定的。此外,i
和j
出现在相同的方括号内(示例2中为Q[i,j]
,示例3中为mu[i,j]
),与仅有一个索引的示例1形成对比(i
或j
)会出现在方括号中。
我的问题: 嵌套索引VS之间有什么区别。在指定贝叶斯分层模型时嵌套for循环?示例1是否可以采用与示例2和3类似的方式建模,反之亦然?如何在两种方法之间进行选择?
如果您对了解示例的详细信息感到更舒服,我将为您提供完整的示例。
谢谢!
答案 0 :(得分:0)
是的,示例1可以类似于示例2和3编写,反之亦然。如果第一个迭代器的每个值具有与第二个迭代器相同的值,则这是最简单的。否则你最终会得到像
这样的东西for(i in 1:VALUE) {
for (j in 1:TIME[i]){
...
}
}
然后使用矩阵(或更一般地说是阵列),例如示例2中的Q和示例3中的mu不是很自然。
我通常使用嵌套索引方法,因为我通常将数据存储在R data.frame中,这很容易适用于嵌套索引方法。在第一个例子中,state.id,contracting,gov.influence等都是data.frame的列。我还发现嵌套索引中的代码更容易阅读,但是我可以通过创建信息迭代器来改进我在使用嵌套for循环的情况下的代码。
因为你可以用任何一种方式编写任何一个例子,你选择的最终是一个偏好的问题。