【问题标题】:Implementing Maximum Likelihood in R在 R 中实现最大似然
【发布时间】:2014-02-01 12:29:05
【问题描述】:

我有一个数据集here

我希望使用以下似然函数应用最大似然估计:

从数据集文件中,我有一个包含三个变量的列向量,rho、(s_x*)^2 和 T。总共有 N = 3295 个观察值。我想针对两个变量最大化上述似然函数:mu 和 sigma^2。

通过记录上述可能性,我们有以下对数可能性:

如何找到 mu 和 sigma^2 的 MLE?我尝试了以下方法,但我不确定它是否正确。

假设我以rhos.sqT 的名称将数据导入R,那么以下是我的代码:

####################################

N = 3295

negloglike.f<-function(theta){

  mu<-theta[1]
  sigsq<-theta[2]

  negloglike<- 0
  negloglike<- -(-N/2*log(2*pi) - sum(1/2*log(sigsq+4/(s.sq*T))+1/(2*(sigsq+4/(s.sq*T)))*(rho-mu)^2))  

  negloglike
}

## optimisation  ##
MLE_obj<-optim(c(30,500),negloglike.f,method="BFGS", hessian=TRUE, control = list(maxit = 30000))

MLE_obj

#################################

我担心我的代码不正确,或者这不是正确的方法,因为有时我会收到以下警告消息:

Warning message:
In log(sigsq + 4/(s.sq * T)) : NaNs produced

那么我的代码正确吗?还是有其他方法可以找到 MLE?

【问题讨论】:

  • 该错误消息是因为您尝试获取负数的日志。检查您的数据是否与您尝试拟合的分布一致。您还可以重新参数化可能性以避免数值问题。
  • @Hong Ooi,我也是这么想的,但是我检查了 s.sq 和 T 的数据,两者都没有负值。

标签: r


【解决方案1】:

它对我有用,并提供以下结果:

$par
[1]  10.67069 110.65132

$value
[1] 15960.24

$counts
function gradient 
      51       38 

$convergence
[1] 0

$message
NULL

$hessian
           [,1]        [,2]
[1,] 17.5756300 -0.28990189
[2,] -0.2899019  0.02188517

您可能在读取数据时出错。请注意,变量 s.sq 在 Excel 表中被称为 s_sq。 我使用带有选项的read.csv 读取数据:sep=";", dec=","

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2023-03-07
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多