技术 – R 语言 stats 包中的函数(r语言stem函数)

技术 - 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(TRUEFALSEna.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两个参数。xy的长度必须相等。

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.rmTRUE时,该函数将忽略向量中的NANaN值。概率 0 对应最小观测值,概率 1 对应最大观测值。该函数的语法如下:

quantile(x, ...)

quantile函数接受以下参数:

参数 描述
x 数值向量
probs 概率向量,取值为 [0, 1](LCTT 译注:默认为(0, 0.25, 0.5, 0.75, 1)
na.rm 若为 TRUE,忽略向量中的NANaN
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.rmna.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中国荣誉推出

相关新闻

联系我们
联系我们
公众号
公众号
在线咨询
分享本页
返回顶部