Как и в заголовке, у меня есть некоторые данные, которые примерно бинормально распределены, и я хотел бы найти два его базовых компонента.* 1 и m 2 и стандартные отклонения s 1 и s 2 .Два гауссиана масштабируются таким весовым коэффициентом, что w 1 + w 2 = 1
Я могу добиться этого, используя функцию vglm
VGAM
пакет, такой как:
fitRes <- vglm(mydata ~ 1, mix2normal1(equalsd=FALSE),
iphi=w, imu=m1, imu2=m2, isd1=s1, isd2=s2))
Это мучительно медленно и может занять несколько минут в зависимости от данных, но я могу с этим смириться.
Теперь я хотел бы увидетькак распределение моих данных меняется со временем, поэтому я разбиваю свои данные на несколько (30-50) блоков и повторяю процесс подбора для каждого из них.
Итак, вот вопросы:
1) как ускорить процесс подгонки?Я пытался использовать nls
или mle
, которые выглядят намного быстрее, но в большинстве случаев не смогли получить хорошую посадку (но мне удалось получить все возможные ошибки, которые эта функция могла вызвать у меня).Также мне не ясно, как наложить ограничения с этими функциями (w в [0; 1] и w 1 + w 2 = 1)
2)как мне автоматически выбрать несколько хороших начальных параметров (я знаю, что это вопрос на 1 миллион долларов, но вы никогда не узнаете, может быть, у кого-то есть ответ)?Прямо сейчас у меня есть небольшой интерфейс, который позволяет мне выбирать параметры и визуально видеть, как будет выглядеть первоначальный дистрибутив, что очень здорово, но я бы хотел сделать это автоматически для этой задачи.
Я думал ополагаясь на x, соответствующий 3-му и 4-му квартилям y, в качестве начальных параметров для двух средних значений?Вы считаете, что это было бы разумно?