これを実現する非常に一般的な方法を以下に示します。このddply
関数は、各 に対して指定された関数 (この場合はlm
) を実行しますclinic
。データのより複雑な断面で実行することもできます。たとえば、と.(clinic,level)
の組み合わせごとに個別のモデルを実行します。項は線形モデルの切片を取得します。各モデル フィットのすべての出力を一度に保存する簡単な方法はないと思います。clinic
level
lm(y~x)$coef[1]
n <- 10
clinic <- factor(rep(1:3,each=n))
x <- rep(0:(n-1),3)
y <- rnorm(3*n)*x
d <- data.frame(clinic,x,y)
# plot data and linear fits
library(ggplot2)
ggplot(d,aes(x,y)) + geom_point() + facet_wrap(~clinic) + stat_smooth(method='lm')
# run a separate model for each clinic
library(plyr)
ddply(d,.(clinic),summarize,intercept=lm(y~x)$coef[1],slope=lm(y~x)$coef[2])