応答変数の 1 つの列と予測変数のいくつかの列を持つデータフレームがあります。各予測変数を個別に使用して応答変数のモデルを適合させ、最終的にモデルの係数を含むデータフレームを作成したいと考えています。以前は、次のようにしていました。
data(iris)
iris_vars <- c("Sepal.Width", "Petal.Length", "Petal.Width")
fits.iris <- lapply(iris_vars, function(x) {lm(substitute(Sepal.Length ~ i, list(i = as.name(x))), data = iris)})
# extract model coeffs, so forth and so on, eventually combining into a result dataframe
iris.p <- as.data.frame(lapply(fits.iris, function(f) summary(f)$coefficients[,4]))
iris.r <- as.data.frame(lapply(fits.iris, function(f) summary(f)$r.squared))
dplyr
ただし、broom
、 などを使い始めた今では、これは少し面倒に思えます。 を使用すると、purrr::map
多かれ少なかれ、このモデルのリストを再作成できます。
# using purrr, still uses the Response variable "Sepal.Length" as a predictor of itself
iris %>%
select(1:4) %>%
# names(select(., 2:4)) %>% this does not work
names() %>%
paste('Sepal.Length ~', .) %>%
map(~lm(as.formula(.x), data = iris))
ただし、このリストを で使用する適切な形式にする方法がわかりませんbroom::tidy
。列ではなくグループ化された行を使用していた場合、モデルの適合を保存し、次のbroom::tidy
ようなことを行うために使用します。
iris.fits <- group_by(Species) %>% do(modfit1 = lm(Sepal.Length~Sepal.Width,data=.))
tidy(iris.fits, modfit1)
もちろん、これは私がやっていることではありませんが、データの列を使用するときに同様の手順があることを望んでいました. おそらくpurrr::nest
、目的の出力を作成するために使用する方法や同様のものはありますか?