我正在为系统发育广义线性模型的所有可能模型运行代码。我遇到的问题是为每个模型提取和保存 beta 系数。
我想将系数保存到矩阵中,其中列对应于特定变量,行对应于公式。出现问题是因为每个模型的变量都不同。因此,不能简单地将系数行绑定到矩阵。
下面的示例显示了我在问题上的解决方法:
y = rnorm(10)
inpdv = matrix(c(rnorm(10), runif(10), rpois(10, 1)), ncol = 3)
colnames(inpdv) = c("A", "B", "C")
data = cbind(y, inpdv)
model.mat = expand.grid(c(TRUE,FALSE), c(TRUE,FALSE), c(TRUE,FALSE))
names(model.mat) = colnames(inpdv)
formula = apply(model.mat, 1, function(x)
paste(colnames(model.mat)[x], collapse=" + "))
formula = paste("y", formula, sep = " ~ ")
formula[8] = paste(formula[8], 1, sep = "")
beta = matrix(NA, nrow = length(formula), ncol = 3)
for(i in 1:length(formula)){
fit = lm(formula(formula), data)
## Here I want to extract the beta coeffecients here into a n * k matrix
## However, I cannot find a way to assign the value to the right cell in the matrix
}
所以我想每个系数都需要放入相应的单元格中,但我想不出一种快速有效的方法。
真正的分析将发生大约 30,000 次,因此任何有关效率的提示也将不胜感激。
编辑:例如,y ~ a + c 模型的输出需要采用以下形式
a NA b
其中字母代表该模型的系数。下一个模型可能是 y ~ b + c ,然后将其添加到底部。所以结果现在看起来像
a NA b
NA b c