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

时间:2019-10-17 15:07:19

标签: r regression analysis bulk

我有一个数据帧(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分为几个数据

  out <- split( df , f = df$group.no )

现在我想要的是对所有“新”数据中的lm〜响应之间进行lm回归分析。 请考虑这是一个示例,我在“ out”中有500个分割的data.frames

3 个答案:

答案 0 :(得分:1)

假定末尾的注释中可重复显示的数据。如果您不想合并标准错误,请指定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)

答案 1 :(得分:0)

根据要对回归进行的处理,可以使用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))

答案 2 :(得分:0)

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

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

然后mods将是模型的列表。