我想定义我自己的密度函数,以在对mle2
from包R
的公式调用中使用。bbmle
模型的参数是估计的,但我不能在返回的对象上应用residuals
或应用函数。predict
mle2
这是一个示例,其中我为简单的 Poisson 模型定义了一个函数。
library(bbmle)
set.seed(1)
hpoisson <- rpois(1000, 10)
myf <- function(x, lambda, log = FALSE) {
pmf <- (lambda^x)*exp(-lambda)/factorial(x)
if (log)
log(pmf)
else
pmf
}
myfit <- mle2(hpoisson ~ myf(lambda), start = list(lambda=9), data=data.frame(hpoisson))
residuals(myfit)
在myfit
中,lambda 被正确估计,但是当我在 上调用残差时myfit
,我收到一条错误消息:
Error in myf(9.77598906811668) :
argument "lambda" is missing, with no default
另一方面,如果我简单地使用R
的内置dpois
函数按如下方式拟合模型,则会计算残差:
myfit <- mle2(hpoisson ~ dpois(lambda), start = list(lambda=9), data=data.frame(hpoisson))
residuals(myfit)
谁能告诉我我在函数定义中做错了myf
什么?
谢谢