所有数据帧全局环境中的 GLM

GLM in all data frames global environment

我有一个包含约 200 个唯一 'IDs' 的主数据框,并且每个 ID 都有约 200 个 'orders'。我使用

将主数据帧拆分为 200 个单独的数据帧
list2env(split(df, df$id), envir = .GlobalEnv)

现在,由于每个唯一 ID 有 200 个单独的数据帧,我想创建一个 GLM,我可以在其中获取打印在另一个主数据帧中的每个 ID 的系数和 R^2 值。

所以不要这样做(其中“1”到“200”都是 ID):

test1 <- glm(1$response_var ~ variableA + variableB + variableC, family=gaussian(), data=1)

并在为 200 个 ID 重复此操作时手动打印系数,是否有函数或特定循环可用于在单个数据框中打印所有系数和 R^2 值?

因此对于此示例,最终结果将是每个 ID 有 200 行,ID、截距、系数 1、系数 2、系数 3 和 R^2 有 6 列

试试这个例子:

#dummy data
set.seed(123)
df <- data.frame(
  id=rep(c(1,2,3),10),
  response_var=rep(c(1,2),15),
  variableA=runif(30),
  variableB=runif(30),
  variableC=runif(30))

#split by id
df_list <- split(df,df$id)

#loop through every id
do.call(rbind,
        lapply(df_list, function(x){
          fit <- glm(response_var ~ variableA + variableB + variableC, family=gaussian(), data=x)
          coef(fit)
        }))

#output
#   (Intercept)  variableA   variableB   variableC
# 1    0.630746  1.4443321 -0.40875486  0.42797033
# 2    1.447003  0.7121737 -0.01226043 -0.93282962
# 3    1.450429 -0.2306031  0.47827197 -0.01190812

注意: glm 的 R2 是一个全新的世界,参见 Pseudo R squared formula for GLMs and Is R2 useful or dangerous?