【问题标题】:Conducting MLE for multivariate case (bivariate normal) in R在 R 中为多变量案例(二元正态)进行 MLE
【发布时间】:2018-04-17 16:45:58
【问题描述】:

情况是我正在尝试为双变量正常情况构建 MLE 算法。然而,我卡在了似乎没有错误的地方,但是当我运行脚本时,它最终会出现警告。

我有一个大小为 n 的样本(一个固定常数,用 100 训练,但可以是其他任何值)来自均值 vector = (0,0) 和协方差 matrix = matrix(c(2.2,1.8,1.8,3),2,2) 的二元正态分布

我尝试了几种优化函数(包括nlm()mle()spg()optim())来最大化似然函数(或最小化负似然),但有警告或错误。

require(MASS)
require(tmvtnorm)
require(BB)
require(matrixcalc)

我已将第一个似然函数定义如下;

bvrt_ll = function(mu,sigma,rho,sample)
{
  n = nrow(sample)
  mu_hat = c(mu[1],mu[2])
  p = length(mu)
  if(sigma[1]>0 && sigma[2]>0)
  {
    if(rho<=1 && rho>=-1)
    {
    sigma_hat = matrix(c(sigma[1]^2
                     ,sigma[1]*sigma[2]*rho
                     ,sigma[1]*sigma[2]*rho
                     ,sigma[2]^2),2,2)
    stopifnot(is.positive.definite(sigma_hat))


    neg_likelihood = (n*p/2)*log(2*pi) + (n/2)*log(det(sigma_hat)) + 0.5*sum(((sample-mu_hat)%*%solve(sigma_hat)%*%t(sample-mu_hat)))

    return(neg_likelihood)
    }
  }
  else NA

}

我更喜欢这个,因为我可以为 sigmas 和 rho 设置约束,但是当我使用 mle() 时

> mle(minuslogl = bvrt_ll  ,start = list(mu = mu_est,sigma=sigma_est,rho = 
rho_est)
+     ,method = "BFGS")
Error in optim(start, f, method = method, hessian = TRUE, ...) : 
  (list) object cannot be coerced to type 'double'

我还尝试了 BB 包中的 nlmspg,但它们也没有帮助。我在没有定义约束的情况下尝试了相同的函数(在似然内,而不是在优化函数中),我可以得到一些结果但有警告,比如在nlmspg 中都说由于协方差矩阵不是正数,该过程失败虽然它是确定的,但我认为这是由于迭代,当迭代协方差矩阵可能不是正定的,以及我没有定义约束的事实。

因此,我需要为二元正态构造一个mle 算法,我在哪里做错了?

注意:我还尝试了以下优化功能,(我不确定我是否正确);

neg_likelihood = function(mu,sigma,rho)
{
    if(rho>=-1 && rho<=1)
        {
          -sum(mvtnorm::dmvnorm(x=sample_10,mean=mu
                    ,sigma = matrix(c(sigma[1]^2
                    ,sigma[1]*sigma[2]*rho,sigma[1]*sigma[2]*rho
                    ,sigma[2]^2),2,2),log = T))
        }
  else NA
}

感谢任何帮助。

谢谢。

编辑:mu 是长度为 2 的向量,指定总体均值,sigma 是长度为 2 的向量(指定随机变量的总体标准差),rho 是作为双变量 rv s 之间相关系数的标量。

【问题讨论】:

    标签: r statistics mle


    【解决方案1】:

    您可以以封闭形式执行此操作,因此无需进行数值优化。见wiki。只需使用colMeanscov 并注意help("cov") 中的method 参数和此评论

    使用分母n - 1,它给出了一个无偏估计 i.i.d 的 (co)variance观察。这些函数返回 NA 时 只有一个观察结果(而 S-PLUS 一直在返回 NaN), 如果x 的长度为零,则失败。

    【讨论】:

    • 感谢您的评论。但是,我想通过迭代过程来证明您提出的实际上是协方差的 MLE。我需要处理数字生成和优化过程,以证明协方差矩阵和 mu 向量的 mle 最大化似然函数。
    • 即使您实现牛顿法(例如),如果您提供分析梯度和 Hessian,它也会在一次迭代中收敛。你正确地想要另一个例子。 如果您想这样做,那么无论如何都要重新参数化您的参数以使用例如协方差矩阵的 Cholesky 分解。
    • 没错,但问题是我无法正确设置约束,因此 R 代码运行时出现警告或错误。当我尝试使用“if(rho>=-1 && rho
    猜你喜欢
    • 2018-04-22
    • 2011-12-13
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多