とglm
を使用して、グループごとにモデルをモデルデータに適合させます。信頼区間の上限と下限の列を追加する:confint
を2回呼び出すことを避けるにはどうすればよいですか?一般的に、dplyr::mutate
を使用して新しい列に汎用出力を割り当てる方法はありますか?要するにdplyr :: mutateの関数呼び出しの結果を再利用
df <- data.frame(
x = rep(c("a", "b"), each=10),
y = c(rpois(10, 0.5), rpois(10, 2.2)))
sdf <- df %>%
group_by(x) %>%
do(fit=glm(y ~ 1, poisson, data=.))
mutate(sdf,
est=coef(fit),
cil=confint(fit)[1],
ciu=confint(fit)[2])
、私は仕事にこれをしたい:
mutate(sdf, ci=confint(fit)) %>%
mutate(cil=ci[1], ciu=ci[2])
私は再びdo
を使用している場合は、私はフィットモデルとx
を失います。
ソリューション
私が実際に使用したもの(受け入れ答えから学んだ):
sdf <- df %>%
group_by(x) %>%
do({
fit <- glm(y ~ 1, poisson, data=.)
ci <- confint(fit)
data.frame(
est=coef(fit),
cil=ci[1],
ciu=ci[2])
})
[broom](https://github.com/tidyverse/broom)を見ましたか?そのモデル出力をデータフレームの列として取得するのに役立ちます。 – Ben
@Benの提案は、 '' doコール。 – Benjamin
私はこの種の作業に 'purr'を使うことも考えています。 'do'を使うことができますが、' 'purr''の' 'map''関数は柔軟性を提供します。 –