1

R の最尤法に問題があります。助けていただければ幸いです。コードでは、Nt は観測されたクレーム数を表し、vt は対応するボリュームを表します。

まず、ポアソン分布を仮定します。だから私はmleでラムダを推定し、0.10224を得ました。次に、fitdistr でラムダを推定しようとしましたが、結果は 1022.4 でした。これら2つの機能の違いはなぜですか?どうすれば修正できますか?

後で、同じデータを使用して、負の二項式のパラメーターを推定しようとしました。しかし、私はそれを機能させていません。私が間違ったことをしたことがわかりますか?ラムダとガンマの開始値は、私が選んだ乱数です。

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

1 に答える 1

0

を使用した最初の試行では、組み込みを行っていますが、試行でmle()は組み込みを行っていません。次のように変更することで、同じ結果を得ることができます。vtfitdistr()fit.poisson

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

またはあなたを次のように変更するfitdistr()ことによって:

fitdistr(Nt/vt, "Poisson")

負の二項モデルに問題はありません。負の二項モデルからのラムダ推定値 (0.10197) は、ポアソン モデルのラムダ推定値 (0.10224) にかなり近い値です。

于 2015-01-20T16:14:29.810 に答える