对R中一个数据框下找到的所有数据框,对所有变量X和响应G做回归分析

Do regression analysis for all the variable X and response G, for all data frames found under one data frame in R

我有一个如下所示的数据框 (df):

group.no Amount Response
1          5       10
1         10       25
1          2       20
2         12       20
2          4        8
2          3        5

我根据

的组号将 data.frame 分成几个 data.frame
  out <- split( df , f = df$group.no )

现在我想要的是用 lm 在 "out" 中所有新 data.frame 的数量〜响应之间进行回归分析 请考虑这是一个示例,我在 "out"

中拆分了 500 个 data.frames

根据您要对回归执行的操作,您可以使用 magrittrdplyr 首先拆分然后创建线性回归列表:

library(magrittr) #alternative library(dplyr)
df %>% split(.$group.no) %>% lapply(function(x) lm(Amount ~ Response, data = x))

如果您希望避免使用 dplyr 语法,可以使用单个 lapply 调用作为

lapply(split(df, df$group.no), function(x) lm(Amount ~ Response, data = x))

out 是一个数据框列表,因此您可以使用 lapply() 来估计每个数据框的回归。

mods <- lapply(out, lm, formula=y~x) 

然后mods将是模型列表。

假设最后注释中显示的数据可重复。如果您不想合并标准错误,请将 pool = FALSE 指定为 lmList 参数。

# 1
library(nlme)
lmList(Response ~ Amount | group.no, DF)

备选方案是:

# 2
lm(Response ~ grp / (Amount + 1) - 1, transform(DF, grp = factor(group.no)))

或者执行完全独立回归的这个:

# 3
by(DF, DF$group.no, function(DF) lm(Response ~ Amount, DF))

这最后一行也可以写成:

# 3a
by(DF, DF$group.no, lm, formula = Response ~ Amount)

R 平方

我们可以使用以下任何方法按组计算 R 平方:

summary(lmList(Response ~ Amount | group.no, DF))$r.squared

c(by(DF, DF$group.no, function(x) summary(lm(Response ~ Amount, x))$r.squared))

reg.list <- by(DF, DF$group.no, lm, formula = Response ~ Amount)
sapply(reg.list, function(x) summary(x)$r.squared)

c(by(DF, DF$group.no, with, cor(Response, Amount)^2))

library(dplyr)
DF %>%
  group_by(group.no) %>%
  do(summarize(., r.squared = summary(lm(Response ~ Amount, .))$r.squared)) %>%
  ungroup

备注

Lines <- "group.no Amount Response
1          5       10
1         10       25
1          2       20
2         12       20
2          4        8
2          3        5"
DF <- read.table(text = Lines, header = TRUE)