使用呼叫时显示模型摘要的变量名称

时间:2017-09-26 17:22:11

标签: r naming-conventions lm

我有一个运行多个模型的循环

library(MuMIn)
options(na.action = "na.fail")
dat = iris
listX = names(iris[,3:4]
listY = names(iris[,1:2]

for (y in listY){

fm1 <- lm(dat[[y]] ~ dat[[listX[1]]] + dat[[listX[2]]], data=dat)
dd = dredge(fm1)
print(dd)
}

当我运行时,print(dd)的输出会显示给定的变量名称,例如dat[[listX[2]]]等。

如何更改代码,以便可以在模型中看到变量的实际名称,就好像我已经为每个循环编写了完整的变量名称,例如

 fm1 <- lm(Sepal.length ~ Petal.Length + Petal.Width, data=dat)

1 个答案:

答案 0 :(得分:1)

只需使用forpaste循环中撰写公式。

for (y in listY){
    fmla <- as.formula(paste(y, paste(listX[1], listX[2], sep = "+"), sep = "~"))
    fm1 <- lm(fmla, data=dat, na.action = na.pass)
    dd = dredge(fm1)
    print(dd)
}

注意:

  1. 您应该通过调用library开始您的示例, dredge不是base R包,而是MuMIn包。
  2. 您发布的代码会引发错误,我必须在na.action = na.pass的调用中使用lm才能执行dredge
  3. 修改
    正如评论中提到的lmo,reformulate比嵌套的paste指令简单易读。然后循环将成为:

    for (y in listY){
        fmla <- reformulate(listX, y)
        fm1 <- lm(fmla, data=dat, na.action = na.pass)
        dd = dredge(fm1)
        print(dd)
    }