EstimatingDistribution для StableDistribution - PullRequest
       12

EstimatingDistribution для StableDistribution

1 голос
/ 17 февраля 2011

У меня есть 2 набора данных:

d1= {0.119894,0.430666,0.0831885,0.0319174,0.120422,0.113005,0.396407,0.286316,0.0846212,0.0380193,0.047136,0.0362305,0.0445161,0.142403,0.0540607,0.133119,0.10831,0.173586,0.162465,0.0704632,0.0856676,0.086322,0.31334,0.210488,0.165907,0.119317,0.0995894,0.103821,0.135736,0.245069,0.0814167,0.142331,0.321499,0.0576824,0.0535766,0.0546975,0.121395,0.0608112,0.0606295,0.133289,0.0468469,0.0501325,0.0641351,0.0846396,0.317252,0.0779754,0.105217,0.0749865,0.302625,0.301864,0.0929992,0.12178,0.279253,0.245539,0.198353,0.107202,0.17784,0.145572,0.055006,0.0770127,0.0861758,0.189966,0.21403,0.0834313,0.206845,0.2087,0.263422,0.0767717,0.162445,0.0542824,0.0553086,0.141381,0.052898,0.0945407,0.0776741,0.0367623,0.0565677,0.166219,0.035447,0.120121,0.0418321,0.11264,0.0540176,0.120358,0.074417,0.242225,0.398622,0.308373,0.15192,0.278717};

d2={0.170719,0.099203,0.0539713,0.15749,0.150455,0.142714,0.0705496,0.0690684,0.0630756,0.0372223,0.0885515,0.0305229,0.0869673,0.0426363,0.0504665,0.0371966,0.0766164,0.0402321,0.0334813,0.0489499,0.0753463,0.0942363,0.0786223,0.335095,0.0706324,0.0764047,0.0682716,0.0699429,0.0355438,0.0755698,0.10206,0.199187,0.0560379,0.0342713,0.0500202,0.0558365,0.0624332,0.0418887,0.0531662,0.0499419,0.0273659,0.0228881,0.0893776,0.0643183,0.0171277,0.0373337,0.0457631,0.0764322,0.0963383,0.0633643,0.107952,0.0570244,0.19336,0.0428824,0.0629954,0.120787,0.0924894,0.0562895,0.125588,0.116919,0.196895,0.264337,0.0787541,0.318374,0.193144,0.147134,0.0456675,0.0419496,0.057378,0.0577714,0.0706519,0.0410366,0.0716635,0.0547774,0.0157382,0.030444,0.0769898,0.0121786,0.0586156,0.0314843,0.0942514,0.1627,0.0781299,0.148406,0.423559,0.276206,0.0708934,0.0812794,0.159947};

Теперь я хочу найти предполагаемое распределение, используя StableDistribution []

Для первого набора данных я делаю следующее:

dist1 = EstimatedDistribution[d1, StableDistribution[alpha, beta, mu, sigma]]

Я получаю сообщение и выводлю

FindMaximum::sdprec: Line search unable to find a sufficient increase in the function value with MachinePrecision digit precision. >>

StableDistribution[1,0.863446,1.,-0.0781627,0.0345779]

Вывод выглядит нормально (не очень подходит для данных, но не так уж плохо), но что означает сообщение для вывода?

Для второго набора данных, d2

 dist2 = EstimatedDistribution[d2, StableDistribution[alpha, beta, mu, sigma]]

Я получаю другое сообщение.

Optimization`ModifiedCholeskyDecomposition::herm: The matrix {{2.76856*10^157,-1.75574*10^159,-1.84519*10^157,-2.26892*10^157},{7.88598*10^159,0.,6.41507*10^159,7.88598*10^159},{1.82386*10^157,6.41507*10^159,1.13495*10^157,1.82386*10^157},{-2.26892*10^157,-1.75574*10^159,-1.84519*10^157,1.68961*10^157}} is not Hermitian or real and symmetric.

и вывод:

StableDistribution[1,0.834688,1.,-0.0101189,0.0181306]

Итак,У меня есть пара вопросов.Кто-нибудь может объяснить эти сообщения и их актуальность?Мне кажется, что Mathematica пытается различными способами оценить распределение, а некоторые просто не очень хорошо работают.

Thx.

J.

Ответы [ 2 ]

5 голосов
/ 17 февраля 2011

Чтобы сделать оценку параметров для стабильного распределения эффективной, строится многомерная интерполяция pdf (alpha, beta, x), и результирующая интерполяция используется для оценки.Полиномиальная интерполяция демонстрирует небольшие колебания, которые могут отбросить процедуры максимизации.Таким образом, при работе со стабильной оценкой лучше использовать PrecisionGoal-> 3, AccuracyGoal-> 3.

Это не избавит вас от ваших сообщений, но ускорит оценку, что важно для проблем большего размера.

Поскольку размер данных у вас небольшой, статистические погрешности оценок в любом случае велики.

Первое сообщение является доброкачественным, но второе, вероятно, является ошибкой, поскольку логарифмическая вероятность предполагаемого распределения данных слишком мала.

Кроме того, похоже, что StableDistribution не очень подходит для ваших данных:

In[44]:= LogLikelihood[
  EstimatedDistribution[d1, StableDistribution[a, b, c, d]], 
  d1] // Quiet

Out[44]= 101.926

In[45]:= LogLikelihood[
  EstimatedDistribution[d1, HyperbolicDistribution[a, b, c, d]], 
  d1] // Quiet

Out[45]= 111.847

In[46]:= LogLikelihood[
  EstimatedDistribution[d2, StableDistribution[a, b, c, d]], 
  d2] // Quiet

Out[46]= -10.2194

In[47]:= LogLikelihood[
  EstimatedDistribution[d2, HyperbolicDistribution[a, b, c, d]], 
  d2] // Quiet

Out[47]= 143.04
2 голосов
/ 17 февраля 2011

Общий комментарий о предупреждениях числового оптимизатора - у меня была похожая проблема с использованием FindMaximum и получением предупреждений "достаточного уменьшения", даже если вывод казался нормальным.Это связано с тем, что по умолчанию AccuracyGoal из 6 не может быть гарантировано, но меньшая цель может быть достигнута без предупреждений.

Вы можете глобально отключить предупреждение с помощью Off[FindMaximum::sdprec] или отключить его вкомандная база с

Quiet[EstimatedDistribution[d1,StableDistribution[alpha, beta, mu, sigma]], FindMaximum::sdprec]
...