簡體   English   中英

使用L矩而不是R中的MLE估計進行Kolmogorov-Smirnov檢驗

[英]Kolmogorov-Smirnov test using L-moments instead of mle estimates in R

我正在嘗試進行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需要使用pgamma3函數,該函數僅接受shapescalethres參數。 我的問題是我如何才能使ks.test使用L矩而不是mle估計?

您可以選擇以下解決方案之一: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)`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM