【问题标题】:Rename terms in fitted model object重命名拟合模型对象中的项
【发布时间】:2013-08-24 10:04:01
【问题描述】:

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

一些指示性数据

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

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

【问题讨论】:

    标签: r


    【解决方案1】:

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

    使用您提供的数据框

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

    然后,在列表 d1 上为每个 x 变量使用 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)
    

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 2016-12-24
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多