如何从dlplyr的帮助页面修改以下代码,以连续拟合线性模型,不拦截数据框架中的多个预测变量。
#From the dlplyr help page
linmod <- function(df) {
lm(rbi ~ year, data = mutate(df, year = year - min(year)))
}
models <- dlply(baseball, .(id), linmod)
我的数据集
library(plyr)
grouping<-factor(sample(c('A', 'B', 'C'), 10, replace=TRUE))
set.seed(10)
x1<-rnorm(10, 3, 1)
x2<-rnorm(10, 4, 1)
x3<-rnorm(10,5, 1)
x4<-rnorm(10,5,2)
mydf<-data.frame(grouping, x1, x2, x3, x4)
mydf
我想修改上面的函数linmod来生成lm(y1~0 + X1,data = mydf),lm(y1~0 + X2,data = mydf),lm(y1~0 + X3,data =是myDF)。
我希望没有截距的线性模型基本上进行方差分析;这就是我通常这样做的方式。
答案 0 :(得分:0)
以下是您想要的输出吗?
lapply(mydf[-1], function(x) lm(x ~ 0 + mydf[,1]))
$x1
Call:
lm(formula = x ~ 0 + mydf[, 1])
Coefficients:
mydf[, 1]A mydf[, 1]B mydf[, 1]C
2.511 2.608 2.405
$x2
Call:
lm(formula = x ~ 0 + mydf[, 1])
Coefficients:
mydf[, 1]A mydf[, 1]B mydf[, 1]C
4.301 4.872 4.073
$x3
Call:
lm(formula = x ~ 0 + mydf[, 1])
Coefficients:
mydf[, 1]A mydf[, 1]B mydf[, 1]C
4.410 2.848 4.358
$x4
Call:
lm(formula = x ~ 0 + mydf[, 1])
Coefficients:
mydf[, 1]A mydf[, 1]B mydf[, 1]C
3.473 5.107 3.508
答案 1 :(得分:0)
收集Xs然后将其作为plyr在传递给lm之前拆分的变量可能是最容易的。 Tidyr
对此有帮助。类似的东西:
library(plyr)
library(tidyr)
grouping<-factor(sample(c('A', 'B', 'C'), 10, replace=TRUE))
set.seed(10)
x1<-rnorm(10, 3, 1)
x2<-rnorm(10, 4, 1)
x3<-rnorm(10,5, 1)
x4<-rnorm(10,5,2)
mydf<-data.frame(grouping, x1, x2, x3, x4)
mydf_long <- gather(my_df, "x_var", "value", 2:5)
lm_fn <- function(x){
out <- lm(value ~ grouping, data=x)
return(out)
}
output <- dlply(bydf_long, .(x_var), lm_fn)