【问题标题】:Maximum likelihood in R with mle and fitdistrR中的最大似然与mle和fitdistr
【发布时间】:2015-01-20 14:41:33
【问题描述】:

我在 R 中遇到了最大似然的问题,希望您能帮助我。在代码中,Nt 代表观察到的索赔计数,vt 代表相应的数量。

首先我假设一个泊松分布。所以我用 mle 估计了 lambda 并得到了 0.10224。然后我尝试用 fitdistr 估计 l​​ambda,结果是 1022.4。为什么这两个功能之间有区别?如何更正?

后来我尝试使用相同的数据来估计负二项式的参数。但我还没有让它工作。你能看出我做错了什么吗? lambda 和 gamma 的起始值只是我选择的随机数。

library(stats4)
library(MASS) 

Nt <- c(1000, 997, 985, 989, 1056, 1070, 994, 986, 1093, 1054)
vt <- rep(10000, 10) 
n <- length(Nt)

obs.freq <- Nt/vt
overall.freq <- sum(Nt)/sum(vt)

#####
# mle - poisson
#####

fit.poisson <- function(lamda){
-sum(dpois(Nt, lamda*vt, log=TRUE))
}

mle.poisson <- mle(fit.poisson, start=list(lamda=overall.freq), nobs = NROW(Nt))
mle.poisson.summary <- summary(mle.poisson)

fitdistr(Nt, "Poisson")   

#####
# mle - negative binomial
#####

fit.negbin <- function(lamda, gamma){
SUM <- numeric(n)
for(i in 1:n){
SUM[i] <- lfactorial(Nt[i]+gamma-1) - lfactorial(Nt[i]) - lfactorial(gamma-1) + gamma*log(1-lamda*vt[i]/(gamma+lamda*vt[i])) + Nt[i]*log(lamda*vt[i]/(gamma+lamda*vt[i]))
}
-sum(SUM)
}

mle.negbin <- mle(fit.negbin, start=list(lamda=0.1, gamma=2), nobs=n)
mle.negbin.summary <- summary(mle.negbin)

fitdistr(Nt,"Negative binomial")

【问题讨论】:

    标签: r lambda estimation mle


    【解决方案1】:

    在您第一次尝试使用mle() 时,您正在合并vt,而在您的fitdistr() 尝试中,您没有。您可以通过将fit.poisson 更改为just 来获得相同的结果:

    fit.poisson <- function(lamda){
        -sum(dpois(Nt, lambda, log=TRUE))
    }
    

    或将您的 fitdistr() 更改为:

    fitdistr(Nt/vt, "Poisson")
    

    我认为您的负二项式模型没有任何问题。负二项式模型的 lambda 估计值 (0.10197) 非常接近 Poisson 模型中的 lambda 估计值 (0.10224)。

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多