2

我正在使用我的数据子集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)

PrintModrpt给出模型系数,但没有 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。有谁知道我哪里出错了?

4

2 回答 2

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将每个子集的结果放在它自己的列表元素中。

我不声明示例模型的统计相关性或正确性 - 这只是一个示例

于 2013-08-06T14:04:52.817 回答
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))
于 2013-08-07T01:39:10.213 回答