将指数分布拟合到任务持续时间计数
Fitting Exponential Distribution to Task Duration Counts
在我的数据集中,我有蚂蚁在一段时间内在一种状态(在本例中为静止状态)和所有其他状态之间切换。我试图将指数分布拟合到一只蚂蚁在一段时间内处于静止状态的次数(例如,蚂蚁可能会休息 5 秒 10 次,或者它可能会休息 6 秒 5 次,等等) .).虽然主观上这种持续时间分布似乎呈指数分布,但我无法将单个参数指数分布(其中一个参数是速率)拟合到数据中。这可能与我的数据集有关,还是我需要使用两个参数的指数分布?
我正在尝试将数据拟合到以下等式(其中 lambda 是速率):
lambda * 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
首先,您的公式有错字,忘记了 - 登录
(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))
在我的数据集中,我有蚂蚁在一段时间内在一种状态(在本例中为静止状态)和所有其他状态之间切换。我试图将指数分布拟合到一只蚂蚁在一段时间内处于静止状态的次数(例如,蚂蚁可能会休息 5 秒 10 次,或者它可能会休息 6 秒 5 次,等等) .).虽然主观上这种持续时间分布似乎呈指数分布,但我无法将单个参数指数分布(其中一个参数是速率)拟合到数据中。这可能与我的数据集有关,还是我需要使用两个参数的指数分布?
我正在尝试将数据拟合到以下等式(其中 lambda 是速率):
lambda * 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
首先,您的公式有错字,忘记了 - 登录
(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))