R语言数据分析及可视化R plotIMP research

R语言绘图进阶篇-ggstatsplot包

2021-10-15  本文已影响0人  R语言搬运工

此文内容首发于微信公众号:R语言搬运工,关注公众号浏览更多精彩内容

原文链接

image

今天在Github上看到了一个有意思的包,作者IndrajeetPatil集合开发的ggstatsplot包,在绘图方面将不同的图和统计检验结果整合在了一起,使得视觉效果更加直观,实现了一图胜多言的效果。以下内容主要基于作者IndrajeetPatil发布的关于包ggstatsplot的详细介绍说明,在此表示感谢。
Patil, I. (2021). Visualizations with statistical details: The
'ggstatsplot' approach. Journal of Open Source Software, 6(61), 3167,
doi:10.21105/joss.03167

由于包里集合多种统计方法,内容非常丰富,现简单介绍其中第一部分:ggbetweenstats函数(一个整合了箱型图、小提琴图和统计检验方法结果的函数。

PS:想要弄清楚这个包返回的结果,必须要对目前主要的统计检验分析方法有一个相对较熟悉的了解。

使用的数据为包内所含电影分类时长的数据:

https://github.com/IndrajeetPatil/ggstatsplot

image.png

数据大体是说不同类型电影的时长

通过绘图来看Action和Comedy类型电影中,mpaa类型电影的时长分布模式,和mpaa分组之间的统计检验差异性。

先上代码和图,随后解释~~~~~~~

# for reproducibility
set.seed(123)

# plot
grouped_ggbetweenstats(
  data = dplyr::filter(movies_long, genre %in% c("Action", "Comedy")),
  x = mpaa,
  y = length,
  grouping.var = genre, # grouping variable
  outlier.tagging = TRUE, # whether outliers need to be tagged
  outlier.label = title, # variable to be used for tagging outliers
  outlier.coef = 2,
  ggsignif.args = list(textsize = 4, tip_length = 0.01),
  p.adjust.method = "hommel", # method for adjusting p-values for multiple comparisons
  # adding new components to `ggstatsplot` default
  ggplot.component = list(ggplot2::scale_y_continuous(sec.axis = ggplot2::dup_axis())),
  caption = substitute(paste(italic("Source"), ": IMDb (Internet Movie Database)")),
  palette = "default_jama",
  package = "ggsci",
  plotgrid.args = list(nrow = 1),
  annotation.args = list(title = "Differences in movie length by mpaa ratings for different genres")
)
image.png

图形中,一眼便可以看到是使用了箱型图和小提琴图绘制了数据的分布模式,这个在ggplot中可以很容易实现,但是统计检验方法结果在图中给出了详细的展示。(看左边半图,红线框出)

  1. 首先进行了参数检验,看一下三个组之间均值的差异性,并给出了检验参 数、置信区间等。

  2. 然后对三个组进行两两比较,比较方法为Games-Howell,矫正p值使用Games-Howell方法。通过添加倒扣的中括号进行诠释(只展示显著性的组)。

  3. 标记了异常值等数据。

4.给出了贝叶斯假设检验结果。

是不是非常的全面,可能对于新手还不是很能理解。看一下具体的展示说明


image.png

图形中以一个公式的形式展示统计检验结果,具体的参数意义包的开发者在网站上也已给出(如上图)。


image.png
看完上面的内容估计有点懵,说明统计方法的学习还不过关,其实小编也是懵的。
首先要看你的数据是几个分组:
image.png

分组的数量不同,在检验差异性时使用的方法是不一样的,具体的可以查看上图。

其次看一下数据符不符合统计假设条件:


image.png

在数理统计中,为检验不同分组间数据的差异性通常根据数据的分布形式使用不同的方法,当数据符合正态分布模式且方差齐性条件满足的时候,通常选择ANOVA分析方法进行检验。如果条件不满足就要根据具体情况再选择方法了,比如使用非参数检验。但是,也不一定!

当数据不符合正态分布且齐性条件满足的时候其实也可以使用方差检验,因为方差分析对数据的正态性并不是十分的敏感,同时可以考虑使用非参数检验。但是当数据也不符合方差齐性的时候这时候可以使用另一个检验方法welck检验,当你的实验设计为混合设计时,数据不符合正态分布和方差齐性,你可以考虑使用robust分析.

在ggstatsplot包中,作者也都集成了不同的参数用来设置:

ggbetweenstats(
data,
x,
y,
plot.type = "boxviolin",
type = "parametric",
pairwise.comparisons = TRUE,
pairwise.display = "significant",
p.adjust.method = "holm",
effsize.type = "unbiased",
bf.prior = 0.707,
bf.message = TRUE,
results.subtitle = TRUE,
xlab = NULL,
ylab = NULL,
caption = NULL,
title = NULL,
subtitle = NULL,
k = 2L,
var.equal = FALSE,
conf.level = 0.95,
nboot = 100L,
tr = 0.2,
centrality.plotting = TRUE,
centrality.type = type,
centrality.point.args = list(size = 5, color = "darkred"),
centrality.label.args = list(size = 3, nudge_x = 0.4, segment.linetype = 4,
min.segment.length = 0),
outlier.tagging = FALSE,
outlier.label = NULL,
outlier.coef = 1.5,
outlier.shape = 19,
outlier.color = "black",
outlier.label.args = list(size = 3),
point.args = list(position = ggplot2::position_jitterdodge(dodge.width = 0.6), alpha
= 0.4, size = 3, stroke = 0),
violin.args = list(width = 0.5, alpha = 0.2),
ggsignif.args = list(textsize = 3, tip_length = 0.01),
ggtheme = ggstatsplot::theme_ggstatsplot(),
package = "RColorBrewer",
palette = "Dark2",
ggplot.component = NULL,
output = "plot",
...
)

通过查看帮助文件,可以根据自己的要求选择不同的方法,比如type参数:


image.png
image.png

当测试两个分组之间差异性的时候同样可以使用该包进行绘制,这时候涉及的统计方法将更加丰富:

使用的数据为包gapminder提供的数据集,该数据集提供了从 1952 年到 2007 年 142 个国家中每一个国家的预期寿命、人均 GDP 和人口的值,每 5 年一次 (Gapminder Foundation)。


image.png

假设我们要检查的第一件事是 2007 年一个大陆国家的预期寿命分布。我们还想知道大陆之间预期寿命的平均差异是否具有统计显着性。

# since the confidence intervals for the effect sizes are computed using
# bootstrapping, important to set a seed for reproducibility
set.seed(123)

# function call
ggstatsplot::ggbetweenstats(
  data = dplyr::filter(gapminder::gapminder, year == 2007, continent != "Oceania"),
  x = continent,
  y = lifeExp
)
image.png

从图中可以看出,该函数默认返回贝叶斯因子进行测试。如果零假设显着性检验 (NHST) 方法无法拒绝零假设,则贝叶斯方法可以帮助索引支持零假设的证据(即BF01)

到目前为止,我们只使用了经典的参数测试和箱形小提琴图,但我们也可以使用其他可用选项:

type参数包含了下列缩写:"p"(为参数检验), "np"(为非参数检验), "r"(robust检验), "bf"(贝叶斯因子)。

显示的图型("box","violin",或"boxviolin")。

可以修改调色板。
首先,使用参数检验方法检验两组之间的差异性,使用的是welch统计方法

# for reproducibility
set.seed(123)
library(ggstatsplot)
library(gapminder)

# selecting subset of the data
df_year <- dplyr::filter(gapminder::gapminder, year == 2007 | year == 1957)

# parametric t-test and box plot
p1 <- ggstatsplot::ggbetweenstats(
  data = df_year,
  x = year,
  y = lifeExp,
  xlab = "Year",
  ylab = "Life expectancy",
  plot.type = "box",
  type = "p",
  conf.level = 0.99,
  title = "Parametric test",
  package = "ggsci",
  palette = "nrc_npg"
)
image.png

其次,使用非参数检验方法,使用的是曼-惠特尼U检验方法

p2 <- ggstatsplot::ggbetweenstats(
  data = df_year,
  x = year,
  y = lifeExp,
  xlab = "Year",
  ylab = "Life expectancy",
  plot.type = "violin",
  type = "np",
  conf.level = 0.99,
  title = "Non-parametric Test (violin plot)",
  package = "ggsci",
  palette = "uniform_startrek"
)
image.png

再次,使用稳健性分析(robust),检验方法为Yuen 的修整均值检验

p3 <- ggstatsplot::ggbetweenstats(
  data = df_year,
  x = year,
  y = lifeExp,
  xlab = "Year",
  ylab = "Life expectancy",
  plot.type = "boxviolin",
  type = "r",
  conf.level = 0.99,
  title = "Robust Test (box & violin plot)",
  tr = 0.005,
  package = "wesanderson",
  palette = "Royal2",
  k = 3
)
image.png

最后使用贝叶斯方法,

p4 <- ggstatsplot::ggbetweenstats(
  data = df_year,
  x = year,
  y = lifeExp,
  xlab = "Year",
  ylab = "Life expectancy",
  type = "bayes",
  plot.type = "box",
  title = "Bayesian Test (box plot)",
  package = "ggsci",
  palette = "nrc_npg"
)
image.png
image.png
ggstatsplot包功能强大,小编也在摸索中,文中可能存在一些错误和问题,请及时反馈进行修正。感兴趣的可以去网站学习一起交流,包的网站为:https://github.com/IndrajeetPatil/ggstatsplot

精彩推荐:

R语言绘制散点图geom_point
R语言添加拟合曲线geom_smooth
R语言箱线图boxplot
R语言线图geom_line

上一篇下一篇

猜你喜欢

热点阅读