пакет, подходящий для смесей дистрибутивов student-t

Я ищу часть программного обеспечения (предпочтительно python, но на самом деле все, для чего существует ядро ​​jupyter), чтобы подогнать образец данных к смеси t-распределений.

Я уже довольно долго искал, и кажется, что это довольно неясная попытка, поскольку большинство результатов поиска появляются для смеси гауссов (что меня здесь не интересует).

На данный момент наиболее многообещающими кандидатами являются R-пакеты «AdMit» и «MitSEM». Однако я не знаком с R и нахожу описание этих пакетов довольно сложным, и кажется, что их основной целью является не подгонка смесей t, а использование этого как шага для выполнения чего-то другого.

Вкратце это то, что я хочу, чтобы программное обеспечение выполняло:

Подгонка смеси t-распределений к некоторым данным и оценка «местоположения», «масштаба» и «степеней свободы» для каждого из них.

Я надеюсь, что кто-то может указать мне на простой пакет, я не могу поверить, что это такой неясный вариант использования.


person vare    schedule 29.06.2017    source источник


Ответы (2)


Кажется, это работает (в R):

Имитация примера:

 set.seed(101)
 x <- c(5+ 3*rt(1000,df=5),
        10+1*rt(10000,df=20))

Соответствовать:

 library(teigen)
 tt <- teigen(x,
        Gs=2,   # two components
        scale=FALSE,dfupdate="numeric",
        models=c("univUU")  # univariate model, unconstrained scale and df
        # (i.e. scale and df can vary between components)
 )

Все параметры достаточно близки (за исключением df для второго компонента, но это очень сложно оценить...)

 tt$parameters[c("df","mean","sigma","pig")]
 ## $df    ## degrees of freedom
 ## [1]  3.578491 47.059841  
 ## $mean  ## ("location")
 ##           [,1]
 ## [1,]  4.939179
 ## [2,] 10.002038
 ## $sigma    ## reporting variance rather than sd (I think?)
 ## , , 1
 ##          [,1]
 ## [1,] 8.763076
 ## , , 2
 ##          [,1]
 ## [1,] 1.041588
 ## $pig     ## mixture probabilities
 ## [1] 0.09113273 0.90886727
person Ben Bolker    schedule 29.06.2017
comment
спасибо Бен, кажется, это именно то, что мне нужно! Теперь мне нужно только найти способ сделать это вызываемым из Python;) Как новичок в R: почему вывод параметра sigma выглядит так запутанным? - person vare; 02.07.2017
comment
Это сложнее, чем кажется необходимым, потому что teigen в первую очередь предназначен для многомерных t-смесей, которые будут иметь отдельные матрицы дисперсии-ковариации для каждого компонента. c(tt$parameters$sigma) должен уменьшить массив до вектора. Не должно быть слишком сложно разработать собственную оценку максимального правдоподобия для одномерной t-смеси с помощью одной из многих библиотек для подгонки MLE для Python, но это будет больше с нуля, чем вам кажется интересным (и, поскольку я менее знаком с Python, больше усилий для меня, чтобы что-то состряпать) - person Ben Bolker; 02.07.2017
comment
Отличный ответ Бен. Это было именно то, что я искал. - person bill_080; 30.10.2018

Поздно на эту вечеринку, но, поскольку вы предпочитаете что-то для Python, кажется, что на pypi есть несколько пакетов, которые соответствуют конечным смесям Стьюдента, в том числе:

https://pypi.org/project/studenttmixture/

https://pypi.org/project/student-mixture/

https://pypi.org/project/smm/

поэтому все это можно установить с помощью pip.

Scikit-learn и другие обычные подозреваемые, очевидно, не имеют этой функциональности в настоящее время.

person HappyDog    schedule 20.04.2021