【问题标题】:Easily performing the same regression on different datasets在不同的数据集上轻松执行相同的回归
【发布时间】:2014-07-20 19:51:12
【问题描述】:

我正在对几个不同的数据集(相同的因变量和自变量)执行相同的回归。但是,有很多自变量,我经常想测试添加/删除不同的变量。我想避免对不同的代码行进行所有这些更改,因为它们使用不同的数据集。我可以只复制用于创建某个对象的公式,然后使用不同的数据集创建一个新对象吗?例如,类似:

fit1 <- lm(y ~ x1 + x2 + x3 + ..., data = dataset1)
fit2 <- lm(fit1$call, data = dataset2) # this doesn't work
fit3 <- lm(fit1$call, data = dataset3) # this doesn't work

这样,如果我想更新许多回归,我只需更新第一个,然后重新运行它们。

这可以吗?最好不使用循环或粘贴()。

谢谢!

【问题讨论】:

  • 为什么没有循环结构?
  • 我只是在寻找一种更优雅的方式。我可能仍然对使用循环的解决方案感兴趣,但我宁愿尽可能不使用它们。
  • 有趣。循环通常比在 IMO 上一遍又一遍地重复类似的语句要优雅得多。
  • 虽然我确实认为下面的一些答案更好,但如果你使用 fit$terms 而不是 fit$call ,你的答案会奏效

标签: r regression lm


【解决方案1】:

或使用update

(fit <- lm(mpg ~ wt, data = mtcars))

# Call:
#   lm(formula = mpg ~ wt, data = mtcars)
# 
# Coefficients:
#   (Intercept)           wt  
#        37.285       -5.344 

update(fit, data = mtcars[mtcars$hp < 100, ])

# Call:
#   lm(formula = mpg ~ wt, data = mtcars[mtcars$hp < 100, ])
# 
# Coefficients:
#   (Intercept)           wt  
#        39.295       -5.379 

update(fit, data = mtcars[1:10, ])

# Call:
#   lm(formula = mpg ~ wt, data = mtcars[1:10, ])
# 
# Coefficients:
#   (Intercept)           wt  
#        33.774       -4.285  

【讨论】:

  • 这里不需要前面的“或使用”。
  • 很棒的答案。这可能非常有用。
【解决方案2】:

不完全确定这是你想要的,但你可以这样做:

formula <- y ~ x1 + x2 + x3 + ...
fit1 <- lm(formula, data = dataset1)
fit2 <- lm(formula, data = dataset2) 
fit3 <- lm(formula, data = dataset3) 

【讨论】:

  • 酷。其实我不知道你可以在 R 中做到这一点。“公式
【解决方案3】:

将您的数据集收集到list,然后使用lapply。例如:

dsets <- list(dataset1,dataset2,dataset3)
lapply(dsets, function(x) lm(y ~ x1 + x2, data=x) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2018-03-04
    • 2021-04-07
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    相关资源
    最近更新 更多