我们已经学习了 R 语言的基础知识,包括其语法以及语法所对应的语义,现在准备使用 R 向统计学领域进发。本文是 R 系列的第十一篇文章,我们将学习如何使用 R 语言 stats 包中提供的统计函数。
与此系列之前的文章一样,我们将使用安装在 Parabola GNU/Linux-libre(x86-64)上的 R 4.1.2 版本来运行文中的代码。
1 | $ R --version |
mean 函数
在 R 中 mean
函数用来计算算术平均值。该函数接受一个 R 对象 x
作为参数,以及一个 trim
选项来在计算均值之前剔除任意比例的数据(LCTT 译注:比如对于一个含有 7 个元素的向量 x
,设置 trim
为 0.2 表示分别去掉 x
中最大和最小的前 20% —— 即 1.4 个 —— 的元素,所去掉的元素的个数会向下取整,所以最终会去掉 1 个最大值和 1 个最小值;trim
取值范围为 [0, 0.5]
,默认为 0)。 逻辑参数 (TRUE
或 FALSE
)na.rm
可以设置是否忽略空值(NA
)。该函数的语法如下:
1 | mean(x, trim = 0, na.rm = FALSE, ...) |
该函数支持数值、逻辑值、日期和 时间区间 。下面是使用 mean
函数的一些例子:
1 | > mean(c(1, 2, 3)) |
我们使用 UCI 机器学习库提供的一个采集自葡萄牙银行机构的“银行营销数据集”作为样本数据。该数据可用于公共研究,包含 4 个 csv 文件,我们使用 read.csv()
函数导入其中的 bank.csv
文件。
1 | > bank <- read.csv(file="bank.csv", sep=";") |
下面是计算 age
列均值的示例:
1 | > mean(bank$age) |
median 函数
R 语言 stats
包中的 median
函数用来计算样本的中位数。该函数接受一个数值向量 x
,以及一个逻辑值 na.rm
用来设置在计算中位数之前是否去除 NA
值。该函数的语法如下:
1 | median(x, na.rm = FALSE, ...) |
下面是使用该函数的两个例子:
1 | > median(3:5) |
现在我们可以计算银行数据中 age
列的中位数:
1 | > median(bank$age) |
pair 函数
pair
函数用来合并两个向量,接受向量 x
和向量 y
两个参数。x
和 y
的长度必须相等。
1 | Pair(x, y) |
该函数返回一个 Pair
类的列数为 2 的矩阵,示例如下:
1 | > Pair(c(1,2,3), c(4,5,6)) |
该函数常用于像 T 检验和 Wilcox 检验等的 配对检验 。
dist 函数
dist
函数用来计算数据矩阵中各行之间的距离矩阵,接受以下参数:
参数 | 描述 |
---|---|
x |
数值矩阵 |
method |
距离测量方法 |
diag |
若为 TRUE,则打印距离矩阵的对角线 |
upper |
若为 TRUE,则打印距离矩阵的上三角 |
p |
闵可夫斯基距离的幂次(见下文 LCTT 译注) |
该函数提供的距离测量方法包括: 欧式距离 、 最大距离 、 曼哈顿距离 、 堪培拉距离 、 二进制距离 和 闵可夫斯基距离 ,默认为欧式距离。
LCTT 译注:
- 欧式距离指两点之间线段的长度,比如二维空间中 A 点
和 B 点
的欧式距离是
;
- 最大距离指 n 维向量空间中两点在各维度上的距离的最大值,比如 A 点 (3,6,8,9) 和 B 点 (1,8,9,10) 之间的最大距离是
,等于 2;
- 曼哈顿距离指 n 维向量空间中两点在各维度上的距离之和,比如二维空间中 A 点
和 B 点
之间的曼哈顿距离是
;
- 堪培拉距离的公式是
;
- 二进制距离首先将两个向量中的各元素看作其二进制形式,然后剔除在两个向量中对应值均为 0 的维度,最后计算在剩下的维度上两个向量间的对应值不相同的比例,比如 V1=(1,3,0,5,0) 和 V2=(11,13,0,15,10) 的二进制形式分别是 (1,1,0,1,0) 和 (1,1,0,1,1),其中第 3 个维度的对应值均为 0,剔除该维度之后为 (1,1,1,0) 和 (1,1,1,1),在剩余的 4 个维度中只有最后一个维度在两个向量之间的值不同,最终结果为 0.25;
- 闵可夫斯基距离是欧式距离和曼哈顿距离的推广,公式是
,当 p = 1 时相当于曼哈顿距离,当 p = 2 时相当于欧式距离。
下面是使用欧式距离计算 age
列距离矩阵的示例:
1 | > dist(bank$age, method="euclidean", diag=FALSE, upper=FALSE, p=2) |
改用二进制距离的计算结果如下:
1 | > dist(bank$age, method="binary", diag=FALSE, upper=FALSE, p=2) |
quantile 函数
quantile
函数用于计算数值向量 x
的分位数及其对应的概率。当设置 na.rm
为 TRUE
时,该函数将忽略向量中的 NA
和 NaN
值。概率 0 对应最小观测值,概率 1 对应最大观测值。该函数的语法如下:
1 | quantile(x, ...) |
quantile
函数接受以下参数:
参数 | 描述 |
---|---|
x |
数值向量 |
probs |
概率向量,取值为 [0, 1] (LCTT 译注:默认为 (0, 0.25, 0.5, 0.75, 1) ) |
na.rm |
若为 TRUE ,忽略向量中的 NA 和 NaN 值 |
names |
若为 TRUE ,在结果中包含命名属性 |
type |
整数类型,用于选择任意一个九种分位数算法(LCTT 译注:默认为 7) |
digits |
小数精度 |
… | 传递给其他方法的额外参数 |
rnorm
函数可用于生成正态分布的随机数。它可以接受要生成的观测值的数量 n
,一个均值向量以及一个标准差向量。下面是一个计算 rnorm
函数生成的随机数的四分位数的示例:
1 | > quantile(x <- rnorm(100)) |
下面是生成银行年龄数据对应概率下的分位数的示例:
1 | > quantile(bank$age, probs = c(0.1, 0.5, 1, 2, 5, 10, 50)/100) |
IQR 函数
IQR
函数用于计算向量中数值的 四分位距 。其语法如下:
1 | IQR(x, na.rm = FALSE, type = 7) |
参数 type
指定了一个整数以选择分位数算法,该算法在 Hyndman and Fan (1996) 中进行了讨论。下面是计算银行年龄四分位距的示例:
1 | > IQR(bank$age, na.rm = FALSE, type=7) |
sd 函数
sd
函数用来计算一组数值中的标准差。该函数接受一个 数值向量 x
和一个逻辑值 na.rm
。na.rm
用来设置在计算时是否忽略缺失值。该函数的语法如下:
1 | sd(x, na.rm = FALSE) |
对于长度为 0 或 1 的向量,该函数返回 NA
。下面是两个例子:
1 | > sd(1:10) |
下面是计算 age
列标准差的示例:
1 | > sd(bank$age) |
R 语言 stats 包中还有很多其他函数,鼓励你自行探索。
(题图:MJ/ee6b533d-69fc-4baa-a985-cc4e499b5029)
via: https://www.opensourceforu.com/2022/08/the-functions-in-the-r-stats-package/
作者:Shakthi Kannan 选题:lkxed 译者:tanloong 校对:wxy