【问题标题】:Create and Call Linear Models from List从列表创建和调用线性模型
【发布时间】:2013-08-08 01:05:31
【问题描述】:

所以我试图比较不同的线性模型,以确定一个是否比另一个更好。但是我有几个模型,所以我想创建一个模型列表然后调用它们。这可能吗?

 Models <- list(lm(y~a),lm(y~b),lm(y~c)
 Models2 <- list(lm(y~a+b),lm(y~a+c),lm(y~b+c))

 anova(Models2[1],Models[1])

感谢您的帮助!

【问题讨论】:

  • This 可能会有所帮助。
  • 使用anova(Models2[[1]],Models[[1]]) 有效吗?
  • 请注意,anova 对于嵌套模型最有用。

标签: r list lm


【解决方案1】:

如果您有两个模型列表,并且想要比较每一对模型,那么您需要Map

models1 <- list(lm(y ~ a), lm(y ~ b), lm(y ~ c)
models2 <- list(lm(y ~ a + b), lm(y ~ a + c), lm(y ~ b + c))

Map(anova, models1, models2)

这基本上相当于下面的for循环:

out <- vector("list", length(models1))
for (i in seq_along(out) {
  out[[i]] <- anova(models1[[i]], models2[[i]])
}

Map 是一个泛函的例子,你可以在https://github.com/hadley/devtools/wiki/Functionals找到更多关于它们的信息

【讨论】:

    【解决方案2】:

    您可以使用do.call 将任意长度的列表转换为适合采用... 的函数的调用。这里唯一的技巧是anova 期望第一个模型被命名——这就是Curry 通过创建一个已经指定了它的第一个参数的新函数来处理的。

    将除第一个模型(称为 lm1)之外的所有内容放入一个名为 Models 的列表中。

    然后:

    library(functional)
    do.call( Curry(anova, object=lm1), Models )
    

    例子:

    > Models <- list( lm(runif(10)~rnorm(10)),lm(runif(10)~rnorm(10)),lm(runif(10)~rnorm(10)) )
    > lm1 <- lm(runif(10)~rnorm(10))
    > do.call( Curry(anova, object=lm1), Models )
    Analysis of Variance Table
    
    Model 1: runif(10) ~ rnorm(10)
    Model 2: runif(10) ~ rnorm(10)
    Model 3: runif(10) ~ rnorm(10)
    Model 4: runif(10) ~ rnorm(10)
      Res.Df     RSS Df Sum of Sq F Pr(>F)
    1      8 0.46614                      
    2      8 0.59522  0  -0.12908         
    3      8 1.00869  0  -0.41346         
    4      8 0.81686  0   0.19182         
    

    【讨论】:

    【解决方案3】:
    x <- rnorm(100,0,1)
    y <- rnorm(100,5,2)
    z <- rnorm(100,8,1)    
    models <- list(y.x = lm(y~x), y.z = lm(y~z))
    anova(models[[1]],models[[2]])
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多