我是使用Metropolis-Hastings算法的新手R用户,用于估算软件受限的混合效果位置和比例模型。
我拥有的数据是纵向和堆叠格式。下面给出了三个参与者的示例代码。注意,为了这个例子,五个时间点是平衡的,但是当使用真实数据时,时间将不可避免地不平衡(即,丢失并被视为连续)。这一事实排除了使用多变量/宽(即GLM)格式。
N = 3 #number of people
PersonID = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)
Time = c(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4)
Y = c(15,16,17,18,19,20,21,22,23,24,25,26,27,28,29)
df = data.frame(PersonID,Time,Y)
我目前正在尝试使用每个人的当前和候选随机拦截来估计数据的可能性(U0i)。这是通过单独评估每个参与者的数据来完成的。然而,在我开始估计这些可能性之前,我想从小处着手并了解R需要什么,所以...
我只是想估计每个参与者数据的单个线性回归模型。从这里开始将让我了解代码需要的样子,以便在数据是堆叠格式时让R与单个参与者数据一起工作。我已经尝试了很多我认为正确的迭代,但这是我最近的失败,
for (person in 1:N){
if (PersonID == person){
summary(lm(df$Y ~ df$Time))
}
}
给出了以下错误:
1: In if (PersonID == person) { :
the condition has length > 1 and only the first element will be used
显然,IF语句并不像我的数据堆叠一样,每个参与者只有1行。我需要数据保持堆叠格式。哦,我尝试过没有成功的IFELSE,但我可能已经把这个代码搞砸了。任何想法都非常感谢。
谢谢!
赖安
答案 0 :(得分:0)
这可能更常见于lapply
。观察
results <- lapply(1:N, function(p) {
summary(lm(Y~Time, df, subset=PersonID==p))
})
基本上,lapply会遍历personIDs 1,2,...,N。如果它们不是顺序整数,您也可以指定unique(df$PersonID)
。然后我们为每个人执行回归,只是为该特定人员ID的数据进行子集化。这会将结果存储在列表中。因此,如果我们想要第一个人的结果,我们可以做到
results[[1]]
如果我们想看到所有模型的系数,我们可以做
lapply(results, coef)