计算Kolmogorov–;R中的斯米尔诺夫(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

我想知道以下分布是否适合给定的数据。我对以下两种分布使用了Kolmogorov–Smirnov(K–S)统计量,但是,我得到的K-S检验的p值与原论文中的不同

换句话说,我的问题是为什么k-s检验的p值与我的代码不同于发表的论文。 首先,我注意到第一个分布有参数“a”,其中[00]。我不知道这是否是导致p值不同的原因。第一个分布具有以下对数似然函数、累积分布函数以及最后的k.s检验

数据是

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