重命名拟合模型对象中的术语

时间:2013-08-23 23:42:26

标签: r

我有一个回归模型列表,它们都具有相同数量的术语(即相同数量的预测变量)。实质上,他们都有不同的模型术语是对的。但是当把它们放在回归表中时,我希望它们所有模型共享一个公式,只是为了呈现。

一些指示性数据

library(plyr)
d1 <- data.frame(y = rnorm(100),
             x1 = runif(100),
             x2 = runif(100),
             x3 = runif(100),
             x4 = runif(100))

适合模特

mods.form <- paste("y ~ x", 1:4, sep = "")
mod.list <- llply(mods.form, function(i) lm(i, d1))

以下是我想要修改的术语

llply(mod.list, function(i) attr(terms(i), "variables"))

[[1]]
list(y, x1)

[[2]]
list(y, x2)

[[3]]
list(y, x3)

[[4]]
list(y, x4)

我希望列表中的每个模型都具有与第一个模型相同的变量名称,所以我尝试了:

mod.list2 <- llply(mod.list, function(i) attr(terms(i), "variables") = list("y", "x1"))

提供此错误

Error in attr(terms(i), "variables") = list("y", "x1") : 
could not find function "terms<-"

这里有一个简单的解决方案吗?

1 个答案:

答案 0 :(得分:3)

也许这就是你要找的东西:

使用您提供的数据框

d1 <- data.frame(y = rnorm(100),
             x1 = rnorm(100),
             x2 = rnorm(100),
             x3 = rnorm(100),
             x4 = rnorm(100))

首先,将每个x变量重命名为某个所需名称“x”

names(d1) <- c("y", rep("x", times=length(d1)-1))

然后,对每个x变量使用列表d1上的lapply,将y作为参数传递 进入匿名函数

mod.list  <-  lapply(d1[2:ncol(d1)], function(x,y){
                    lm("y ~ x",d1)
                }, y=d1[, 'y'])

最后,我们在mod.list上调用llply:

> llply(mod.list, function(x){
+   attr(terms(x), "variables")
+ })
$x
list(y, x)

$x.1
list(y, x)

$x.2
list(y, x)

$x.3
list(y, x)