对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
根据您要对回归执行的操作,您可以使用 magrittr
或 dplyr
首先拆分然后创建线性回归列表:
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)
我有一个如下所示的数据框 (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根据您要对回归执行的操作,您可以使用 magrittr
或 dplyr
首先拆分然后创建线性回归列表:
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)