ddtd
本人是R初学者,请大侠们多多指教程序中的错误!!!
hl=function(x,a) /*H-L 估计法估计对称中心和置信区间
{
n=length(x) /*样本量
u=qnorm(1-a/2,0,1) /*正态分位数
d=n*(n+1)/4-0.5-u*sqrt(n*(n+1)*(2*n+1)/24)
c=n*(n+1)/4-0.5+u*sqrt(n*(n+1)*(2*n+1)/24) /* 对区间左右端点的正态近似, 有修正过
q=n*(n-1)/2
p=n*n+n-2 /* 过渡变量,只是为了后面写起来方便
r=n*n-d%/%1-1
s=n*n-c%/%1+1 /* d%/%1意思是取不超过d的最大整数
walsh=matrix(0,nrow=n,ncol=n) /* 计算Walsh平均,放在矩阵中, 但该矩阵仅有一半有用
for (i in 1:n)
{
for(j in i:n)
{
walsh[i,j]=(x+x[j])/2
if(i!=j)walsh[j,i]=-100*n /*给无效的w[i,j]一个方便剔除的值
}
}
walsh=sort(as.vector(walsh)); /*矩阵拉直并排序, 将无效w[i,j]的值排前面
if (p%%4==0) HL=walsh[p/4+q+1] else HL=(walsh[(p/2+1)/2+q+1]+walsh[(p/2+1)/2+q+2])/2 /*去掉前n*(n-1)个无效值之后的中位数为H-L估计
t1=walsh[s]+(d-d%/%1)*(walsh[s]-walsh[s-1])
t2=walsh[r]+(c-c%/%1)*(walsh[r+1]-walsh[r]) /*左右端点用Walsh来修正
print(t1)
print(t2)
print(HL)
yihui
公式我没有仔细检查,不过可以提供一个关于Walsh平均简略一些的办法,就是利用combn()得到一系列下标,然后根据下标取出数据中相应两个位置的数值求平均,例如:
x=1:10
apply(combn(10,2),2,function(idx)mean(x[idx]))
即为Walsh平均
这样就可以避免两重循环(我写语句一般都极力避免这种显式循环)
另:大力赞扬学习精神:)
.