0

背景

我必须在 Shiny 应用程序中使用我的 glm 对象的清除版本,因为原始模型对象太大。因此,我无法通过该清除对象生成预测的标准误差。相反,我将不得不使用方差-协方差矩阵(我从原始模型对象中获取)来计算预测方差/标准误差。在应用程序中,我动态生成假设的观察结果,我想根据这些观察结果预测结果及其标准误差。

问题

我剩下的问题是创建一个可以乘以 var-cov 矩阵的相应模型矩阵。当我使用 model.matrix() 时,我经常会出错,因为我的假设数据并不总是具有多个因子变量的级别。我意识到我可以硬编码一些逻辑来简单地根据我对模型公式的理解来制作模型矩阵。但这似乎已经有了解决方案。

我使用一个类似迷你鸢尾花的数据集做了一个简单的例子,它抛出了我正在谈论的错误。

iris2 <- data.frame(Sepal.Length = c(3, 4), Species = c("setosa", "setosa"))
model.matrix( ~ Sepal.Length*Species, iris2)
4

1 回答 1

0

也许这是一个愚蠢的问题。但是我意识到,当我制作 iris 示例(使用实际的 iris 数据集)时,如果因子变量具有多个级别(即使它在假设中只有一个唯一值),model.matrix() 实际上并不会引发错误样本)。因为它需要为因子变量制作二进制指标,所以在我的小示例中,model.matrix() 没有潜在的参考水平。

我使用了清除模型的“xlevels”对象(model$xlevels),循环遍历具有级别的变量,并像这样重新分解这些列:

for(i in 1:length(model$xlevels)){
newdata[[names(model$xlevels)[i]]] <- factor(newdata[[names(model$xlevels)[i]]], levels = model$xlevels[[i]])
}

请注意,我尝试在 model.matrix() 的“对象”输入中使用已清除的模型对象以及 model$terms,但无济于事。

如果有更好的方法,我将不胜感激有人回应!否则,我希望这会有所帮助。

于 2017-09-07T22:03:42.093 回答