技术 – R 语言 stats 包中的函数(r语言stem函数)
我们已经学习了 R 语言的基础知识,包括其语法以及语法所对应的语义,现在准备使用 R 向统计学领域进发。本文是 R 系列的第十一篇文章,我们将学习如何使用 R 语言 stats 包中提供的统计函数。
与此系列之前的文章一样,我们将使用安装在 Parabola GNU/Linux-libre(x86-64)上的 R 4.1.2 版本来运行文中的代码。
$ R --versionR version 4.1.2 (2021-11-01) -- \"Bird Hippie\"Copyright (C) 2021 The R Foundation for Statistical ComputingPlatform: x86_64-pc-linux-gnu (64-bit)R is free software and comes with ABSOLUTELY NO WARRANTY.You are welcome to redistribute it under the terms of theGNU General Public License versions 2 or 3.For more information about these matters see https://www.gnu.org/licenses/
mean 函数
在 R 中 mean
函数用来计算算术平均值。该函数接受一个 R 对象x
作为参数,以及一个trim
选项来在计算均值之前剔除任意比例的数据(LCTT 译注:比如对于一个含有 7 个元素的向量x
,设置trim
为 0.2 表示分别去掉x
中最大和最小的前 20% —— 即 1.4 个 —— 的元素,所去掉的元素的个数会向下取整,所以最终会去掉 1 个最大值和 1 个最小值;trim
取值范围为[0, 0.5]
,默认为 0)。逻辑参数logical argument(TRUE
或FALSE
)na.rm
可以设置是否忽略空值(NA
)。该函数的语法如下:
mean(x, trim = 0, na.rm = FALSE, ...)
该函数支持数值、逻辑值、日期和 时间区间time intervals。下面是使用 mean
函数的一些例子:
> mean(c(1, 2, 3))2> mean(c(1:5, 10, 20))6.428571> mean(c(FALSE, TRUE, FALSE))0.3333333> mean(c(TRUE, TRUE, TRUE))1
我们使用 UCI 机器学习库提供的一个采集自葡萄牙银行机构的“银行营销数据集”作为样本数据。该数据可用于公共研究,包含 4 个 csv 文件,我们使用 read.csv
函数导入其中的bank.csv
文件。
> bank bank[1:3,] age job marital education default balance housing loan contact day1 30 unemployed married primary no 1787 no no cellular 192 33 services married secondary no 4789 yes yes cellular 113 35 management single tertiary no 1350 yes no cellular 16 month duration campaign pdays previous poutcome y1 oct 79 1 -1 0 unknown no2 may 220 1 339 4 failure no3 apr 185 1 330 1 failure no
下面是计算 age
列均值的示例:
> mean(bank$age)41.1701
median 函数
R 语言 stats
包中的median
函数用来计算样本的中位数。该函数接受一个数值向量x
,以及一个逻辑值na.rm
用来设置在计算中位数之前是否去除NA
值。该函数的语法如下:
median(x, na.rm = FALSE, ...)
下面是使用该函数的两个例子:
> median(3:5)4> median(c(3:5, 50, 150))[1] 5
现在我们可以计算银行数据中 age
列的中位数:
> median(bank$age)39
Pair 函数
pair
函数用来合并两个向量,接受向量x
和向量y
两个参数。x
和y
的长度必须相等。
Pair(x, y)
该函数返回一个 Pair
类的列数为 2 的矩阵,示例如下:
> Pair(c(1,2,3), c(4,5,6)) x y[1,] 1 4[2,] 2 5[3,] 3 6attr(,\"class\")[1] \"Pair\"
该函数常用于像 T 检验和 Wilcox 检验等的 配对检验paired test。
dist 函数
dist
函数用来计算数据矩阵中各行之间的距离矩阵,接受以下参数:
参数 | 描述 |
---|---|
x |
数值矩阵 |
method |
距离测量方法 |
diag |
若为 TRUE,则打印距离矩阵的对角线 |
upper |
若为 TRUE,则打印距离矩阵的上三角 |
p |
闵可夫斯基距离的幂次(见下文 LCTT 译注) |
该函数提供的距离测量方法包括:欧式距离euclidean、最大距离maximum、曼哈顿距离manhattan、堪培拉距离canberra、二进制距离binary 和 闵可夫斯基距离minkowski,默认为欧式距离。
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
列距离矩阵的示例:
> dist(bank$age, method=\"euclidean\", diag=FALSE, upper=FALSE, p=2) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 252 33 5 24 0 3 55 29 26 24 296 5 2 0 5 247 6 3 1 6 23 18 9 6 4 9 20 4 39 11 8 6 11 18 6 5 210 13 10 8 13 16 8 7 4 211 9 6 4 9 20 4 3 0 2 412 13 10 8 13 16 8 7 4 2 0 413 6 3 1 6 23 1 0 3 5 7 3 714 10 13 15 10 39 15 16 19 21 23 19 23 1615 1 2 4 1 28 4 5 8 10 12 8 12 5 1116 10 7 5 10 19 5 4 1 1 3 1 3 4 20 917 26 23 21 26 3 21 20 17 15 13 17 13 20 36 25 1618 7 4 2 7 22 2 1 2 4 6 2 6 1 17 6 3 1919 5 8 10 5 34 10 11 14 16 18 14 18 11 5 6 15 31 1220 1 2 4 1 28 4 5 8 10 12 8 12 5 11 0 9 25 6 621 8 5 3 8 21 3 2 1 3 5 1 5 2 18 7 2 18 1 13 722 12 9 7 12 17 7 6 3 1 1 3 1 6 22 11 2 14 5 17 11 423 14 11 9 14 15 9 8 5 3 1 5 1 8 24 13 4 12 7 19 13 6 2 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50...
改用二进制距离的计算结果如下:
> dist(bank$age, method=\"binary\", diag=FALSE, upper=FALSE, p=2) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 282 03 0 04 0 0 05 0 0 0 06 0 0 0 0 07 0 0 0 0 0 08 0 0 0 0 0 0 09 0 0 0 0 0 0 0 010 0 0 0 0 0 0 0 0 011 0 0 0 0 0 0 0 0 0 012 0 0 0 0 0 0 0 0 0 0 013 0 0 0 0 0 0 0 0 0 0 0 014 0 0 0 0 0 0 0 0 0 0 0 0 015 0 0 0 0 0 0 0 0 0 0 0 0 0 016 0 0 0 0 0 0 0 0 0 0 0 0 0 0 017 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 018 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 019 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 021 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 022 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 023 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
quantile 函数
quantile
函数用于计算数值向量x
的分位数及其对应的概率。当设置na.rm
为TRUE
时,该函数将忽略向量中的NA
和NaN
值。概率 0 对应最小观测值,概率 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
函数生成的随机数的四分位数的示例:
> quantile(x
下面是生成银行年龄数据对应概率下的分位数的示例:
> quantile(bank$age, probs = c(0.1, 0.5, 1, 2, 5, 10, 50)/100)0.1% 0.5% 1% 2% 5% 10% 50%20.0 22.6 24.0 25.0 27.0 29.0 39.0
IQR 函数
IQR
函数用于计算向量中数值的 四分位距interquartile range。其语法如下:
IQR(x, na.rm = FALSE, type = 7)
参数 type
指定了一个整数以选择分位数算法,该算法在Hyndman and Fan (1996)中进行了讨论。下面是计算银行年龄四分位距的示例:
> IQR(bank$age, na.rm = FALSE, type=7)16
sd 函数
sd
函数用来计算一组数值中的标准差。该函数接受一个 数值向量numeric vectorx
和一个逻辑值na.rm
。na.rm
用来设置在计算时是否忽略缺失值。该函数的语法如下:
sd(x, na.rm = FALSE)
对于长度为 0 或 1 的向量,该函数返回 NA
。下面是两个例子:
> sd(1:10)3.02765> sd(1)NA
下面是计算 age
列标准差的示例:
> sd(bank$age)10.57621
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
本文由 LCTT原创编译,Linux中国荣誉推出