今天的内容是连续型变量的组间差异比较,首先来说独立样本。
「两组独立样本:」如果数据同时满足正态性和方差齐性,可以采用独立样本t检验或者Wilcoxon秩和检验,如果不满足可采用Wilcoxon秩和检验。
「两组以上独立样本:」如果数据同时满足正态性和方差齐性,可以采用方差分析(ANOVA)或者Kruskal检验,如果不满足可采用Kruskal检验。
独立样本t检验检验和方差分析(ANOVA)都是参数检验,对数据分布具有一定的假设,在符合检验假设的情况下,建议采用参数检验。
Wilcoxon秩和检验和Kruskal检验都是非参数检验,可用于呈偏态分布或者组间不满足方差齐性的数据,对数据分布无要求。
接下来说非独立样本。
「两组非独立样本:」如果数据满足正态性,可以采用配对t检验或者Wilcoxon符号秩检验,如果不满足可采用Wilcoxon符号秩检验。
「两组以上非独立样本:」如果数据同时满足正态性和方差齐性,可以采用重复测量方差分析(Repeated Measures ANOVA)或者Friedman M检验,如果不满足可采用Friedman M检验。
配对t检验和重复测量方差分析(Repeated Measures ANOVA)都是参数检验,Wilcoxon符号秩检验和Friedman M检验都是非参数检验。
大家在绘图前要首先为自己的数据选择合适的检验方法,不要只求出图哦。
❝写上面一段话,我都快把自己给绕晕了,个人能力有限,如果大家发现任何问题,欢迎后台留言指正,我会在公众号底部做一个纠错专栏,所有出现错误然后纠正后的内容会放在那里(ps:因为基本上改不了原文)。
❞
绘图
加载包和数据
# 加载包、导入数据
library(ggpubr) # 继承ggplot语法
library(patchwork) # 拼图包
library(ggsci) #配色包
data("ToothGrowth")
ToothGrowth$dose=factor(ToothGrowth$dose)
数据介绍
示例数据
ToothGrowth数据集结构如图所示,这是一项评估维生素C对豚鼠牙齿生长的影响的研究数据,len是牙齿长度;supp是两种给药方式,一种是橙汁OJ,另一种是抗坏血酸VC;dose是三种给药水平。对于该数据集我们后续均采用非参数检验方法。
散点箱线图
# 绘制散点箱线图-----------------------------------------
p <- ggplot(ToothGrowth, aes(x=dose, y=len,color=dose)) +
# 绘制箱线图
geom_boxplot(aes(fill=dose),
alpha=0.1)+ # 设置透明度
# 绘制散点
geom_jitter()+
# 设置颜色
scale_color_manual(values = pal_npg('nrc')(9))+
scale_fill_manual(values = pal_npg('nrc')(9))+
# 设置主题
theme_bw()+
# 去除网格线
theme(panel.grid = element_blank())
p
plot0
stat_compare_means( )参数解读
-
「method(方法)」:指定要执行的统计检验。对于非配对检验:
-
"t.test"
:数据需满足双独立样本,正态性,方差齐性。 -
"wilcox.test"
:数据需满足双独立样本。(两组数据的默认方法) -
"kruskal.test"
:数据需满足三组或更多组独立样本。(>=3组数据的默认方法) -
"anova"
:数据需满足三组或更多组独立样本,正态性,方差齐性。
-
-
「label(标签)」:默认显示检验方法和p值,
p.format
只显示p值不显示检验方法,p.signif
显示显著性水平符号,ns
: p > 0.05、*
: p <= 0.05、**
: p <= 0.01、***
: p <= 0.001、****
: p <= 0.0001。 -
「label.x与label.y」:标签的坐标位置。
-
「comparisons(比较)」:一个列表,用于指定要进行比较的组。
-
「order(顺序)」:一个可选的参数,用于指定应显示比较的顺序。
-
「paired(配对)」:逻辑值。如果为
TRUE
,表示进行比较的组是配对的。 -
「show.legend」 :逻辑值,是否在图例中显示,建议False。
单因素两水平/多水平比较
# 单因素:两水平/多水平比较----------------------------------------
p1 <- p+stat_compare_means(method = "kruskal.test",
label = "p.format",
label.x = 0.8,
label.y = 33,
show.legend = F)
p2 <- p+stat_compare_means(method = "kruskal.test",
label = "p.signif",
label.x = 0.8,
label.y = 33,
show.legend = F)
p1+p2
ggsave('plot1.pdf',width = 7,height = 4.5)
plot1
单因素多水平两两比较
# 单因素:多水平两两比较-------------------------------------------
# 设置要比较的分组
my_comparisons <- list(c("0.5", "1"), c("0.5", "2"),c("1", "2"))
p3 <- p + stat_compare_means(comparisons=my_comparisons,
label.y = c(28, 32, 36),
method="wilcox.test"
)
p4 <- p + stat_compare_means(comparisons=my_comparisons,
label.y = c(28, 32, 36),
method="wilcox.test",
label="p.signif"
)
p3+p4
ggsave('plot2.pdf',width = 7,height = 4.5)
plot2
双因素
# 双因素----------------------------------------------------------
p5<-ggplot(ToothGrowth,aes(x=dose,y=len,color=supp))+
geom_boxplot(aes(fill=supp),
alpha=0.1)+
geom_jitter(position = position_jitterdodge(jitter.height=0.75, # 散点抖动高度
jitter.width = 0.5, # 散点抖动宽度
dodge.width = 0.75))+ # x轴方向上的闪避量
scale_color_manual(values = pal_npg('nrc')(9)[c(1,3)])+
scale_fill_manual(values = pal_npg('nrc')(9)[c(1,3)])+
theme_bw()+
theme(panel.grid = element_blank())
p5 <- p5 + stat_compare_means(aes(group = supp),
label="p.signif",
show.legend = F)
p5
ggsave('plot3.pdf',width = 6,height = 4)
plot3
ggExtra包用于增强ggplot2的功能,它的主要作用是可以向ggplot2散点图的边缘添加各种统计分布图,如密度分布图、直方图、箱线图、小提琴图等。aplot包和gridExtra包是两个拼图包。
需要注意的是ggExtra包的语法不遵循标准的ggplot2的语法,其中主要的绘图函数ggMarginal()需以ggplot2绘图对象作为一个输入参数,而不是直接用“+”连接。另外输入的ggplot2绘图对象中必须要有散点图层ggMarginal()才能正常运行。
绘图
加载包和数据
# 安装包
# install.packages("ggExtra")
# install.packages("aplot")
# install.packages('gridExtra')
# 加载包和数据
library(ggExtra)
library(ggplot2)
library(tidyverse)
library(RColorBrewer) #颜色包
library(aplot) #拼图包
library(gridExtra) #拼图包
iris <- iris
数据介绍
iris数据集是R语言自带的鸢尾花数据集,有5个变量,我们今天用到的3个变量Petal.Length、Petal.Width、Species分别是花瓣长度、花瓣宽度和品种。
示例数据
ggplot2绘散点图+ggExtra绘边缘图
# 主体图--散点图
p0 <- ggplot(iris,
aes(Petal.Length, Petal.Width, colour = Species)) +
geom_point()+
theme_bw()+
scale_color_manual(values = brewer.pal(3,'Set2'))+ # 设置颜色
theme(legend.position = c(0.12,0.88), # 修改图例位置
legend.background = element_blank(), # 去除图例背景
legend.title = element_blank()) # 去除图例标题
「ggMarginal()函数参数讲解:」
-
type:指定边缘图类型,
density
是密度分布图,histogram
是直方图,densigram
是密度分布图+直方图,boxplot
是箱线图,violin
是小提琴图。 -
margins:指定要绘制边缘图的位置,参数有
both
、x
、y
。 -
size:主图相对于边缘图的大小,默认size为5,即主图的高度和宽度都是边缘图的5倍。
-
groupColour:如果为TRUE则边缘图的color与散点一致,否则为空。
-
groupFill:如果为TRUE则边缘图的fill与散点一致,否则为黑色。
-
xparams:仅用于控制x轴的参数列表。
-
yparams:仅用于控制y轴的参数列表。
# 密度分布图
ggMarginal(p0,type = "density",groupColour = TRUE,groupFill = TRUE)
plot1.1
# 直方图+密度分布图
ggMarginal(p0,type = "densigram",groupColour = TRUE, groupFill = TRUE)
plot1.2
# 箱线图
ggMarginal(p0,type = "boxplot",groupColour = TRUE, groupFill = TRUE)
plot1.3
ggplot2绘图+aplot拼图
# ggplot2绘图+aplot拼图-----------------------------------------------
# 上侧密度分布图
top <- ggplot()+
geom_density(data=iris,
aes(Petal.Length,fill=Species,color=Species),
alpha=0.5)+
scale_fill_manual(values = brewer.pal(3,'Set2'))+ #设置填充颜色
scale_color_manual(values = brewer.pal(3,'Set2'))+ # 设置线的颜色
theme_void()+ # 设置主题
theme(legend.position="none") # 去除图例
# 右侧密度分布图
right <- ggplot()+
geom_density(data=iris,
aes(Petal.Width,fill=Species,color=Species),
alpha=0.5)+
scale_fill_manual(values = brewer.pal(3,'Set2'))+ #设置填充颜色
scale_color_manual(values = brewer.pal(3,'Set2'))+ # 设置线的颜色
theme_void()+ # 设置主题
coord_flip()+ # 翻转坐标轴
theme(legend.position="none")# 去除图例
# aplot包拼图
p0 %>% insert_right(right, width=.2) %>% insert_top(top, height=0.2)
ggsave('plot2.pdf',width = 6,height = 5)
plot2
ggplot2绘图+gridExtra拼图
# ggplot2绘图+gridExtra拼图--------------------------------------------
# 创建一个空的ggplot对象
empty <- ggplot() +
theme(panel.background=element_blank())
# gridExtra包拼图
pdf('plot3.pdf',width = 6,height = 5)
grid.arrange(top, empty, p0, right, ncol=2, nrow=2, widths=c(4,1), heights=c(1,4))
dev.off()
plot3
总结:aplot包的默认拼图间隙很小,比较美观,但是图例被它移到外面了。gridExtra包默认拼图之间的间隙比较大。另外仔细比较aplot包和gridExtra包的拼图结果,可以发现aplot包是把子图的panel区域对齐,而gridExtra包是把子图的plot区域对齐。对于今天的内容,aplot包的对齐效果显然是我们需要的。
panel区域和plot区域不了解的小伙伴不要着急哦,以后的推文会专门出一期的。