r - 如何对 R 回归模型中的每个系数运行 regTermTest?

标签 r for-loop lapply

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

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)
}

如何有效地编写此代码?

最佳答案

(已更新)

*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 感到困惑,因为它会在数据集中查找不存在的变量,因此会返回令人困惑的错误消息。

关于r - 如何对 R 回归模型中的每个系数运行 regTermTest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48890406/

相关文章:

r - 如何编写一个接受自己的输出作为输入并循环运行直到满足条件的函数?

algorithm - 循环运行日志时间时的复杂性

c# - For 循环未返回预期值 - C# - Blazor

r - 在 lapply 中操作函数

r - 获取 Data.table 中的日期差异

r - Windows 批处理脚本 - 解析并扩展变量以作为字符串传递给外部程序?

r - 创建一个填充文本的矩形

r - 如何检测 read.csv 的正确编码?

当索引超过其长度时,C++ for 循环会自动为 char * 安全终止

从 R 中的 CSV 文件读取 `...` 中定义的函数输入值