教学内容
- 本节课主要介绍R语言的基本操作与描述性统计。
- 以下内容仅用于北京林业大学生态与自然保护学院《生物统计学》的第一节上机内容。
参考资料
数据下载链接
R语言教程
# ==============================================
# 预处理
# ==============================================
# 清理内存
rm(list = ls())
gc()
## used (Mb) gc trigger (Mb) max used (Mb)
## Ncells 414692 22.2 861101 46 647465 34.6
## Vcells 756612 5.8 8388608 64 1660157 12.7
# 加载 package
# 如果package加载没成功
# install.packages("psych")
library(psych)
# 加载工作区域
# 需要在setwd里面设置自己的文件路径
setwd("F:/2021.生物统计学教程/2021年生物统计学/数据")
getwd()
## [1] "F:/2021.生物统计学教程/2021年生物统计学/数据"
# ==============================================
# 描述性统计
# ==============================================
# 加载数据
data <- read.csv("grades.csv")
# 查看数据格式
head(data) # 展示数据前六行
## id lastname firstname gender ethnicity year lowup section gpa extcr
## 1 106,484 VILLARRUZ ALFRED Male 2 2 1 2 1.18 1
## 2 108,642 VALAZQUEZ SCOTT Male 4 3 2 2 2.19 2
## 3 127,285 GALVEZ JACKIE Female 4 4 2 2 2.46 2
## 4 132,931 OSBORNE ANN Female 3 2 1 2 3.98 1
## 5 140,219 GUADIZ VALERIE Female 2 4 2 1 1.84 1
## 6 142,630 RANGIFO TANIECE Female 4 3 2 3 3.90 1
## review quiz1 quiz2 quiz3 quiz4 quiz5 final total percent grade passfail
## 1 2 6 5 7 6 3 53 80 64 D P
## 2 1 10 10 7 6 9 54 96 77 C P
## 3 2 10 7 8 9 7 57 98 78 C P
## 4 1 7 8 7 7 6 68 103 82 B P
## 5 1 7 8 9 8 10 66 108 86 B P
## 6 2 10 10 10 9 9 74 122 98 A P
str(data) # 展示数据格式
## 'data.frame': 105 obs. of 21 variables:
## $ id : chr "106,484" "108,642" "127,285" "132,931" ...
## $ lastname : chr "VILLARRUZ" "VALAZQUEZ" "GALVEZ" "OSBORNE" ...
## $ firstname: chr "ALFRED" "SCOTT" "JACKIE" "ANN" ...
## $ gender : chr "Male" "Male" "Female" "Female" ...
## $ ethnicity: int 2 4 4 3 2 4 2 5 4 3 ...
## $ year : int 2 3 4 2 4 3 3 2 3 3 ...
## $ lowup : int 1 2 2 1 2 2 2 1 2 2 ...
## $ section : int 2 2 2 2 1 3 3 1 1 2 ...
## $ gpa : num 1.18 2.19 2.46 3.98 1.84 3.9 2.84 3.57 3.95 3.49 ...
## $ extcr : int 1 2 2 1 1 1 2 1 2 2 ...
## $ review : int 2 1 2 1 1 2 1 2 2 1 ...
## $ quiz1 : int 6 10 10 7 7 10 10 10 10 10 ...
## $ quiz2 : int 5 10 7 8 8 10 9 9 10 10 ...
## $ quiz3 : int 7 7 8 7 9 10 10 10 10 9 ...
## $ quiz4 : int 6 6 9 7 8 9 10 10 10 10 ...
## $ quiz5 : int 3 9 7 6 10 9 10 10 9 10 ...
## $ final : int 53 54 57 68 66 74 63 71 74 75 ...
## $ total : int 80 96 98 103 108 122 112 120 123 124 ...
## $ percent : int 64 77 78 82 86 98 90 96 98 99 ...
## $ grade : chr "D" "C" "C" "B" ...
## $ passfail : chr "P" "P" "P" "P" ...
# 使用R自带的功能进行描述性统计
# 平均数
mean(data$total, na.rm = TRUE)
## [1] 100.5714
# 标准差
sd(data$total, na.rm = TRUE)
## [1] 15.29948
# 标准误
se <- sd(data$total)/sqrt(length(data$total))
se
## [1] 1.493077
# data$total的数据汇总
summary(data$total)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 51.0 92.0 103.0 100.6 111.0 124.0
# 使用psych::describe函数对其中的total数据进行描述性统计
describe(data$total)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 105 100.57 15.3 103 101.8 13.34 51 124 73 -0.81 0.77 1.49
# ==============================================
# 作图
# ==============================================
# 使用hist函数建立直方图
hist(x = data$total, # 输入数据
probability = TRUE, # y轴显示概率
col = "gray", # 调整颜色
xlab = "total scores", # x轴命名为"total scores"
main = "Histogram of total scores" # 图命名为"Histogram of total scores"
)
# 计算数据的平均值和标准差
total.mean <- mean(data$total)
total.sd <- sd(data$total)
# 生成正太分布数据
curve(dnorm(x, mean = total.mean, sd = total.sd), col = "red", add = TRUE)
# 使用stem函数建立茎叶图
stem(data$total)
##
## The decimal point is 1 digit(s) to the right of the |
##
## 5 | 12
## 5 |
## 6 |
## 6 | 56
## 7 | 00
## 7 | 5789
## 8 | 01444
## 8 | 7888
## 9 | 00022222334
## 9 | 56666777778888888999
## 10 | 0133344
## 10 | 556666777788888999999
## 11 | 11123334
## 11 | 5678888
## 12 | 000122233344
# 使用boxplot函数建立盒装图
boxplot(data$total, ylab = "total scores")
# 使用qqnorm函数建立qq图
qqnorm(data$total, main = "Normality check via QQ plot")
qqline(data$total, col = "red")
# ==============================================
# 正态分布检验
# ==============================================
# 使用One-sample Kolmogorov-Smirnov test
# 当p-value大于0.05时,数据才满足正太分布
# 如果存在软件报错:如ties should not be present for the Kolmogorov-Smirnov test
# 说明样本数据中存在有相同的值,单样本K-S检验要求检验分布是连续的,
# 而连续分布出现相同值的概率为0.如果是出现相同的,则连续分布的假设不成立,
# 则该方法无法使用
# 数据标准化
total.scaled <- scale(data$total)
# 正态检验
ks.test(total.scaled, "pnorm")
## Warning in ks.test(total.scaled, "pnorm"): ties should not be present for the
## Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: total.scaled
## D = 0.08731, p-value = 0.4002
## alternative hypothesis: two-sided
# 另一种选择:使用nortest::lillie.test做正态分布检验
library(nortest)
lillie.test(data$total)
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: data$total
## D = 0.08731, p-value = 0.04711