第五讲 R-数据描述性统计分析作图
在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。
在上一讲中,我们介绍了第四讲 R-描述性统计分析(点我可跳转)。昨天大家已经初步学习了R的统计学技能,是不是蠢蠢欲动了呢?别急,马上给大家带来新的R作图技能!
1. 将数据导入R
在这里,我们将使用名为iris的内置R数据集。
# 导入R内自带的iris数据集
library(datasets)
data(iris)
# 将数据存储在变量my_data中
my_data <- iris
2. 图形显示分布
R的描述性统计作图的方法非常多,相关的R包也很多。
小编这里以R包ggpubr为例来作图。更多ggpubr相关内容,可以查阅
https://cran.r-project.org/web/packages/ggpubr/index.html
2.1 安装和加载ggpubr
install.packages("ggpubr")
# 或者使用github内最新版本
if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/ggpubr")
# 加载ggpubr如下:
library(ggpubr)
Tips如果是Mac电脑的话,可能在安装ggpubr的时候会报错:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
在这种情况下,请进入Mac的Terminal软件,输入xcode-select –install
或者
sudo xcode-select --reset
箱式图,是指—种描述数据分布的统计图,是表述最小值、第一四分位数、中位数、第三四分位数与最大值的一种图形方法。
在箱图中,最上方和最下方的线段分别表示数据的最大值和最小值,其中箱图的上方和下方的线段分别表示第三四分位数和第一四分位数,箱图中间的粗线段表示数据的中位数。
ggboxplot(my_data, y = "Sepal.Length", width = 0.3)
直方图,由一系列高度不等的纵向条段表示数据分布的情况。
Sepal.Length的直方图,虚线表示平均值。
gghistogram(my_data, x = "Sepal.Length", bins = 9, add = "mean")
QQPlot图是用于直观验证一组数据是否来自某个分布,或者验证某两组数据是否来自同一(族)分布。
在统计学中,常用来检验数据是否来自于正态分布。
ggqqplot(my_data, x = "Sepal.Length")
3. 分组描述统计
小编这里使用dplyr包中的group_by()功能实现对my_data物种种类进行分组。并且计算:
计算每组中的元素数:n()
计算平均值:mean()
标准差:sd()
#函数%>%用于链接操作。
# 安装及加载ddplyr:
install.packages("dplyr")
library(dplyr)
group_by(my_data, Species) %>%
summarise(
count = n(),
mean = mean(Sepal.Length, na.rm = TRUE),
sd = sd(Sepal.Length, na.rm = TRUE)
)
# A tibble: 3 x 4
Species count mean sd
1 setosa 50 5.01 0.352
2 versicolor 50 5.94 0.516
3 virginica 50 6.59 0.636
3.2 分组数据的图形library("ggpubr")
# 根据物种分类对不同物种按不同颜色制作箱式图
ggboxplot(my_data, x = "Species", y = "Sepal.Length",
color = "Species",
palette = c("red", "blue", "black"))
# 按种类画带状图
ggstripchart(my_data, x = "Species", y = "Sepal.Length",
color = "Species",
palette = c("red", "blue", "black"),
add = "mean_sd")
请注意,当每组的观察次数较少时,建议将带状图与箱形图进行比较。
4. 频率表
频率表(或列联表)用于描述分类变量。它包含因素水平的每种组合的计数。
R函数生成表:table()
4.1 导入数据
对592名学生的头发和眼睛颜色分布进行按性别分组的图形展示:
#导入R自带数据集HairEyeColor
df <- as.data.frame(HairEyeColor)
hair_eye_col <- df[rep(row.names(df), df$Freq), 1:3]
rownames(hair_eye_col) <- 1:nrow(hair_eye_col)
head(hair_eye_col)
Hair Eye Sex
1 Black Brown Male
2 Black Brown Male
3 Black Brown Male
4 Black Brown Male
5 Black Brown Male
6 Black Brown Male
# hair/eye variables
Hair <- hair_eye_col$Hair
Eye <- hair_eye_col$Eye
# 头发颜色的计数分布
table(Hair)
Hair
Black Brown Red Blond
108 286 71 127
# 眼睛颜色的计数分布
table(Eye)
Eye
Brown Blue Hazel Green
220 215 93 64
图形:要创建图形,我们首先将表转换为数据框,可以使用table()。
df1 <- as.data.frame(table(Hair))
df1
Hair Freq
1 Black 108
2 Brown 286
3 Red 71
4 Blond 127
# 用Bar图展示
library(ggpubr)
ggbarplot(df1, x = "Hair", y = "Freq")
tbl2 <- table(Hair , Eye)
tbl2
Eye
Hair Brown Blue Hazel Green
Black 68 20 15 5
Brown 119 84 54 29
Red 26 17 14 14
Blond 7 94 10 16
图形:要作图,同理,我们首先将表转换为数据框。
df <- as.data.frame(tbl2)
head(df)
Hair Eye Freq
1 Black Brown 68
2 Brown Brown 119
3 Red Brown 26
4 Blond Brown 7
5 Black Blue 20
6 Brown Blue 84
# Bar图展示
library(ggpubr)
ggbarplot(df, x = "Hair", y = "Freq",
color = "Eye",
palette = c("brown", "blue", "black", "red"))
# 也可以改变条带位置
ggbarplot(df, x = "Hair", y = "Freq",
color = "Eye", position = position_dodge(),
palette = c("brown", "blue", "black", "red"))
在之后的更新中,我们会进一步为您介绍R的入门,以及常用生物统计方法和R实现。欢迎关注,投必得医学手把手带您走入R和生物统计的世界。
提前打个预告,接下来我们要学习R语言的进阶统计学技能啦,下一期将会更新“用R语言进行数据正态分布检验”。喜欢的同学们快快关注起来吧。
第二讲 R-编程基础-运算、数据类型和向量等基本介绍
第三讲 R编程基础-矩阵和数据框
第四讲 R-描述性统计分析
当然啦,R语言的掌握是在长期训练中慢慢积累的。一个人学习太累,不妨加入“R与统计交流群”,和数百位硕博一起学习。
快扫二维码撩客服,
带你进入投必得医学交流群,
让我们共同进步!
↓↓
- END -
长按二维码关注「投必得医学」,更多科研干货在等你!
麻烦点一下在看再走呗