【问题标题】:Regression with for-loop with changing variables [duplicate]带有变化变量的for循环回归[重复]
【发布时间】:2021-02-11 10:16:01
【问题描述】:

我试图在循环中运行回归,变量名称在每个循环中都发生变化。类似于此设置here

最后,我想将拟合结果保存在一个列表中。

我的代码如下:

year <- rep(2014:2015, length.out = 10000)
group <- sample(c(0,1,2,3,4,5,6), replace=TRUE, size=10000)
value <- sample(10000, replace = T)
female <- sample(c(0,1), replace=TRUE, size=10000)
smoker <- sample(c(0,1), replace=TRUE, size=10000)

dta <- data.frame(year = year, group = group, value = value, female=female, smoker = smoker)

pc<- dta[, c("female", "smoker")]
names_pc <- names(pc)

m_fit <- vector("list", length(names_pc))

for (i in seq_along(names_pc)){
  m <- lm(value ~ year + group + group:names_pc[i], data = dta)
  m_fit[[i]] <- m$fit
}

...但有些不对劲。我收到以下错误消息。

Error in model.frame.default(formula = value ~ year + group + group:names_pc[i],  : 
  invalid type (NULL) for variable 'names_pc[i]'

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    使用sprintf/paste0构造公式:

    m_fit <- vector("list", length(names_pc))
    
    for (i in seq_along(names_pc)){
      m <- lm(sprintf('value ~ year + group + group:%s', names_pc[i]), data = dta)
      m_fit[[i]] <- m$fit
    }
    

    【讨论】:

      【解决方案2】:

      使用 tidyverse

      型号

      m &lt;- map(dta[names_pc], ~lm(value ~ year + group + group:.x, data = dta))

      适合

      m_fit &lt;- map(m, ~.x$fit)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        相关资源
        最近更新 更多