使用ddply当访问fitted.values(Accessing fitted.values wh

2019-10-18 10:41发布

我使用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给出了模型系数,但没有ÿ估计。

我知道,如果我不使用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.有谁知道我要去的地方错了吗?

Answer 1:

您可以使用匿名函数在调用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) ) ) 

正如@詹姆斯指出,这会掉下来,如果你有大小不等的裂缝,最好使用dlply这在它自己的列表元素把每个子集的结果。

我做的统计相关性或示例模型的正确性任何要求-这只是一个例子



Answer 2:

我倒是建议分两步这样做:

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))


文章来源: Accessing fitted.values when using ddply
标签: r plyr subset glm