转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html
1、t检验
数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了吧,虽然采用t检验的方法目前有争议,我们后面再讨论。treat 1为处理组,treat 2是对照组。显然,要比较两组的dd(血压下降值)。
# 读入SPSS格式的数据
setwd("C:/R/R语言笔记")
library(Hmisc)
dat<-spss.get("Hypertension.sav")
# t检验其实就下面这一行
t.test(dd~treat,dat)
结果:
WelchTwo Sample t-test
data: dd by treat
t = 4.3326, df = 11.671, p-value = 0.001038
alternative hypothesis: true difference inmeans is not equal to 0
95 percent confidence interval:
5.847287 17.752713
sample estimates:
mean in group 1 mean in group 2
16.0 4.2
结果出来了,差异是有统计学意义的,P=0.001038。有些过于简单了,是吧?等等,结果中的Welch是什么东西?这是假设两个变量方差不齐,对自由度进行校正的t检验。如果方差齐呢?
t.test(dd~treat,dat,var.equal=TRUE)
结果
TwoSample t-test
data: dd by treat
t = 4.3326, df = 18, p-value = 0.0004011
alternative hypothesis: true difference inmeans is not equal to 0
95 percent confidence interval:
6.078013 17.521987
sample estimates:
mean in group 1 mean in group 2
16.0 4.2
结果是一致的,只是P值更小了些。
这里给出t检验的语法:
t.test(x, y = NULL,alternative = c("two.sided", "less", "greater"),mu = 0, paired = FALSE, var.equal = FALSE,conf.level = 0.95, ...)
或者:
t.test(formula, data, subset, na.action,...)
2、统计描述
那怎么知道方差齐不齐,对了,还有要符合正态分布呢?好,看一下计量资料的统计描述吧。如果summary(dat)不够用的话(您自己试试吧,此处略去),看一下fBasics包里basicStats的威力:
dat1<-subset(dat, treat==1)
dat2<-subset(dat, treat==2)
library(fBasics)
basicStats(dat1$dd)
basicStats(dat2$dd)
看其中第1组的结果,连可信限、偏度系数、峰度系数都有了:
X..dat1.dd
nobs 10.000000
NAs 0.000000
Minimum 10.000000
Maximum 20.000000
Quartile 14.500000
Quartile 18.000000
Mean 16.000000
Median 17.000000
Sum 160.000000
SE Mean 0.988826
LCL Mean 13.763119
UCL Mean 18.236881
Variance 9.777778
Stdev 3.126944
Skewness -0.627973
Kurtosis -1.025207
3、正态性检验
先来正态性检验。看一下直方图,QQ图,似乎不是特别正态,可能是因为样本量较小,但shapiro检验是OK的。
opar<-par(no.readonly = TRUE)
par(mfrow=c(1,2))
hist(dat1$dd)
hist(dat2$dd)
qqnorm(dat1$dd)
qqnorm(dat2$dd)
par(opar)
shapiro.test(dat1$dd)
shapiro.test(dat2$dd)
结果:
Shapiro-Wilknormality test
data: dat1$dd
W = 0.89893, p-value = 0.2132
Shapiro-Wilknormality test
data: dat2$dd
W = 0.92674, p-value = 0.4166
顺便看一下箱线图,没有离群值。有人喜欢均数标±准差的图,也来一个(目前的版本不太好看呀,有机会再改进吧);或者有想使用标准误的,自己应该能仿一个了吧。
boxplot(dd~treat,dat,main="两组血压下降值")
library(Hmisc)
x<-c(mean(dat1$dd),mean(dat2$dd))
mp<-barplot(x)
errbar(mp,x,x+c(sd(dat1$dd),sd(dat2$dd)),x-c(sd(dat1$dd),sd(dat2$dd)),xaxt="n",xlab="Groups",main="两组血压下降值")
title(main="两组血压下降值")
结果:
4、方差齐性检验
levenTest一看,原来方差不齐,因此第一步的默认t检验设置正好是正确的。
library(car)
leveneTest(dat$dd,dat$treat,median)
结果:
Levene’s Test for Homogeneity of Variance(center = median)
Df F value Pr(>F)
group 1 8.5909 0.008926 **
18
Signif. codes:
0 ‘’ 0.001 ‘’ 0.01 ‘’ 0.05 ‘.’ 0.1 ‘’ 1
5、非参数检验
如果连正态都不满足呢?那就Wilcoxon非参数秩检验了,wilcox.test同样显示两组有显著性差异。
wilcox.test(dd~treat, dat)
结果:
Wilcoxonrank sum test with continuity correction
data: dd by treat
W = 91.5, p-value = 0.001698
alternative hypothesis: true location shiftis not equal to 0
6、配对t检验与非参数秩检验
问第2组治疗前后血压是否有变化(治疗是否有效)?t检验在这里使用是有问题的,我们以后讨论,先看方法。
7、单样本t检验与非参数秩检验
问第1组的基线血压值是否大于140?