R: mixdist 包中的 mix() 返回错误

标签 r normal-distribution mixed-models nlm

我已经在 R 中安装了 mixdist 包来组合发行版。具体来说,我正在使用 mix()功能。 See documentation. 基本上,我得到

Error in nlm(mixlike, lmixdat = mixdat, lmixpar = fitpar, ldist = dist, : missing value in parameter

我用谷歌搜索了错误消息,但没有弹出任何有用的结果。

我对mix()的第一个论点是一个名为 data.df 的数据框。它的格式与内置数据集 pike65 完全相同。我也做了data.df <- as.mixdata(data.df)

我的第二个参数有两行。它是一个名为 datapar 的数据框,其格式与 pikepar 完全相同。我的pi值为 0.5 和 0.5。我的mu值为 250 和 463(基于我的数据集)。我的sigma值为 0.5 和 1。

我调用mix()好像:
fitdata <- mix(data.df, datapar, "norm", constr = mixconstr(consigma="CCV"), emsteps = 3, print.level = 2)

打印显示我的 pi第一次迭代后,值从 0.5 变为 NaN,并且我的梯度变为 0。

如果您能帮助解决此错误,我将不胜感激。

谢谢,
不详

最佳答案

使用您链接到的测试数据

library(mixdist) 
time <- seq(673,723) 
counts <-c(3,12,8,12,18,24,39,48,64,88,101,132,198,253,331,
   419,563,781,1134,1423,1842,2505,374,6099,9343,13009, 
   15097,13712,9969,6785,4742,3626,3794,4737,5494,5656,4806,
   3474,2165,1290,799,431,213,137,66,57,41,35,27,27,27) 
data.df <- data.frame(time=time, counts=counts) 

我们可以看到

startparam <- mixparam(c(699,707),1 )
data.fit <- mix(data.mix, startparam, "norm") 

给出同样的错误。此错误似乎与数据密切相关(因此此数据不起作用的原因可能与您的数据不起作用的原因不同,但这是您提供的唯一示例)。

此数据的问题在于,两组之间的概率在某些时候变得无法区分。然后就会发生这种情况,算法的“E”步骤无法正确估计 pi 变量。这里

pnorm(717,707,1)
# [1] 1
pnorm(717,699,1)
# [1] 1

两者都恰好为 1,这似乎导致了错误。当mix取1减去该值并将比率与估计组进行比较时,它会得到NaN值,这些值将传播到比例的估计。当在内部将这些 NaN 值传递给 nlm() 进行估计时,您会收到错误消息

Error in nlm(mixlike, lmixdat = mixdat, lmixpar = fitpar, ldist = dist,  : 
  missing value in parameter

可以使用以下命令复制相同的错误消息

f <- function(x) sum((x-1:length(x))^2)
nlm(f, c(10,10))
nlm(f, c(10,NaN)) #error

所以看起来 maxdist 包在这种情况下不起作用。您可能希望联系软件包维护者,看看他们是否意识到这个问题。与此同时,您将需要找到另一种方法来估计混合模型的参数。

关于R: mixdist 包中的 mix() 返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24615067/

相关文章:

r - lme() 函数中截距的两个随机效应

python - 具有两个随机效应的混合模型 - statsmodels

java - Java 中的随机正态分布返回范围外的值

r - 在 R 中绘制重叠的横向图

r - dmvnorm 中 x 参数的目的是什么?

r - R中带有图例的多个彩色箱形图

python - 在 Python 中运行 lmer(线性混合效应回归)

r - 根据字符串模式拆分 data.table 一行

r - 矩阵 %in% 矩阵

r - 比较并找到R中的重叠范围