【问题标题】:Kolmogorov-Smirnov test using L-moments instead of mle estimates in R使用 L 矩而不是 R 中的 mle 估计进行 Kolmogorov-Smirnov 检验
【发布时间】:2016-01-23 02:41:18
【问题描述】:

我正在尝试执行 KS 测试来评估将 Pearson III 分布拟合到我的数据的适用性。使用在fitdistrplus 包中的fitdist 中实现的mle,我们可以获得可以直接插入ks.test 的参数估计:

library(FAdist)
library(fitdistrplus)

> summary(x) #summary of my data vector
Min.   1st Qu.  Median  Mean   3rd Qu.  Max. 
144.8   646.0  1031.0  1130.0  1472.0  4283.0 

fit.p3 <- fitdist(x, "gamma3", start=list(shape=1,scale=100, thres=100))
> fit.p3
Fitting of the distribution ' gamma3 ' by maximum likelihood 
Parameters:
       estimate Std. Error
shape   2.60075  0.2408922
scale 400.45463 28.5769539
thres  88.22411 29.6652668

> ks.test(x, "pgamma3", shape= fit.p3$estimate["shape"],
+         scale = fit.p3$estimate["scale"], thres = fit.p3$estimate["thres"])

One-sample Kolmogorov-Smirnov test

data:  x
D = 0.0328, p-value = 0.2405
alternative hypothesis: two-sided

这很好用。

旁白:我知道使用数据中的参数估计执行 KS 测试会使测试无效。我省略了我用来解决这个问题的模拟过程,以确保我的问题的清晰性和代码的简单性。

现在,计算 L 矩:

library(lmomco)
lmom <- lmom.ub(x)
para <- parpe3(lmom)
> para
$type
[1] "pe3"

$para
         mu       sigma       gamma 
1129.738563  628.035773    1.040752 

$source
[1] "parpe3"

ks.test 需要使用仅接受 shapescalethres 参数的 pgamma3 函数。我的问题是如何调整 ks.test 以使用 L 矩而不是 mle 估计值?

【问题讨论】:

    标签: r distribution hypothesis-test


    【解决方案1】:

    您可以选择其中一种解决方案 1.使用lmomco在fitdistrplus中定义函数,然后进行测试。在这种情况下,您将直接使用 (mu,sigma,gamma) 执行测试 2. 使用 lmoment 估计(尺度形状位置)参数

    `library("lmomco")
    library("fitdistrplus")
    lmompe3 <-lmoms(X, nmom = 5)
    parape3 <- parpe3(lmompe3, checklmom=TRUE)
    dpe3 <- function(x,mu,sigma,gamma ){pdfpe3(x,list(type="pe3",para=c(mu,sigma,gamma),source="parpe3"))}
    ppe3 <- function(q,mu,sigma,gamma ) {cdfpe3(q,list(type="pe3",para=c(mu,sigma,gamma),source="parpe3"))}
    qpe3 <- function(p,mu,sigma,gamma ) {quape3(p,list(type="pe3",para=c(mu,sigma,gamma),source="parpe3"))}
    ks.test(X, "ppe3",mu, sigma, gamma)
    library("nsRFA")
     library("fitdistrplus")
     l_mom <- Lmoments(X) #nsRFA package
     lmompe3 <-lmoms(X, nmom = 5) #Lmomco package
    
     # 2. Find parameter from lmoment
     parameters <- par.gamma(l_mom[1],l_mom[2],l_mom[4]) #nsRFA package
     # 3. find mu sigma gamma parameter
      mu_sigma_gamma <-     par2mom.gamma(parameters$alfa,parameters$beta,parameters$xi); mu_sigma_gamma 
    parape3 <- parpe3(lmompe3, checklmom=TRUE);parape3#Lmomco package
    ks.test(X, "pgamma3", shape=alpha,scale=beta,thres=xi)`
    

    【讨论】:

      猜你喜欢
      • 2014-12-30
      • 2021-06-18
      • 2015-03-25
      • 2020-08-02
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多