R语言中的最大似然预计
对付较大似然预计,都是依赖于似然函数的,因此要害在于写出似然函数,然后对该似然函数举办优化。似然函数依小我私家的问题而定,好比说下面的是正态漫衍的似然函数:normal <- function(theta,x){ mu <- theta[1] sigma2 <- theta[2] n <- nrow(x) logL <- -0.5*n*log(2*pi)-0.5*n*log(sigma2)-(1/(2*sigma2))*sum((y-mu)**2) return (-log1)}上面的theta是指需要预计的正态漫衍的均值和方差,logL是似然值,之所以返回负数是因为后头用到的优化似然值的函数是最小化函数。写出来了似然函数之后,下一步就是如何优化似然函数的值。给定命据x是一个切合正态漫衍的数据,函数optim()可以举办后续的优化。该函数的一般形式如下:optim(initial valurs of theta, likelihood function,data)因此,我们这里的优化功效就可以通过下面的语句给出来:result <- optim(c(0,1),normal,x)result中包括对付theta的预计值,以及优化之后的似然值,其他返回值可以看该函数的文档
也可以回收其他的函数举办预计,好比maxLik包是一个专门用来举办较大似然预计的,个中的maxLik()函数也可以对付给定的似然函数举办优化,好比说上面的正态漫衍似然函数normal(),可以直接输入到maxLik()函数中举办预计,不外需要留意的是该函数默认是正的似然函数值,并且不是在函数中输入数据,因此normal()函数需要做一些修改如下:normal <- function(theta){ mu <- theta[1] sigma <- theta[2] logL <- -0.5*N*log(2*pi) – N*log(sigma) – sum(0.5*(x – mu)^2/sigma^2) return (logL)}对付给定的数据 x <- rnorm(100,1,2),N <- length(x),然后就可以利用下面的语句举办较大似然预计了:result <- maxLik(normal,start=c(0,1))获得的功效如下:print(result)Maximum Likelihood estimationNewton-Raphson maximisation, 8 iterationsReturn code 1: gradient close to zeroLog-Likelihood: -2117.389 (2 free parameter(s))Estimate(s): 1.007240 2.010635 可见,固然在maxLik()函数中给出的初始值是错误的,可是最后获得的预计值很是靠近真值。
http://blog.sciencenet.cn/blog-54276-443431.html