我正在尝试使用给定页面13的等式重现第12页的表1结果。要访问期刊文章,请单击https://arxiv.org/pdf/math/0605322.pdf。相应的等式如下。
我的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
你第一次打电话给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))
}