R语言 | 论文基本表一步到位(一)
计数资料基本表
我们做临床研究,或者部分生信研究,第一个在论文中出现的表格就是基本表。基本表的作用是比较一下组间的基线,在确保基线齐的基础上,研究的问题才有可比性。
基本表的制作并不难,所用到的统计学知识都是最基础的。计数资料的比较用卡方检验,Fisher确切概率法;计量资料的比较采用T检验,方差分析。在SPSS软件中可以完成。但是如果数据多的话,没个半天时间也是搞不定
想不想更快地完成呢?比如说10分钟?从原始数据到基本表一步到位?剩下的时间就可以追追剧约个会啦~
咳咳,表演时刻到啦~
01 准备数据
如上图所示,整理好要制作基本表所需要的原始数据,每一列为一个变量。接下来,就开始切换到R studio中了,感受一下,R语言做作业的速度吧!
02 制作基本表(计数资料)
No.1
准备工作
rm(list = ls())
setwd("C:\\Users\\lifengwei\\Desktop\\123")
data<-read.table(file = "TCGA_LIHC_clinical.txt",header = T,row.names = 1,sep = "\t",comment.char = "")
No.2
数据分组
##数据分组:计量资料和计数资料
Num<-NULL
for (i in 1:length(data)) {
a<-class(data[,i])
Num[i]<-a
}
count_data<-data[,Num=="factor"]##计量资料
measurement_data<-data[,Num!="factor"]##计数资料
No.3
计算每组的频数的比例
####计数资料的基本表(按照性别分为两组)####
count_data_M<-count_data[count_data$gender=="MALE",]
count_data_F<-count_data[count_data$gender=="FEMALE",]
Freq_CM<-lapply(X = count_data_M,FUN = table)
Prop_CM<-lapply(X = Freq_CM,FUN = prop.table)
Freq_CF<-lapply(X = count_data_F,FUN = table)
Prop_CF<-lapply(X = Freq_CF,FUN = prop.table)
No.4
基本表制作
char<-NULL
for (i in 1:dim(count_data)[2]) {
character<-c(names(Freq_CM[i]),names(Freq_CM[[i]]))
Noc_CM<-c(NA,paste0(Freq_CM[[i]],"(",round(Prop_CM[[i]],4)*100,"%)"))
Noc_CF<-c(NA,paste0(Freq_CF[[i]],"(",round(Prop_CF[[i]],4)*100,"%)"))
characteristics<-data.frame("characteristics"= character,"Male" = Noc_CM,"Female" = Noc_CF)
characteristics<-characteristics[characteristics$characteristics!="",]
total<-dim(count_data)[1]
locx<-regexpr(pattern = "\\(",text = characteristics[2:3,2])-1
x<-as.numeric(substring(text = characteristics[2:3,2],1,locx))
locy<-regexpr(pattern = "\\(",text = characteristics[2:3,3])-1
y<-as.numeric(substring(text = characteristics[2:3,3],1,locy))
df<-data.frame("x" = x,"y" = y)
chi<-chisq.test(x = df)
expected_min<-min(chi$expected)
if(total>=40&expected_min>=5){
p<-chisq.test(df,correct = F)$p.value} else
if(total>=40&expected_min<5&expected_min>1){
p<-chisq.test(df,correct = T)$p.value} else{
p<-fisher.test(df,simulate.p.value = F)$p.value
}
characteristics$P_value<-c(round(p,4),rep(NA, dim(characteristics)[1]-1))
char<-rbind(char,characteristics)
}
char$characteristics<-as.character(char$characteristics)
char$Male<-as.character(char$Male)
char$Female<-as.character(char$Female)
char[is.na(char)] <- " "
write.table(x = char,file = "characteristics_count.txt",sep = "\t")
导出后的文件,稍作修改(改一下字体什么的),成果如下图所示:
最后需要交代一下代码中用到的具体的统计学方法:
首先计算样本数n和计算四格表中每个数字的期望值T
当n ≥40并且所有T ≥ 5,则用用卡方检验(非连续性校正);
当n≥40时,如果某个格子出现1<T <5,则需作卡方检验连续性校正;
当n<40,或任何格子出现T≤1,采用Fisher确切概率检验。
10分钟完成一天的作业,交完作业,剩下的时间自己看着办喽~
R语言 | 文献阅读 | 科普
欢迎扫码分享与关注