[英]Error in MLE estimation of degrees of freedom of chi-squared distribution
我的任務是使用最大似然估計來估計幾個卡方分布的概率分布函數的自由度k 。 所以我首先從 chi 分布中抽取 20 個隨機值,然后使用最大似然估計 R 中的自由度k 。
假設 chi 分布的似然函數為:
library('maxLik')
library('lmtest')
> n <- 20
> df = 3
> df <- 3
> chi20 <- rchisq(n, df)
> X <- chi20
loglikfun <- function(param) {
if (param[1] <= 0) return(NA)
#return(sum(dchisq(X = chi20, df = param[1], log = TRUE])))
return((param[1]/2-1)*(sum(log(X)))-(1/2*sum(X)-n*log(gamma(param[1]/2)))-(n*param[1]/2*log(2)))
}
mle <- maxLik(Loglikfun, start = c(df = 1))
summary(mle)
但是,我得到的不是大約 3 的估計值,而是帶有一堆 NaN 錯誤的 7496171。
有什么建議?
如果繪制函數的輸出,您將看到它在正確值附近達到最小值:
plot(seq(0.1, 10, 0.1), sapply(seq(0.1, 10, 0.1), loglikfun), type = "l")
因此,您似乎只是在輸出中遺漏了一個負號:
n <- 20
df <- 3
X <- rchisq(n, df)
loglikfun <- function(param) {
if (param[1] <= 0) return(NA)
return(-((param[1]/2-1)*(sum(log(X)))-(1/2*sum(X)-n*log(gamma(param[1]/2)))-(n*param[1]/2*log(2))))
}
mle <- maxLik(loglikfun, start = c(param = 1))
summary(mle)
#> --------------------------------------------
#> Maximum Likelihood estimation
#> Newton-Raphson maximisation, 5 iterations
#> Return code 8: successive function values within relative tolerance limit (reltol)
#> Log-Likelihood: 48.13905
#> 1 free parameters
#> Estimates:
#> Estimate Std. error t value Pr(> t)
#> param 2.9778 0.4593 6.483 9.01e-11 ***
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> --------------------------------------------
F(k)= -n log(2 gamma(k/2)+(k/2-1)*SumIFom1toN(log(Xi/2))- -SumIFom1toN(Xi)/2
您可以優化 QS=SumIFom1toN(log(Xi/2); HS=SumIFom1toN(Xi)/2;
F(k,QS,HS)= -n log(2 gamma(k/2)+(k/2-1)*QS-HS;未考慮機器均值的計算精度;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.