弗里德曼测试的R代码
以下是Friedman检验的R代码,其中包括事后检验,以防原假设被拒绝。
将代码复制并粘贴到R工作区后,可以随意使用代码。
friedman.test <-函数(数据,alpha = 0.05){
#----------------------------------- ------------------------------------------
#作者:Okan OYMAK,MS运筹学在NPS蒙特雷,CA,USA
#日期:2015年3月12日
#
#数据:
#数据由b的相互独立的K-变量随机变量
#(X_i1,X_i2,...,X_ik),称为b块, i = 1
#块i中的随机变量X_ij并与处理j相关联。
#b块的排列如下。
##
处理
#块1 2 ... k
#1 X_11 X_12 ... X_1k
#2 X_21 X_22 ... X_2k
#.... .... ... ...
#.... .... ... ....
#。.... .... ... ....
#b X_b1 X_b2 ... X_bk
##
令R(Xij)为从1到k的等级,分配给块(行)i中的Xij。
#也就是说,对于块i,将随机变量X_i1,X_i2,...,X_ik进行
比较,并将等级1分配给最小的观察
#值,等级2分配给第二小的值,依此类推。 k,它是
分配给块i中最大观测值的#。
##
假设:
#1. b k变量随机变量是相互独立的。(
一个区块内的结果#不会影响其他区块内的结果)
#2.在每个区块内,观察结果可能会根据某些
关注标准进行排名。
#
#假设:
#Ho:对一个块内的随机变量进行排名的可能性均相同。
#(即治疗具有相同的效果。)
#Ha:至少其中一种治疗趋于产生
比其他方法中的至少一种更大的观察值。
#------------------------------------------------- ----------------------------
#让乐趣开始!
#------------------------------------------------- ----------------------------
if(!is.matrix(data)){
数据<-as.matrix(data)
}
领带.check <-numeric()
for(i in 1:dim(data)[1]){
if(length(unique(data [i,]))== dim(data)[2]){
tie.check [i] <-1
} else {
tie.check [i] <-0
}
}
b <-dim(数据)[1]
k <-dim(数据)[2]
等级<-t(apply(data,1,rank))
Rj <-apply(ranks,2,sum)
if(sum(tie.check)<b){#表示有联系
A1 < -sum(rank ^ 2)
C1 <-(b * k *(k + 1)^ 2)/ 4
T1 <-((k -1)* sum((Rj-(b *(k + 1))/ 2)^ 2))/(A1-C1)
T2 <-((b-1)* T1)/(b *(k- 1)-T1)
k1 <-k-1
k2 <-(b-1)* k1
cr1 <-qchisq(1-alpha,k1)
p.value.1.T1 <-1-pchisq(T1,k1)
cr <-qf(1-alpha,k1,k2)
p.value.1 <-1-pf(T2,k1,k2)
cat(“领带存在。”,“ \ n”,“ \ n”)
cat(“基于卡方分布的弗里德曼检验统计量,T1 =”,round(T1,4),“ \ n”)
cat( “大小的临界区域”,alpha,
“对应于所有大于T1的值”,round(cr1,4),“ \ n”)
cat(“ p-value =”,p.value.1.T1,“ df =“,k1,” \ n“,” \ n“)
cat(“基于F分布的弗里德曼检验统计量,T2 =”,round(T2,4),“ \ n”)
cat(“大小的临界区域”,alpha,
“对应于所有大于T2的值”, round(cr,4),“ \ n”)
if(p.value.1 <= alpha){
t.stat <-qt(1-alpha / 2,k2)
cat(“ p-value =”,p.value.1,“ <”,“ alpha =” ,alpha,“ \ n”,“ \ n”)
cat(“因此,拒绝原假设”,“ \ n”,“ \ n”)
cat(“推断:至少有一种处理方法倾向于产生更大的观测值”,“ \ n”,“ \ n”)
cat(“多个比较如下”,“ \ n”)
组合<-combn(c(1(d:dim(data) [2]),2)
for(i in 1:dim(combinations)[2]){
test.1 <-abs(Rj [combinations [1,i]]-Rj [combinations [2,i]])
测试.2 <-t.stat * sqrt((2 *(b * A1-sum(Rj ^ 2)))/((b-1)*(k-1)))
cat(“处理:“,combinations [1,i],”-“,combinations [2,i],” \ n“)
cat(” | Rj-Ri | =“,test.1,”与“比较,round(test.2 ,4))
if(test.1 <= test.2){
cat(“ No Difference”,“ \ n”,“ \ n”)
}
else {
cat(“ *** Different ***”,“ \ n”,“ \ n“)
}
}
}
else {
cat(“ p-value =”,p.value.1,“>”,“ alpha =”,alpha,“ \ n”,“ \ n”)
cat(“因此,请勿拒绝原假设“,” \ n“,” \ n“)
cat(”推论:每个随机变量在一个块内的排名都是相同的。“,” \ n“)
cat(”(即治疗效果相同。)“ ,“ \ n”)
}
} else if(sum(tie.check)== b){#表示没有联系
A1 <-b * k *(k + 1)*(2 * k + 1)/ 6
T1 <-(12 /(b * k *(k + 1)))* sum((Rj-b *(k +1)/ 2)^ 2)
T2 <-((b-1)* T1)/(b *(k-1)-T1)
k1 <-k-1
k2 <-(b-1)* k1
cr1 <-qchisq(1-alpha,k1)
p值0.T1 <-1-pchisq(T1,k1)
cr <-qf(1-alpha,k1,k2)
p.value.0 <-1-pf (T2,k1,k2)
cat(“不存在联系。”,“ \ n”,“ \ n”)
cat(“基于卡方分布的弗里德曼检验统计量,T1 =”,round(T1,4),“ \ n”)
cat (“大小的临界区域”,alpha,
“对应于所有大于T1的T1值”,round(cr1,4),“ \ n”)
cat(“ p-value =”,p.value.0.T1, “ df =”,k1,“ \ n”,“ \ n”)
cat(“基于F分布的弗里德曼检验统计量,T2 =”,round(T2,4),“ \ n”)
cat(“大小的临界区域”,alpha,
“对应于所有大于T2的值”, round(cr,4),“ \ n”)
if(p.value.0 <= alpha){
t.stat <-qt(1-alpha / 2,k2)
cat(“ p-value =”,p.value.0,“ <”,“ alpha =” ,alpha,“ \ n”,“ \ n”)
cat(“因此,拒绝原假设”,“ \ n”,“ \ n”)
cat(“推断:至少有一种处理方法倾向于产生更大的观测值”,“ \ n”,“ \ n”)
cat(“多个比较如下”,“ \ n”)
组合<-combn(c(1:dim(data) [2]),2)
for(i in 1:dim(combinations)[2]){
test.1 <-abs(Rj [combinations [1,i]]-Rj [combinations [2,i]])
测试.2 <-t.stat * sqrt((2 *(b * A1-sum(Rj ^ 2)))/((b-1)*(k-1)))
cat(“处理:“,combinations [1,i],”-“,combinations [2,i],” \ n“)
cat(” | Rj-Ri | =“,test.1,”与“比较,round(test.2 ,4))
if(test.1 <= test.2){
cat(“ No Difference”,“ \ n”,“ \ n”)
}
else {
cat(“ *** Different ***”,“ \ n”,“ \ n“)
}
}
}
else {
cat(“ p-value =”,p.value.0,“>”,“ alpha =”,alpha,“ \ n”,“ \ n”)
cat(“因此,请勿拒绝原假设“,” \ n“,” \ n“)
cat(”推论:每个随机变量在一个块内的排名都是相同的。“,” \ n“)
cat(”(即治疗效果相同。)“ ,“ \ n”)
}
}
}
题库