【R语言-20行代码】牛顿迭代法求伽马函数极大似然估计法的参数估计
生活随笔
收集整理的這篇文章主要介紹了
【R语言-20行代码】牛顿迭代法求伽马函数极大似然估计法的参数估计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡述
研究了下計算公式,簡化了一下,用r語言實現了。
算法解釋
-
牛頓迭代法
xk+1=xk?f(xk)f′(xk)x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}xk+1?=xk??f′(xk?)f(xk?)?
求解的方程是
f(x)=0f(x) = 0f(x)=0 -
通過極大似然估計,構造對數似然方程,之后再關于α\alphaα和β\betaβ 求偏導數。之后,得到關于α\alphaα的非線性對數似然方程。然后,β\betaβ可以用α\alphaα表示。
-
再進一步的簡化(去掉無關的項,再整理相關的項)
得到需要求解的方程為
log(α)+digamma(α)=0log(\alpha) + digamma(\alpha) = 0log(α)+digamma(α)=0 -
再求一下這個方程左邊的導數
1α+trigamma(α)\frac{1}{\alpha} + trigamma(\alpha)α1?+trigamma(α) -
初始值,使用通過矩估計得到的參數。
代碼部分
除掉前面的讀取數據加一行的空格,不就是小于20行咩
- TIMES 的是迭代次數
- 1e-5 表示的是最小的變動精度
講真,我用這個精度,我算了4次迭代,就得到正確結果了。
library(xlsx) ray = read.xlsx('D:/Code/R/Data in Excel/Chapter 8/gamma-arrivals.xls',1) mean_ray = mean(ray[,1]) var_ray = var(ray[,1])alpha = mean_ray**2 / var_ray origin_X = alpha f = function(a){log(a)+ digamma(a) } ff = function(a){1. / a + trigamma(a) } TIMES = 10 for (i in 1:TIMES){x = origin_X -f(origin_X) / (ff(origin_X))if (abs(x - origin_X) < 1e-5) {print(i)break} else {origin_X = x} } print(x)總結
以上是生活随笔為你收集整理的【R语言-20行代码】牛顿迭代法求伽马函数极大似然估计法的参数估计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【r语言】如何将直方图和一条曲线画在一起
- 下一篇: 《MySQL数据技术与实验指导》jxgl