2

我有一个回归模型列表,它们都具有相同数量的项(即相同数量的预测变量)。实质上,它们都有不同的模型术语是正确的。但是当涉及到将它们放入回归表时,我希望它们所有的模型共享一个公式,只是为了演示。

一些指示性数据

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<-"

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

4

1 回答 1

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)
于 2013-08-24T02:04:01.350 回答