Я начал все больше и больше работать с новой статистикой 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}] ]
Это работает отлично само по себе, но не играет хорошо со всем остальным.