GLM在所有数据框架的全球环境中

时间:2015-06-01 20:10:50

标签: r loops global-variables environment-variables glm

我有一个包含约200个唯一“ID”的主数据框,每个ID大约有200个'订单'。我使用

将主数据帧拆分为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为6列,Intercept,Coefficient1,Coefficient2,Coefficient3和R ^ 2

1 个答案:

答案 0 :(得分:0)

试试这个例子:

#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

注意: R2 for glm是一个全新的世界,请参阅Pseudo R squared formula for GLMsIs R2 useful or dangerous?