我正在使用ddply
对我的数据子集执行glm
。我无法访问估计的Y值。我能够使用下面的代码得到模型参数估计值,但是我试图获得拟合值的所有变量都没有达到。 glm
模型中的因变量和自变量是列向量,"Dmsa"
运算中使用的ddply
变量也是如此。
定义模型:
Model <- function(df){coef(glm(Y~D+O+B+A+log(M), family=poisson(link="log"), data=df))}
在子集上执行模型:
Modrpt <- ddply(msadata, "Dmsa", Model)
打印Modrpt
给出模型系数,但没有Y估计值。
我知道如果我没有使用ddply
,我可以使用以下代码访问glm
估算的Y值:
Model <- glm(Y~D+O+B+A+log(M), family=poisson(link="log"), data=msadata)
fits <- Model$fitted.values
我已经尝试了以下两种方法来获取子集的拟合值,但没有运气:
fits <- fitted.values(ddply(msadata, "Dmsa", Model))
fits <- ddply(msadata, "Dmsa", fitted.values(Model))
我确信这是一个非常容易编码...不幸的是,我只是在学习R.有谁知道我哪里出错?
答案 0 :(得分:3)
您可以在致电ddply
时使用匿名功能,例如
require(plyr)
data(iris)
model <- function(df){
lm( Petal.Length ~ Sepal.Length + Sepal.Width , data = df )
}
ddply( iris , "Species" , function(x) fitted.values( model(x) ) )
这样做的好处是,您可以在不重写model
功能的情况下,通过
coef
值
ddply( iris , "Species" , function(x) coef( model(x) ) )
正如@James指出的那样,如果你有不等大小的分裂,这将会下降,最好使用dlply
将每个子集的结果放在它自己的列表元素中。
(我没有声明示例模型的统计相关性或正确性 - 它只是一个例子)
答案 1 :(得分:0)
我建议分两步执行此操作:
library(plyr)
# First first the models
models <- dlply(iris, "Species", lm,
formula = Petal.Length ~ Sepal.Length + Sepal.Width )
# Next, extract the fitted values
ldply(models, fitted.values)
# Or maybe
ldply(models, as.data.frame(fitted.values))