假设我们有一个数据框,其中包含一组 3 个因变量和 6 个由分组变量标记的自变量。使用以下示例代码生成此格式的示例:
library(tidyverse)
library(broom)
n <- 15
df <- data.frame(groupingvar= sample(letters[1:2], size = n, replace = TRUE),
y1 = rnorm(n,10,1), y2=rnorm(n,100,10), y3=rnorm(n,1000,100),
x1= rnorm(n,10,1), x2=rnorm(n,10,1), x3=rnorm(n,10,1),
x4=rnorm(n,10,1), x5=rnorm(n,10,1), x6=rnorm(n,10,1))
df <- arrange(df,groupingvar)
如果我想在 x1 到 x6 的集合上回归 y1、y2、y3 中的每一个,我可以使用以下内容:
y <- as.matrix(select(df,y1:y3))
x <- as.matrix(select(df,x1:x6))
regs <-lm(y~x)
coeffs <- tidy(regs)
coeffs <- arrange(coeffs,response, term)
(通过使用 lm() 帮助中的以下行:“如果响应是矩阵,则线性模型通过最小二乘法分别拟合到矩阵的每一列。”)
但是,如果我需要先按分组变量分组,然后应用 lm 函数,那么我不太确定该怎么做。我尝试了以下方法,但它为两组产生了相同的系数集。
regs2 <- df %>% group_by(groupingvar) %>%
do(fit2 = lm(as.matrix(select(df,y1:y3)) ~ as.matrix(select(df,x1:x6))))
coeffs2 <- tidy(regs2,fit2)
coeffs2 <- arrange(coeffs2,groupingvar, response)