注意事项
- 本代码适用于Student T检验,别的统计方法需要改代码
- 本代码中默认数据符合正态分布且方差齐,如果数据对这两项敏感,则需要提前检验
数据准备
- 将数据按下表的形式整理好,表格中要包含测定指标和分组信息,并且以列的形式存放
- 所有测定指标要放在一起
Group | BW | SGR | CAT | SOD |
---|---|---|---|---|
1 | 4 | 1.2 | 21 | 2.2 |
1 | 5 | 1.4 | 22 | 2.3 |
1 | 6 | 1.5 | 23 | 2.5 |
2 | 14 | 2.2 | 33 | 3.5 |
2 | 15 | 2.4 | 34 | 3.6 |
2 | 16 | 2.5 | 35 | 3.7 |
R代码
#############################################
##
## 批量T检验
##
##-----------------------------------------
## Author : Cdudu
## Data : 2020 7/27
############################################
#清空目前环境中的变量
rm(list = ls())
library(readxl)
#读入数据
dat<-read_excel('sample.xlsx')
#将分组转化为因子型
dat$Group<-as.factor(dat$Group)
summary(dat)
#创建新表用于存放Mean,SD和显著性标记
dat2<-data.frame(t1=as.character(1:3))
#输入dat中应变量(待检验指标)的起始列数
Star<-2
#输入dat中应变量(待检验指标)的终止列数
Over<-5
#Mean,SD&P值计算
for ( i in c(Star:Over)){
means<-tapply(dat[[i]],dat$Group,mean)
means<-sprintf('%.4f',round(means,4)) #小数点位数,注意'%.4f'和round()中的数字都要做对应修改
SD<-tapply(dat[[i]],dat$Group,sd)
SD<-sprintf('%.4f',round(SD,4)) #小数点位数,注意'%.4f'和round()中的数字都要做对应修改
M.t<-t.test(dat[[i]]~Group,data=dat,var.equal=T)
pvalue<-M.t[[3]]
if(pvalue>0.05){
a<-paste(means,'±',SD)
a[3]<-'NS'
}
else if(pvalue>0.01){
a<-paste(means,'±',SD)
a[3]<-'*'
}
else {
a<-paste(means,'±',SD)
a[3]<-'**'
}
dat2[i-(Star-1)]<-a
names(dat2)[i-(Star-1)]<-names(dat[,i])
}
#行列转置
dat3<-t(dat2)
#导出表格
write.csv(dat3,'Result.csv')
以上就是全部代码,实际操作中只需要两步
1.将下面代码中的文件名换成你自己的
dat<-read_excel('sample.xlsx')
- 在下面代码中输入测定指标开始和结束的列数,比如本例中测定指标放在第2-5列,那么Star就输入2,Over输入5
#输入dat中应变量(待检验指标)的起始列数
Star<-2
#输入dat中应变量(待检验指标)的终止列数
Over<-5
剩下的代码就不用管啦
EXCEL输出结果
如果是将dat3输出到EXCEL,那么表格如下
NULL | V1 | V2 | V3 |
---|---|---|---|
BW | 3±0.2 | 4±0.3 | * |
SGR | 3±0.2 | 3±0.2 | NS |
CAT | 3±0.2 | 3±0.2 | ** |
SOD | 3±0.2 | 3±0.2 | NS |
V1;V2即两个试验组,V3是显著性标记。
- NS:p>0.05
- *: 0.05>p>0.01
- **: p<0.01
当然也可以将dat2输出到EXCEL,那么表格如下
NULL | BW | SGR | CAT | SOD |
---|---|---|---|---|
V1 | 3±0.2 | 3±0.2 | 3±0.2 | 3±0.2 |
V2 | 3±0.2 | 3±0.2 | 3±0.2 | 3±0.2 |
V3 | NS | * | ** | NS |