繁体   English   中英

如何将逆高斯分布拟合到我的数据中,最好使用 fitdist {fitdistrplus}

[英]How to fit an inverse guassian distribution to my data, preferably using fitdist {fitdistrplus}

我正在尝试使用 GLMM 分析一些反应时间数据。 找到最适合我的数据的分布。我将 fitdist() 用于伽马分布和对数正态分布。 结果表明对数正态更适合我的数据。 然而,最近我读到逆高斯分布可能更适合反应时间数据。

我使用 nigFitStart 来获取起始值:

    library(GeneralizedHyperbolic)
    invstrt <- nigFitStart(RTtotal, startValues = "FN")

这给了我这个:

    $paramStart
       mu         delta         alpha          beta 
    775.953984862 314.662306398   0.007477984  -0.004930604 

所以我尝试使用 fitdist 的启动参数:

    require(fitdistrplus)

    fitinvgauss <- fitdist(RTtotal, "invgauss", start = list(mu=776, delta=314, alpha=0.007, beta=-0.05))

但我收到以下错误:

    Error in checkparamlist(arg_startfix$start.arg, arg_startfix$fix.arg,  : 
    'start' must specify names which are arguments to 'distr'.

我还使用了 ig_fit{goft} 并得到了以下结果:

    Inverse Gaussian MLE 
    mu                   775.954
    lambda              5279.089

所以,这次我将这两个参数用于 fitdist 中的 start 参数,但仍然得到完全相同的错误:

    > fitinvgauss <- fitdist(RTtotal, "invgauss", start = list(mu=776, lambda=5279))
    Error in checkparamlist(arg_startfix$start.arg, arg_startfix$fix.arg,  : 
     'start' must specify names which are arguments to 'distr'. 

有人提到将参数名称从 mu 和 lambda 更改为 mean 和 shape 已经解决了他们的问题,但我尝试了它,但仍然遇到相同的错误。

知道我该如何解决这个问题吗? 或者你能建议另一种方法来将逆高斯拟合到我的数据中吗?

谢谢你

    dput(RTtotal)
    c(594.96, 659.5, 706.14, 620.92, 811.05, 420.63, 457.08, 585.53, 
    488.59, 484.87, 496.72, 769.01, 458.92, 521.76, 889.08, 514.11, 
    553.09, 564.68, 1057.19, 437.79, 660.33, 639.58, 643.45, 419.47, 
    469.16, 457.78, 530.58, 538.73, 557.17, 1140.09, 560.03, 543.18, 
    1093.29, 607.59, 430.2, 712.06, 716.6, 566.69, 989.71, 449.96, 
    653.22, 556.52, 654.8, 472.54, 600.26, 548.36, 597.51, 471.97, 
    596.72, 600.29, 706.77, 511.6, 475.89, 599.13, 570.12, 767.57, 
    402.68, 601.56, 610.02, 891.95, 483.22, 588.78, 505.95, 554.15, 
    445.54, 489.02, 678.13, 532.06, 652.61, 654.79, 535.08, 1215.66, 
    633.6, 645.92, 454.37, 535.81, 508.97, 690.78, 685.97, 703.04, 
    731.99, 592.75, 662.03, 1400.33, 599.73, 1021.34, 1232.35, 855.1, 
    780.32, 554.4, 1965.77, 841.89, 1262.76, 721.62, 788.95, 1104.24, 
    1237.4, 1193.04, 513.91, 474.74, 380.56, 570.63, 700.96, 380.89, 
    481.96, 723.63, 835.22, 781.1, 468.76, 555.1, 522.22, 944.29, 
    541.06, 559.18, 738.68, 880.58, 500.14, 1856.97, 1001.59, 703.7, 
    1022.35, 1813.35, 1128.73, 864.75, 1166.77, 1220.4, 776.56, 2073.72, 
    1223.88, 617, 1387.71, 595.57, 1506.13, 678.41, 1797.87, 2111.04, 
    1116.61, 1038.6, 894.25, 778.51, 908.51, 1346.69, 989.09, 1334.17, 
    877.31, 649.31, 978.22, 1276.84, 1001.58, 1049.66, 1131.83, 700.8, 
    1267.21, 693.52, 1182.3)    

所以我猜你没有告诉我们你还加载了statmod包(或者可能是其他一些带有 'invgauss'-family 包括dinvgauss函数的包)。 您应该能够通过阅读该功能的帮助页面的第一行来判断dinvgauss来自哪个软件包,因此在安装该软件包并阅读?dinvgauss的帮助页面(应该总是这样做) ?dinvgauss

fitinvgauss <- fitdist(RTtotal, "invgauss", 
                                 start = list(mean=776, dispersion=314, shape=1))
fitinvgauss
# --------------
Fitting of the distribution ' invgauss ' by maximum likelihood 
Parameters:
             estimate Std. Error
mean         779.2535         NA
dispersion -1007.5490         NA
shape       4972.5745         NA

我所做的只是阅读错误消息,然后阅读帮助页面并为该函数的参数使用正确的名称。 (然后稍微调整一下,使参数起始值进入可行的值范围。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM