【发布时间】:2017-03-21 20:20:29
【问题描述】:
假设我们有一个数据框,其中包含一组 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)
【问题讨论】:
-
"然后应用 lm 函数"
->你试过用lapply()吗? -
我不知道如何正确使用它。我尝试使用元素“y1~x1+x2+...+x6”、“y2~x1+x2+...+x6”、“y3~x1+x2+...+x6”和试图将此列表传递给 lm(),但我认为我在正确的语法上绊倒了。
-
apply、sapply、lapply 等系列对您的理解绝对至关重要。必须学习。有无限的资源可以比这里的任何答案更好地教你。请参阅 Hadley 的 Advanced R(可在线获取)或 bookdown 库中的许多示例
-
谢谢参考,我会研究的。您介意分享一下您将如何使用 lapply 处理此示例的两个步骤(即 group_by() 步骤和迭代 lm() 的步骤)吗?