Подгонка экспоненциального распределения к счетчикам длительности задачи - PullRequest
0 голосов
/ 23 июня 2019

В моем наборе данных есть муравьи, которые переключаются между одним состоянием (в данном случае состоянием покоя) и всеми другими состояниями в течение определенного периода времени. Я пытаюсь приспособить экспоненциальное распределение к числу раз, которое муравей проводит в состоянии покоя в течение некоторого промежутка времени (например, муравей может отдыхать в течение 5 секунд 10 раз, или он может отдыхать в течение 6 секунд 5 раз, и т. Д. .). Хотя субъективно это распределение длительностей кажется экспоненциальным, я не могу подстроить экспоненциальное распределение с одним параметром (где один параметр является скоростью) для данных. Можно ли это сделать с моим набором данных, или мне нужно использовать экспоненциальное распределение с двумя параметрами?

Я пытаюсь подогнать данные к следующему уравнению (где лямбда - скорость):

лямбда * exp (-lambda * x).

Это, однако, не представляется математически возможным для учета либо моих данных, либо плотности вероятности моих данных. В R я пытаюсь сопоставить данные со следующим кодом:

 fit = nls(newdata$x.counts ~ (b*exp(b*newdata$x.mids)), start = 
 list(x.counts = 1, x.mids = 1, b = 1)) 

Когда я это делаю, я получаю следующее сообщение:

 Error in parse(text= x, keep.source = FALSE): 
 <text>:2:0: unexpected end of input
 1: ~
    ^

Я полагаю, что получаю это, потому что математически невозможно приспособить это конкретное уравнение к моим данным. Я прав в этом, или есть способ преобразовать данные или изменить уравнение, чтобы я мог привести его в соответствие? Я также могу привести его в соответствие с уравнением lambda * exp (mu * x), где mu - еще один свободный параметр, но моя цель - сделать это уравнение максимально простым, поэтому я бы предпочел использовать версию с одним параметром.

Вот данные, так как я не могу найти способ присоединить их как CSV: https://docs.google.com/spreadsheets/d/1euqdgHfHoDmQKXHrtOLcn5x5o81zY1sr9Kq6NCbisYE/edit?usp=sharing

1 Ответ

0 голосов
/ 23 июня 2019

Во-первых, в вашей формуле есть опечатка, вы забыли знак -

(b*exp(b*newdata$x.mids))

Но это не то, что выдает ошибку.Параметр start должен представлять собой список, который инициализирует только значение параметра, а не x.counts или x.mids.

Таким образом, правильная версия будет:

fit = nls(newdata$x.counts ~ b*exp(-b*newdata$x.mids), start = list(b = 1)) 
...