首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将逆桂皮分布与我的数据相匹配,最好是使用fitdist {fitdistrplus}

如何将逆桂皮分布与我的数据相匹配,最好是使用fitdist {fitdistrplus}
EN

Stack Overflow用户
提问于 2019-08-22 23:08:29
回答 1查看 1.1K关注 0票数 3

我试着用GLMM分析一些反应时数据。为了找到最适合我的数据的分布,我使用了适合于伽玛和对数正态分布的方法。结果表明,对数正态分布更符合我的数据。然而,最近我读到,反高斯分布可能更适合于反应时间数据。

我使用nigFitStart获取开始值:

代码语言:javascript
复制
    library(GeneralizedHyperbolic)
    invstrt <- nigFitStart(RTtotal, startValues = "FN")

这给了我这个

代码语言:javascript
复制
    $paramStart
       mu         delta         alpha          beta 
    775.953984862 314.662306398   0.007477984  -0.004930604 

因此,我尝试为适者生存者使用start参数:

代码语言:javascript
复制
    require(fitdistrplus)

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

但我得到了以下错误:

代码语言:javascript
复制
    Error in checkparamlist(arg_startfix$start.arg, arg_startfix$fix.arg,  : 
    'start' must specify names which are arguments to 'distr'.

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

代码语言:javascript
复制
    Inverse Gaussian MLE 
    mu                   775.954
    lambda              5279.089

因此,这一次,我使用这两个参数作为启动参数,但仍然得到了完全相同的错误:

代码语言:javascript
复制
    > 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更改为表示和形状已经解决了它们的问题,但我尝试了它,但仍然得到了相同的错误。

知道我怎么能解决这个问题吗?或者你能建议另一种方法来拟合逆高斯与我的数据吗?

谢谢

代码语言:javascript
复制
    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)    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-23 01:39:03

因此,我猜想您没有告诉我们,您也加载了statmod-package (或者其他一些带有‘invgauss’家族的包,包括一个dinvgauss函数)。您应该能够通过读取函数的帮助页的顶部行来判断哪个包dinvgauss来自哪个包,因此在安装该包并读取?dinvgauss的帮助页(应该总是这样做)之后

代码语言:javascript
复制
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

我所做的就是读取错误消息,然后读取帮助页面,并为该函数的参数使用正确的名称。(然后再进行一些操作,将参数的起始值转换为可行的值范围。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57618003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档