R语言笔记1:t检验和Wilcoxon检验

来源:互联网 发布:网络信息安全的定义 编辑:程序博客网 时间:2024/05/16 07:21

转自新浪博客,转载地址: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

  1. Quartile 14.500000

  2. 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?

原创粉丝点击