MATLAB最大似然估计中的数值问题

时间:2017-02-22 16:53:11

标签: matlab optimization statistics

我正在使用mlemlecov来估算标量噪声信号n的均值和方差,假设这些信号通常与以下平均值和标准偏差模型一起分布:

mean(x,y) = @(x,y) k(1)+k(2)*x+k(3)*x.^2+k(4)*y+k(5)*y.^2;
sd(x,y)  = @(x,y) k(6)+k(7)*x+k(8)*x.^2+k(9)*y+k(10)*y.^2;

其中x在[0,3]区间内且y在[0,pi / 2]区间内(因此,缩放似乎不会立即出现问题)。用于MLE的nxy值的样本包含10981个样本。以下是一些定性显示样本的图表:

enter image description here 图1.噪声样本的直方图。

enter image description here 图2.噪声样本与x和y样本的散点图。

我的目标是计算k(i)模型参数i=1,...,10的最大似然估计值,以及它们的标准偏差kSE(i)(由对角元素的平方根给出)由mlecov)输出的渐近协方差矩阵。

对于最大似然估计,我最小化负对数似然:

enter image description here

我还给MATLAB提供了L(k(1),...,k(10))mle所使用的负对数似然mlecov的分析梯度,这样渐变的数值近似有望对数值问题没有贡献我我要形容。

数字问题

为了证明这个问题,我提出了三种情况。

场景1 。我直接在示例数据上运行mlemlecov。这将输出以下类似Stata的摘要:

-----------------------------------------------------------------------------
Coeffs   |      Val.     Std. Err.       z      P>|z|    [95% Conf. Interval]
---------+-------------------------------------------------------------------
   k1    |   -0.0153      0.0014     -11.27     0.000     -0.0179    -0.0126 
   k2    |    0.0075      0.0016       4.79     0.000      0.0045     0.0106 
   k3    |    0.0045      0.0006       7.44     0.000      0.0033     0.0056 
   k4    |    0.0131      0.0023       5.57     0.000      0.0085     0.0177 
   k5    |   -0.0101      0.0012      -8.45     0.000     -0.0125    -0.0078 
   k6    |    0.0114      0.0011      10.25     0.000      0.0092     0.0135 
   k7    |    0.0244      0.0011      21.86     0.000      0.0222     0.0266 
   k8    |   -0.0001      0.0004      -0.34     0.732     -0.0010     0.0007 
   k9    |   -0.0190      0.0018     -10.48     0.000     -0.0225    -0.0154 
   k10   |    0.0057      0.0009       6.32     0.000      0.0039     0.0074 
-----------------------------------------------------------------------------

&#34; Val。&#34;列对应于k(i)估算值和&#34;标准。 ERR&#34。列对应于kSE(i)。 &#34; P&gt; | z |&#34; column给出零假设k(i)==0的单个系数Wald检验的p值(如果该p值为<0.05,我们拒绝零假设,从而得出系数k(i)可能在95%的水平上很重要。)

请注意,为了计算k(i)估计值的渐近协方差矩阵,mlecov计算H的Hessian L(k(1),...,k(10)) - 我为其提供了分析梯度。 H的条件编号为cond(H)=2.7437e3mlecov函数执行Hessian的Cholesky分解,它给出了带有R的上三角矩阵cond(R)=52.38

场景2 。我将所有样本乘以0.1,从而对样本数据mlemlecovn*0.1运行x*0.1y*0.1。这将输出以下摘要:

-----------------------------------------------------------------------------
Coeffs   |      Val.     Std. Err.       z      P>|z|    [95% Conf. Interval]
---------+-------------------------------------------------------------------
   k1    |   -0.0010      0.0001      -7.39     0.000     -0.0013    -0.0008 
   k2    |    0.0063      0.0016       3.97     0.000      0.0032     0.0093 
   k3    |    0.0494      0.0060       8.21     0.000      0.0376     0.0611 
   k4    |    0.0023      0.0024       0.95     0.340     -0.0024     0.0070 
   k5    |   -0.0462      0.0123      -3.75     0.000     -0.0704    -0.0221 
   k6    |    0.0014      0.0001      12.30     0.000      0.0012     0.0016 
   k7    |    0.0220      0.0011      20.86     0.000      0.0200     0.0241 
   k8    |    0.0078      0.0042       1.87     0.062     -0.0004     0.0160 
   k9    |   -0.0228      0.0020     -11.27     0.000     -0.0267    -0.0188 
   k10   |    0.0747      0.0097       7.70     0.000      0.0557     0.0937 
-----------------------------------------------------------------------------

p值已更改。此外,现在cond(H)=9.3831e5(!!!)和cond(R)=968.6616。请注意,当我从均值和标准差模型中删除二阶项(x.^2y.^2)时,不再存在此问题(即p值保持不变且{{1除了常量项k(i)k(1)之外,值只是按0.1)缩放。这是否表示数字问题?

场景3 。我决定尝试将k(6)nx扩展到区间[-1,1],方法是将样本除以最大元素(即y,{{ 1}}和n(i)=n(i)/max(abs(n)))。在此缩放样本上运行x(i)=x(i)/max(abs(x))y(i)=y(i)/max(abs(y))会输出以下摘要:

mle

p值再次发生变化!现在mlecov(高于场景1(未缩放)但低于场景2(一切乘以0.1))。此外,----------------------------------------------------------------------------- Coeffs | Val. Std. Err. z P>|z| [95% Conf. Interval] ---------+------------------------------------------------------------------- k1 | -0.0347 0.0041 -8.40 0.000 -0.0428 -0.0266 k2 | 0.1193 0.0141 8.46 0.000 0.0917 0.1470 k3 | 0.0482 0.0164 2.94 0.003 0.0160 0.0803 k4 | -0.0002 0.0120 -0.02 0.987 -0.0238 0.0234 k5 | -0.0305 0.0103 -2.96 0.003 -0.0506 -0.0103 k6 | 0.0557 0.0035 16.11 0.000 0.0489 0.0624 k7 | 0.1131 0.0107 10.60 0.000 0.0922 0.1341 k8 | 0.1164 0.0128 9.13 0.000 0.0914 0.1414 k9 | -0.1132 0.0094 -11.99 0.000 -0.1317 -0.0947 k10 | 0.0583 0.0079 7.37 0.000 0.0428 0.0738 ----------------------------------------------------------------------------- ,仅略高于场景1。

我的问题

对我来说,三个分析的预期行为是cond(H)=4.7550e3cond(R)=68.9565会改变,但p值将保持不变 - 换句话说,缩放数据不应该是任何模型系数或多或少具有统计学意义。这与上述场景相反,p值每次都会改变!

请帮我调试这个数字问题 - 或者解释这是否实际上是预期的行为,我误解了一些东西。感谢您阅读这篇长篇文章并提供帮助 - 我试图在此处封装所有相关问题的详细信息。

1 个答案:

答案 0 :(得分:0)

首先,我假设您正在控制抽样的随机种子,因此在所有情况下都是相同的。

考虑到这一点,我认为这可能与您尝试解决的优化问题有关。 我有亲身体验,当目标函数不是凸的时,微小的数值变化(在我的例子中,按一个因子缩放对数似然函数,或者等效地:添加所有数据点的副本)会改变你的结果。

我会尝试在所有参数中推导出对数似然函数的解析梯度。 这应该让您了解优化问题是否是凸的。 如果它不是凸面,则需要做一些事情来确保您获得真正的 MLE。

  • 优化函数 1000 次并选择对数似然最大的估计
  • 更改优化器的容差和步数
  • 尝试其他优化器,例如信任区域搜索或粒子群

我会先模拟这个问题的一个更简单的版本,然后逐渐构建它以查看这种行为从哪里开始发生。例如,开始时只有 1 个参数用于均值,1 个参数用于噪声,然后看看 p 值会发生什么。