比方說,我們有一個數據框,其中包含一組3個因變量和6個由分組變量標記的獨立變量。與下面的示例代碼生成此格式的一個例子:如何首先group_by()然後通過列迭代lm()?
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)
如果我想通過5233退步每個Y1,Y2,Y3對集X1的,我可以沿着線使用的東西:
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()'? – d8aninja
我不確定如何正確使用它。我嘗試創建一個包含元素「y1〜x1 + x2 + ... + x6」,「y2〜x1 + x2 + ... + x6,」y3〜x1 + x2 + ... + x6「的公式列表,以及嘗試將這個列表傳遞給lm(),但我想我正確地使用它的語法。 – user1689945
應用,sapply,lapply等家族對你的理解來說絕對是最重要的。必須學習。有無窮的資源會教你很多在這裏可以看到Hadley的高級R(在線提供)或許多書中的例子 – d8aninja