【问题标题】:How to add combinations of variables into a regression如何将变量组合添加到回归中
【发布时间】:2014-09-02 19:11:00
【问题描述】:

我正在尝试编写一个代码,该代码将显示变量混合组合的回归系数。每次回归后,应将另一个变量添加到回归中,因此最后我将得到一个列表,显示每个回归的系数.我想在每个回归中只允许 1-4 个变量。 这是我的示例数据:

dat <- read.table(text = " var1 var2    var3     var4
    0        3        9         7
    1        3        8         4
    1        1        2         8
    0        1        2         3
    0        1        8         3
    1        6        1         2
    0        6        7         1
    1        6        1         5
    0        5        9         7
    1        3        8         7
    1        4        2         7
    0        1        2         3
    0        7        6         3
    1        6        1         1
    0        6        3         9
    1        6        1         1   ",header = TRUE)

通过使用以下代码,我设法得到一个列表,显示特定变量 (var1) 和其他变量之间的回归系数:

t(sapply(setdiff(names(dat),"var1"),
              function(x) coef(glm(reformulate(x,response="var1"),
                                   data=dat,family=binomial(link='logit')))))

这是输出:

     (Intercept)        var2
var2 -0.56394149  0.13865097
var3  1.28295290 -0.29798823
var4  0.08075091 -0.01819781

但是,我想添加使用变量组合的回归,并将结果连同它的 p 值一起显示在表格中,例如:

           (Intercept)        var2 var3 var4  p-value
var2       -0.56394149  0.13865097            0.02
var3        1.28295290 -0.29798823            0.01
var4        0.08075091 -0.01819781            0.2
var2+var3 
var2+var4
var3+var4
var2+var3+var4

任何想法怎么做?谢谢

【问题讨论】:

  • p 值究竟应该代表什么?这应该来自什么零假设?
  • 空模型是每个回归的 p 值的基础

标签: r logistic-regression


【解决方案1】:

您可以为此使用MuMIn

mod <- glm(var1 ~ var2 + var3 + var4, data = dat, na.action = na.fail)
# Nullmodel
mod0 <- glm(var1 ~ 1, data = dat, na.action = na.fail)
require(MuMIn)
allmods <- dredge(mod, extra = c(pval = function(x) anova(x, mod0, test = 'F')[2, 'Pr(>F)']))
allmods

p 值来自与空模型的比较。

【讨论】:

  • 这是非常好的 EDi,有没有办法限制回归以包含最多 2 个独立变量。查看我的输出示例 - 消除 var2+va3+var4 回归。还有,有没有办法用这个包添加 AUC?谢谢..
  • 要限制术语的数量,请使用m.max 参数,请参阅?dregde。在extra 中,您可以指定应该应用于模型的任何函数——AUC 也是如此。另一种可能性是编写一个 for 循环...
  • 感谢您的回复EDi
猜你喜欢
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多