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

时间:2019-08-22 23:08:29

标签: r 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使用start参数:

    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更改为均值和形状已经解决了他们的问题,但是我尝试了一下,但仍然遇到相同的错误。

任何想法我该如何解决?还是可以建议一种替代的方法来使高斯逆高适合我的数据?

谢谢

    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)    

1 个答案:

答案 0 :(得分:1)

因此,我猜测您未能告诉我们您还加载了statmod软件包(或其他一些带有'invgauss'家族的软件包,包括一个dinvgauss函数)。通过阅读该功能的帮助页面的第一行,您应该能够分辨出哪个软件包dinvgauss,因此,在安装该软件包并阅读{{1}的帮助页面(总是应该做的)之后, }:

?dinvgauss

我所做的只是阅读错误消息,然后阅读帮助页面,并为该函数的参数使用正确的名称。 (然后进行一些操作,以使参数初始值进入可行的值范围。)