使用Page的CUSUM程序的平均样本编号?

问题描述 投票:0回答:1

我正在尝试使用给定页面13的等式重现第12页的表1结果。要访问期刊文章,请单击https://arxiv.org/pdf/math/0605322.pdf。相应的等式如下。

enter image description here

我的r code在下面给出。我编程正确吗?

mytest=function(n,s,c1){
  t = sum(s)
  k=which.max(s[19:n]>=c1)
  if(k==1 && s[19]<c1) 
    return(c(n,0)) 
  else 
    return(c(k,1))
}


for (n in c(100,200,400)){

for (i in c(-0.5, -1.0)){
a1=0
c1 = 20
asn1=0
for (m in 1:1000){
  g=c(dnorm(n,0,1))
  f=c(dnorm(n,i,1))
  s = log(g/f)
  test=mytest(n,s,c1)
  a1=a1+test[2]
  asn1=asn1+test[1]
}

}
out <- list(power= a1/m, asn=asn1/m)
return(out)
}

但我收到以下错误。

Error in if (k == 1 && s[19] < c1) return(c(n, 0)) else return(c(k, 1)) : 
  missing value where TRUE/FALSE needed
r statistics sequential
1个回答
0
投票

你第一次打电话给mytest,你有n=100, i=-0.5,它产生s=NaN。因此,鉴于if(k==1 && s[19]<c1),你会在s[19]=NaN行上出错。

这是一种解决方法,但您需要确保它符合您的期望/期望:

mytest=function(n,s,c1){

  if(is.na(s)) return(c(c1,1))  # skips if NaN

  t = sum(s)
  k=which.max(s[19:n]>=c1)

  if(k==1 && s[19]<c1) 
    return(c(n,0)) 
  else 
    return(c(k,1))
}
© www.soinside.com 2019 - 2024. All rights reserved.