R语言下如何进行分层卡方检验?

Python016

R语言下如何进行分层卡方检验?,第1张

R语言下进行分层卡方检验方法和过程如下:

t.test t检验

wilcox.test wilcox检验

prop.test

binom.test 贝努力试验检验

chisq.test 卡方检验

fish.test fisher精确检验

ks.test科尔莫哥罗夫-斯米尔诺夫检验

shapiro.testshapio-wilk正态分布检验

pp.test. phillips-perron检验

quada.test quade检验

friedman.test friedman秩和检验

R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

可以看到,该课题根据性别及年龄两个层次最终把患者分为了4个亚组(统计学中,本文的年龄及性别称做分层名称,每个层内的分类成称为水平,既本研究有2个层,每个层2个水平)

分层随机化中,我们在进行分层后最终根据患者的不同特征把患者分为了各个亚组,再此分为了4个亚组,然后根据治疗方案(纳入治疗组还是对着组)对患者进行简单随机化。

但是,当总体样本量或每个亚组的样本量的不大时,在每个亚组进行简单随机化容易产生两组间治疗组及试验租的患者发生不平衡的情况(比如10个人随机分组,很容易出现一组7人一组3人的情况)。这时,我们可以引入区组随机化。比如,研究对象共计80例患者,所有层及水平均等分入组,每个亚组20例患者。如果对20例患者进行简单随机化很容易产生一组患者人多,一组患者人少的情况。这时候我们利用区组随机化,比如可以设定组的大小为4,强制前4个患者2个治疗组2个对照组,这样可以解决此类问题。

但是如果固定组的大小,每个组别的最后患者就会知道期分组情况,比如下图,固定区组大小为4,最后的患者再未进行分组前就能知道期为B治疗方案,不利于隐蔽分组的实现。

R语言中的blockrand包在对患者进行分层后,可以对每个层内的每个水平患者进行区组大小不固定的随机化,如下图

医科看到,前这四个患者的组大小为4,后续为2。而此分组大小是软件根据每个亚组的人数随机产生的。这样,就无法提前判断患者的入组情况。

详细说明网站

https://rdrr.io/cran/blockrand/man/blockrand.html

library(nnet)

source <- c(10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,

6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,10477,

10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,12136,12812,

12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,13261,13230,15535,

16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,9543,12872,13101,15053,

12619,13749,10228,9725,14729,12518,14564,15085,14722,11999,9390,13481,14795,15845,

15271,14686,11054,10395,14775,14618,16029,15231,14246,12095,10473,15323,15381,14947)

srcLen<-length(source)

for(i in 1:10){ #预测最后十个数;

real <- source[srcLen-i+1] #实际值

xNum=(srcLen-i+1)%/%7 #组数

yNum=7 #每组7个数

data<-array(1:(xNum*yNum),c(xNum,yNum))

pre=srcLen-i+1

for(x in 1:xNum){ #数组赋值

for(y in 1:yNum){

data[x,y]=source[pre]

pre=pre-1

}

if(pre<7){

break

}

}

ascData<-array(1:(xNum*yNum),c(xNum,yNum)) #数组逆序

for(x in 1:xNum){

for(y in 1:yNum){

ascData[x,y]=data[xNum-x+1,y]

}

}

colnames(ascData) <- c("a","b","c","d","e","f","g") #每列列名

trainData<-data.frame(scale(ascData[,c(1:7)]))

nn<-nnet(a~b+c+d+e+f+g,trainData[1:(xNum-1),],size=10,decay=0.01,maxit=1000,linout=F,trace=F)

predict<-predict(nn,trainData[xNum,])

predict=predict*sd(ascData[,1])+mean(ascData[,1])

percent <- (predict-real)*100/real

res <- paste("预测值:",predict,"实际值:",real,"误差:",percent)

print(res)

}