计算Kolmogorov–;R中的斯米尔诺夫(K–;S)检验
我想知道以下分布是否适合给定的数据。我对以下两种分布使用了Kolmogorov–Smirnov(K–S)统计量,但是,我得到的K-S检验的p值与原论文中的不同 换句话说,我的问题是为什么k-s检验的p值与我的代码不同于发表的论文。 首先,我注意到第一个分布有参数“a”,其中[00]。我不知道这是否是导致p值不同的原因。第一个分布具有以下对数似然函数、累积分布函数以及最后的k.s检验 数据是计算Kolmogorov–;R中的斯米尔诺夫(K–;S)检验,r,mle,kolmogorov-smirnov,R,Mle,Kolmogorov Smirnov,我想知道以下分布是否适合给定的数据。我对以下两种分布使用了Kolmogorov–Smirnov(K–S)统计量,但是,我得到的K-S检验的p值与原论文中的不同 换句话说,我的问题是为什么k-s检验的p值与我的代码不同于发表的论文。 首先,我注意到第一个分布有参数“a”,其中[0
d<-rep(c(0:5), c(447,132,42,21,3,2))
loglik <-function(param){
if(any(param <= 0)){
NaN
} else {
a <- param[1] **#where 0<a=exp(-theta)<1**
b <- param[2]
first = (1-a^d + ((1+d)*a^d -1)*log(a))^b
second = (1-a^(d+1) + ((1+(d+1))*a^(d+1) -1)*log(a))^b
log = -length(d)*b*log(1-log(a)) + sum(log(second-first))
return(log)
}
}
# maximum likelihood estimation using maxLik function
library(maxLik)
start_param <- c(a=0.05, b=0.02) #used in paper
mle <- maxLik(loglik, start = start_param, control=list(printLevel=2))
# the cumulative distribution function
cdf <- function(d, param){
if(any(param <= 0)){
NaN
} else {
a <- param[1]
b <- param[2]
cdf= ((1-a^(d+1)+((2+d)*a^(d+1)-1)*log(a))^b)/(1-log(a))^b
}
}
#one-sample kolmogorov smirnov test
ks <- ks.test(d, "cdf", coef(mle))
我的k-s测试结果
One-sample Kolmogorov-Smirnov test
data: d
D = 0.69073, p-value < 2.2e-16
alternative hypothesis: two-sided
k-s试验结果:
One-sample Kolmogorov-Smirnov test
data: d
D = 0.88877, p-value = 2.22e-16
alternative hypothesis: two-sided
本文的p值计算结果为:
这是1,也就是说,基于纸的p值,这个分布很适合这个数据,但是我的结果给出了另一个结果,这个分布不适合这个数据。对于此分布,所有参数都大于零
有什么帮助可以知道问题出在哪里。这是一个统计问题。这里面没有太多关于编程的东西。也许考虑重新发布。你会在那里得到更好的答案。也许值得检查一下,在进行正态性测试之前,他们没有排除异常值和/或转换数据,但是,正如@Werner在上文中所评论的,你可能会得到关于@Werner的更明智的答案,也许我输入了错误的函数,特别是对于00
loglik.d <-function(param){
if(any(param <= 0)){
NaN
} else {
alp <- param[1]
th <- param[2]
lam <- param[3]
bet <- param[4]
first = exp(-th*d^bet)/(1+alp*exp(lam*d))
second = exp(-th*(d+1)^bet)/(1+alp*exp(lam*(d+1)))
log = length(d)*log(1+alp)+ sum(log(first-second))
return(log)
}
}
# maximum likelihood estimation using maxLik function
library(maxLik)
start_param <- c(alp = 1.072*10^(-5), th = 9.669*10^(-3), lam = 0.0331, bet=0.8571) #used in paper
mle.d <- maxLik(loglik.d, start = start_param, control=list(printLevel=2))
# the cumulative distribution function of the discrete distribution
cdf <- function(d, param){
if(any(param <= 0)){
NaN
} else {
alp <- param[1]
th <- param[2]
lam <- param[3]
bet <- param[4]
cdf= 1-((1+alp)*exp(-th*(d+1)^bet)/(1+alp*exp(bet*(d+1))))
}
}
#one-sample kolmogorov smirnov test
ks.d <- ks.test(d, "cdf", coef(mle.d))
----- Initial parameters: -----
fcn value: -108.1909
parameter initial gradient free
alp 1.072e-05 2452.9343660 1
th 9.669e-03 -10.8047669 1
lam 3.310e-02 2.2440943 1
bet 8.571e-01 0.1406428 1
Condition number of the (active) hessian: 402174154
-----Iteration 1 -----
-----Iteration 2 -----
-----Iteration 3 -----
-----Iteration 4 -----
-----Iteration 5 -----
--------------
successive function values within tolerance limit
5 iterations
estimate: 2.61131e-05 0.008173223 0.03056733 0.8839012
Function value: -108.1732
One-sample Kolmogorov-Smirnov test
data: d
D = 0.88877, p-value = 2.22e-16
alternative hypothesis: two-sided