グループ化変数によってタグ付けされた 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)