我有一个包含约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
答案 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 GLMs和Is R2 useful or dangerous?