Я начал все больше и больше работать с новыми функциями статистики и анализа данных Mathematica.
Я присутствовал на онлайн-семинаре «Статистика и анализ данных с Mathematica» во вторник (отличная презентация, я очень рекомендую это), но я столкнулся с некоторыми проблемами, которые, я надеюсь, у кого-то на этом форуме могут быть несколько минутрассмотреть.
Я создал довольно обширную записную книжку, чтобы упростить мой анализ данных, назовите ее «AnalysisNotebook».Он выводит обширную серию графиков и данных, включая: гистограммы, графики PDF
и CDF
, графики QQ, графики изучения подгонки хвоста, данные проверки гипотез и т. Д.
Это прекрасно работает, пока яоставайтесь с готовыми дистрибутивами Mathematica и, вероятно, отлично работает для простых MixtureDistribution
s и даже ParameterMixtureDistribution
s, поскольку для этих Mathematica могут, вероятно, выяснить моменты и PDF
и CDF
, FindDistributionParameters
и т. д.разбивая смеси на куски.
У меня возникают проблемы, когда я пытаюсь определить и использовать даже простой TransformedDistribution
, т. Е.
LogNormalNormalDistribution[Gamma_, Sigma_, Delta_] :=
TransformedDistribution[ u*v + Delta,
{Distributed[ u, LogNormalDistribution[ Log[Gamma], Sigma] ],
Distributed[ v, NormalDistribution[0, Sqrt[2]]}
];
Я бы хотел сделать много вещей в духе таких ТрансформированныхРаспределения.Я ценю вызов, подобный этому подарку (некоторые из которых я узнал на этом форуме - спасибо всем):
- Возможно, они не имеют закрытых форм;
PDF
и CDF
вычисления могут потребовать интерполяции, обходных путей или пользовательских подходов; FindDistributionParameters
и DistributionFitTest
не будут знать, как справляться с подобными вещами.
В основном стандартные вещи, которые хотелось бы использовать, на самом деле не работают / не могут работать, и вряд ли можно ожидать, что они это сделают.
Можно написать собственный код для таких вещей (опять же этот форум мне очень помог), но включение всей сложности пользовательских альтернатив в мой AnalysisNotebook кажется глупым.AnalysisNotebook будет расти с каждой новой пользовательской функцией.
Это очень помогло бы мне в этом, если бы я мог написать свои пользовательские версии PDF
, CDF
, FindDistributionParameters
, DistributionFitTest
и что-нибудь ещеМне может понадобиться стандарты, которые более общие встроенные версии будут просто вызывать легко.Таким образом, что-то вроде моего AnalysisNotebook может остаться простым и беспорядочным, стандартным компонентом в моем наборе инструментов.Я мог бы уделять больше времени работе над математикой, а не слесарным делом, если вы понимаете мой смысл.
Чтобы пояснить, что я имею в виду под этим, аналогично тому, как можно определить версии функции для выполнения разных задач (используйте разныечисло аргументов или другие виды ситуационной осведомленности), Mathematica должна сделать нечто подобное для функций, которые используют распределения в качестве аргументов, чтобы знать, какое решение использовать для конкретного встроенного распределения.Я хочу иметь возможность добавлять или расширять функциональность PDF[]
, CDF[]
, FindDistributionParameters[]
, DistributionFitTest[]
и связанных функций на этом уровне - чтобы добавить функциональность для пользовательских дистрибутивов и их требуемого вспомогательного кода, который встроен вфункции могли бы / могли бы вызываться без проблем.
Возможно, просто мечта, но если кто-нибудь знает, как я мог бы подойти к этому, я был бы очень признателен за ваш отзыв.
РЕДАКТИРОВАТЬ- Вид проблем, с которыми я столкнулся:
Следующий код никогда не завершает выполнение
r1 = RandomVariate[LogNormalNormalDistribution[0.01, 0.4, 0.0003], 1000];
FindDistributionParameters[r1, LogNormalNormalDistribution[gamma, sigma, delta]]
Чтобы обойти это, я написал следующую функцию
myLNNFit[data_] := Module[{costFunction, moments},
moments = Moment[EmpiricalDistribution[data], #] & /@ Range[5];
costFunction[gamma_, sigma_, delta_] =
Sqrt@Total[((Moment[LogNormalNormalDistribution[gamma, sigma, delta],#]&/@Range[5]) - moments)^2];
NMinimize[{costFunction[gamma, sigma, delta], gamma > 0, sigma > 0}, {gamma, sigma, delta}] ]
Это прекрасно работает само по себе, но не очень хорошо со всем остальным.