【问题标题】:How to run regTermTest on every coefficient in a regression model in R?如何在 R 的回归模型中对每个系数运行 regTermTest?
【发布时间】:2018-02-20 16:57:07
【问题描述】:

我想使用 survey 包的 regTermTest 函数(如 here 所述)运行 Wald 检验以评估模型中每个系数的统计显着性。

regTermTest 的语法调用model,后跟test.terms,但如果您列出多个测试术语,它似乎将它们一起评估而不是单独评估。

library(caret) # for the GermanCredit sample dataset
data(GermanCredit)
mod1 <- glm(Class ~ Age + as.factor(ForeignWorker) + Property.RealEstate + Housing.Own + CreditHistory.Critical, data = GermanCredit, family = binomial(link='logit'))
library(survey)
regTermTest(mod1, c("Age", "ForeignWorker", "Property.RealEstate", "Housing.Own", "CreditHistory.Critical"))
#

当然,我可以用这种方式将它们分开,但它很笨重且重复(即以下代码产生了预期的结果,但在处理大量变量时效率低下):

regTermTest(mod1, "Age")
regTermTest(mod1, "ForeignWorker")
regTermTest(mod1, "Property.RealEstate")
regTermTest(mod1, "Housing.Own")
regTermTest(mod1, "CreditHistory.Critical")

我尝试将系数名称提取到向量中并将其插入for 循环,但没有奏效(它将所有项组合到一个评估中,而不是单独估计它们的重要性):

vars <- names(mod1$coefficients)
vars <- vars[-1]
for (i in 1:length(vars)) {
     iv = vars[i]
     rtest <- regTermTest(mod1, iv)
}

如何有效地编写代码?

【问题讨论】:

  • 它没有用...我们经常得到这个无益的评论。错误或不良结果是什么?
  • 不希望的结果是它将所有术语组合到一个评估中,而不是单独估计它们的重要性。我已编辑问题以添加此信息。
  • 是的,最好将结果保存在列表或其他对象中。
  • 我已编辑问题以澄清这一点。逐行代码是期望的结果——它很容易做到,但由于重复,编程很糟糕。我正在寻找比手动复制和粘贴代码以及更改变量名称更好的解决方案。

标签: r for-loop lapply


【解决方案1】:

(更新)

*apply 家族可以提供帮助,具体取决于您希望的外观。

lapply(names(mod1$model)[-1], function(x) regTermTest(mod1, x))

sapply(names(mod1$model)[-1], function(x) regTermTest(mod1, x))

如果您想以一种好的方式显示结果,您将需要做一些工作。

(更新说明)。

最初的解决方案只是按照提问者的想法使用names(mod1$coefficients)。但是,如果有一个因子变量,这将不起作用,因为mod1$coefficients 将包含与非默认值连接的变量名称,就像R 回归模型总是处理分类变量一样。这让regTermTest 感到困惑,因为它会在数据集中寻找一个不存在的变量,因此它会返回一个令人费解的错误消息。

【讨论】:

  • 谢谢。它适用于样本数据,但在我的真实数据上出现错误:Error in solve.default(V) : 'a' is 0-diml。我意识到这是因为我的实际数据包含因素,但样本数据没有。我已经用这个困境更新了上面的示例数据集。很抱歉,但您是否知道对您的代码进行任何调整以接受带有因子变量的回归公式(根据上面更新的示例数据)?
  • 因子变量应该发生什么?我不相信 wald stats 可以在分类变量上运行。然后考虑使用tryCatch 为这些问题元素返回 NA:sapply(names(mod1$coefficients)[-1], function(x) tryCatch(regTermTest(mod1, x), error = function(e) NA))
  • 我不知道为什么,但 regTermTest 在我的真实数据上的因子变量上工作正常:regTermTest(mod1, "ForeignWorker") 其中ForeignWorker 是一个因子。但是,当我将ForeignWorker 考虑在内时,我无法让它与上面的示例数据一起使用。我看到其他人在使用regTermTest 时遇到了相同的Error in solve.default(V) : 'a' is 0-diml 错误,但似乎没有找到解决方案:stackoverflow.com/questions/40216353/…
  • regTermTest 适用于因子变量。当你给它一个不在数据集中的变量名时,它会感到困惑。请参阅我编辑的答案以了解正在发生的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
相关资源
最近更新 更多