背景
有时候我们需要对一组数据进行趋势检验,比如患者服药后随着时间的推移患者某指标是否有上升或者下降趋势,又或者我们观测了某个城市近十年来的温度后想要探究该城市气温的变化趋势。
下面我主要给大家介绍下如何非常简单便捷地使用R语言对数据进行Mann-Kendall趋势检验。
Mann-Kendall趋势检验(下称MK检验)是一种非参数检验,它不需要数据服从特定的分布(例如高斯分布等等),允许数据有缺失,是一种非常常用且实用的趋势检验方法。
R语言实战
下面我们使用一组模拟数据来进行实战。
下面的文件记录了某肺炎患者接受治疗过程中口腔温度随治疗天数的变化,试使用MK检验说明该患者的温度随时间是呈下降还是上升趋势。
步骤
Step1
首先,如果想要使用MK检验我们需要先安装“trend”包。
install.packages("trend")
安装成功后,我们直接加载该包。
library("trend")
Step2
加载数据,本文的数据存储在当前目录下的test.txt文件中,所以使用read.table命令进行读取。
data <- read.table("./test.txt", sep="t", header=TRUE, row.names="day")
Step3
使用mk.test()进行趋势检验。
mk.test(data$temperature, continuity = TRUE)
结果解读
我们主要关注z值以及p值。
z值小于0,表明呈下降趋势,相反z值大于0,表明呈上升趋势。本例中,z小于0。
p<0.01,我们拒绝零假设,表明数据存在明显的趋势变化。
综合来看,接受治疗后,患者的体温呈现明显的下降趋势。
可视化查看
最后,我们可视化数据,直观的感受下数据的变化。
par(mfrow=c(2,1))
plot(data$temperature, type="l", lwd="3", col="steelblue", ylim=c(34,40), xlab="day", ylab="temperature")
完整代码
### 安装trend包,只需安装一次
install.packages("trend")
### 使用前先加载下
library("trend")
### 加载数据
data <- read.table("./test.txt", sep="t", header=TRUE, row.names="day")
### MK检验
mk.test(data$temperature, continuity = TRUE)
### 可视化
par(mfrow=c(2,1))
plot(data$temperature, type="l", lwd="3",
col="steelblue", ylim=c(34,40), xlab="day", ylab="temperature")
写在最后
如果对MK检验详细的原理感兴趣的同学可以直接翻阅对应的统计学书本。
R语言中使用 ?mk.test可直接查看MK检验的文档。