楼主: 逸步韵
12805 2

[程序分享] Brown-Mood检验 R程序 [推广有奖]

  • 0关注
  • 0粉丝

本科生

58%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
5 点
热心指数
5 点
信用等级
5 点
经验
104 点
帖子
28
精华
0
在线时间
181 小时
注册时间
2010-5-13
最后登录
2014-12-19

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
###Brown-Mood中位数检验(精确检验,正态近似,连续性修正后的正态近似)
BM.test=function(x,y,alt) #alt:备择假设形式
  {
  xy=c(x,y)
  md.xy=median(xy)
  t=sum(xy>md.xy)
  lx=length(x[x!=md.xy])
  ly=length(y[y!=md.xy])
  lxy=lx+ly
  A=sum(x>md.xy)#检验统计量A
  z=(A-lx*t)/(lx+ly)/(lx*ly*t*(lx+ly-t)/(lx+ly)^3)^0.5#正态近似时的标准化统计量
  if(A>(min(lx,t)/2)){
    z1=(A+0.5-lx*t)/(lx+ly)/(lx*ly*t*(lx+ly-t)/(lx+ly)^3)^0.5#连续性修正后正态近似时的标准化统计量
  }
  else{z1=(A-0.5-lx*t)/(lx+ly)/(lx*ly*t*(lx+ly-t)/(lx+ly)^3)^0.5}
  if(alt=="greater"){
    pv1=1-phyper(A,lx,ly,t)#精确p值
    pv2=1-pnorm(z)#正态近似p值
    pv3=1-pnorm(z1)#连续性修正后正态近似p值
  }
  if(alt=="less"){
    pv1=phyper(A,lx,ly,t)
    pv2=pnorm(z)
    pv3=pnorm(z1)
  }
  if(alt=="two.sided"){
    pv1=2*min(1-phyper(A,lx,ly,t),phyper(A,lx,ly,t))
    pv2=2*min(1-pnorm(z),pnorm(z))
    pv3=2*min(1-pnorm(z1),pnorm(z1))
  }
  conting.table=matrix(c(A,lx-A,lx,t-A,ly-(t-A),ly,t,lxy-t,lxy),3,3)#计数表
  col.name=c("X","Y","X+Y")
  row.name=c(">MXY","<MXY","TOTAL")
  dimnames(conting.table)=list(row.name,col.name)
  list(contingency.table=conting.table,p.value=pv1,pvnorm=pv2,pvnr=pv3)
}

###练习4.1
#Brown-Mood中位数检验
a=c(10,8,12,16,5,9,7,11,6)
b=c(12,15,20,18,13,14,9,16)
BM.test(a,b,alt="less")


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Brown Mood Own R程序 function 程序 检验

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
zhangtao + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

沙发
额问问 发表于 2016-7-1 18:02:38 |只看作者 |坛友微信交流群
运行错误,说没有BM。test这个函数。是不是需要装软件包啊?

使用道具

藤椅
王斯1996 学生认证  发表于 2018-11-6 22:20:02 |只看作者 |坛友微信交流群
额问问 发表于 2016-7-1 18:02
运行错误,说没有BM。test这个函数。是不是需要装软件包啊?
BM.test 这个函数是前面那些代码,这个函数是自己编写的。

# Brown-Mood检验##################################################
BMq.test = function(x,y,q,alt)
{
xy = c(x,y)
quantile.xy = quantile(xy,q)
t = sum(xy>quantile.xy)
lx = length(x[x!=quantile.xy])
ly = length(y[y!=quantile.xy])
lxy = lx + ly
A = sum(x>quantile.xy)        #检验统计量A
z = (A-lx*t/(lx+ly))/(lx*ly*t*(lx+ly-t)/(lx+ly)^3)^0.5
if(A>(lx*t/(lx+ly))){
        z1 = (A+0.5-lx*t/(lx+ly))/(lx*ly*t*(lx+ly-t)/(lx+ly)^3)^0.5
                                        #正态近似时的标准化统计量
}

else
{z1 = (A-0.5-lx*t/(lx+ly))/(lx*ly*t*(lx+ly-t)/(lx+ly)^3)^0.5}
if(alt == 'greater')
{
        pv1 = 1-phyper(A,lx,ly,t)
        pv2 = 1-pnorm(z)
        pv3 = 1-pnorm(z1)
}
if(alt == 'less')
{
        pv1 = phyper(A,lx,ly,t)
        pv2 = pnorm(z)
        pv3 = pnorm(z1)
}
if(alt == 'two.sided')
{
        pv1 = 2*min(1-phyper(A,lx,ly,t),phyper(A,lx,ly,t))
        pv2 = 2*min(1-pnorm(z),pnorm(z))
        pv3 = 2*min(1-pnorm(z1),pnorm(z1))
}
conting.table = matrix(c(A,lx-A,lx,t-A,ly-(t-A),ly,t,lxy-t,lxy),3,3)
col.name = c('X','Y','X+Y')
row.name = c('>MQXY','<MQXY','TOTAL')
dimnames(conting.table) = list(row.name,col.name)
list(contingency.table = conting.table,p.value = pv1,pvnorm = pv2,pvnr = pv3)
}
x = c(10,8,12,16,5,9,7,11,6)
y = c(12,15,20,18,13,14,9,16)
xy = c(x,y)
median(xy)
BMq.test(x,y,0.25,'two.sided')
已有 1 人评分学术水平 热心指数 收起 理由
yahoocom + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 13:07