Я начал все больше и больше работать с новой статистикой Mathematica и функциями анализа данных.
Я посетил онлайн-семинар "Статистика и анализ данных с помощью математики" во вторник (отличная презентация, я очень рекомендую его), но я столкнулся с некоторыми проблемами, которые, я надеюсь, у кого-то на этом форуме может быть несколько моментов, чтобы рассмотреть.
Я создал довольно обширный ноутбук для оптимизации анализа данных, назовите его "AnalysisNotebook". Он выводит обширную серию диаграмм и данных, включая: гистограммы, графики PDF
и CDF
, графики Q-Q, графики для изучения соответствия хвоста, данные теста гипотез и т.д.
Это отлично работает, пока я остаюсь с готовыми дистрибутивами Mathematica и, вероятно, отлично работает для простых MixtureDistribution
и даже ParameterMixtureDistribution
, так как для этих Mathematica можно определить моменты и PDF
и CDF
, FindDistributionParameters
и т.д., разбивая смеси на кусочки.
У меня возникают проблемы, когда я пытаюсь определить и использовать даже простой TransformedDistribution
i.e.,
LogNormalNormalDistribution[Gamma_, Sigma_, Delta_] :=
TransformedDistribution[ u*v + Delta,
{Distributed[ u, LogNormalDistribution[ Log[Gamma], Sigma] ],
Distributed[ v, NormalDistribution[0, Sqrt[2]]}
];
Я бы хотел сделать много вещей в соответствии с такими Transformed Distributions. Я ценю вызов чего-то подобного этому подарку (некоторые из которых я узнал на этом форуме - спасибо всем):
- У них могут быть закрытые формы;
-
PDF
иCDF
для вычисления может потребоваться интерполяция, обход или пользовательские подходы; -
FindDistributionParameters
иDistributionFitTest
не будут знать, как бороться с этим.
В основном стандартные вещи, которые хотелось бы использовать, действительно не работают/не могут работать, и нельзя ожидать, что они это сделают.
Можно написать собственный код, чтобы делать такие вещи (снова этот форум мне очень помог), но затем, используя всю сложность пользовательских альтернатив в моем аналитическом журнале, просто кажется глупым. Аналитический журнал будет расти с каждой новой пользовательской функцией.
Это очень помогло бы мне в этом усилии, если бы я мог написать свои пользовательские версии PDF
, CDF
, FindDistributionParameters
, DistributionFitTest
и все, что мне могло бы потребоваться, чтобы стандарты, которые более общие встроенные версии просто звоните без проблем. Таким образом, что-то вроде моего AnalysisNotebook может оставаться простым и незагроможденным, стандартным компонентом в моей панели инструментов. Я мог бы потратить свое время на математику, а не на сантехнику, если вы примете мой смысл.
Чтобы прояснить, что я имею в виду под этим, подобно тому, как можно определить версии функции для выполнения разных вещей (использовать разные количества аргументов или другие виды ситуационной осведомленности), Mathematica должна сделать что-то подобное для функций, которые используют распределения как аргументы, чтобы знать, какое решение использовать для конкретного встроенного дистрибутива. Я хочу возможность добавлять или расширять функциональные возможности PDF[]
, CDF[]
, FindDistributionParameters[]
, DistributionFitTest[]
и связанных функций на этом уровне - добавлять функциональные возможности для пользовательских дистрибутивов и их необходимый поддерживающий код, который встроенный функции могли бы/могли бы звонить плавно.
Возможно, просто мечта, но если кто-нибудь знает, каким образом я мог бы подходить к этому, я очень благодарен за ваши отзывы.
EDIT -. Какие проблемы я столкнулся:
Следующий код никогда не завершает выполнение
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_] =
[email protected][((Moment[LogNormalNormalDistribution[gamma, sigma, delta],#]&/@Range[5]) - moments)^2];
NMinimize[{costFunction[gamma, sigma, delta], gamma > 0, sigma > 0}, {gamma, sigma, delta}] ]
Это работает отлично само по себе, но не играет хорошо со всем остальным.