Redian新闻
>
R 语言 stats 包中的函数 | Linux 中国

R 语言 stats 包中的函数 | Linux 中国

科技
 
导读:我们将学习如何使用 R 语言 stats 包中提供的统计函数。                         
本文字数:7561,阅读时长大约:9分钟

我们已经学习了 R 语言的基础知识,包括其语法以及语法所对应的语义,现在准备使用 R 向统计学领域进发。本文是 R 系列的第十一篇文章,我们将学习如何使用 R 语言 stats 包中提供的统计函数。

与此系列之前的文章一样,我们将使用安装在 Parabola GNU/Linux-libre(x86-64)上的 R 4.1.2 版本来运行文中的代码。

  1. $ R --version
  2. R version 4.1.2 (2021-11-01) -- "Bird Hippie"
  3. Copyright (C) 2021 The R Foundation for Statistical Computing
  4. Platform: x86_64-pc-linux-gnu (64-bit)
  5. R is free software and comes with ABSOLUTELY NO WARRANTY.
  6. You are welcome to redistribute it under the terms of the
  7. GNU General Public License versions 2 or 3.
  8. 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 或 FALSEna.rm 可以设置是否忽略空值(NA)。该函数的语法如下:

  1. mean(x, trim = 0, na.rm = FALSE, ...)

该函数支持数值、逻辑值、日期和 时间区间(time intervals)。下面是使用 mean 函数的一些例子:

  1. > mean(c(1, 2, 3))
  2. 2
  3. > mean(c(1:5, 10, 20))
  4. 6.428571
  5. > mean(c(FALSE, TRUE, FALSE))
  6. 0.3333333
  7. > mean(c(TRUE, TRUE, TRUE))
  8. 1

我们使用 UCI 机器学习库提供的一个采集自葡萄牙银行机构的“银行营销数据集”作为样本数据。该数据可用于公共研究,包含 4 个 csv 文件,我们使用 read.csv() 函数导入其中的 bank.csv 文件。

  1. > bank <- read.csv(file="bank.csv", sep=";")
  2. > bank[1:3,]
  3. age job marital education default balance housing loan contact day
  4. 1 30 unemployed married primary no 1787 no no cellular 19
  5. 2 33 services married secondary no 4789 yes yes cellular 11
  6. 3 35 management single tertiary no 1350 yes no cellular 16
  7. month duration campaign pdays previous poutcome y
  8. 1 oct 79 1 -1 0 unknown no
  9. 2 may 220 1 339 4 failure no
  10. 3 apr 185 1 330 1 failure no

下面是计算 age 列均值的示例:

  1. > mean(bank$age)
  2. 41.1701

median 函数

R 语言 stats 包中的 median 函数用来计算样本的中位数。该函数接受一个数值向量 x,以及一个逻辑值 na.rm 用来设置在计算中位数之前是否去除 NA 值。该函数的语法如下:

  1. median(x, na.rm = FALSE, ...)

下面是使用该函数的两个例子:

  1. > median(3:5)
  2. 4
  3. > median(c(3:5, 50, 150))
  4. [1] 5

现在我们可以计算银行数据中 age 列的中位数:

  1. > median(bank$age)
  2. 39

pair 函数

pair 函数用来合并两个向量,接受向量 x 和向量 y 两个参数。x 和 y 的长度必须相等。

  1. Pair(x, y)

该函数返回一个 Pair 类的列数为 2 的矩阵,示例如下:

  1. > Pair(c(1,2,3), c(4,5,6))
  2. x y
  3. [1,] 1 4
  4. [2,] 2 5
  5. [3,] 3 6
  6. attr(,"class")
  7. [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 列距离矩阵的示例:

  1. > dist(bank$age, method="euclidean", diag=FALSE, upper=FALSE, p=2)
  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
  3. 2 3
  4. 3 5 2
  5. 4 0 3 5
  6. 5 29 26 24 29
  7. 6 5 2 0 5 24
  8. 7 6 3 1 6 23 1
  9. 8 9 6 4 9 20 4 3
  10. 9 11 8 6 11 18 6 5 2
  11. 10 13 10 8 13 16 8 7 4 2
  12. 11 9 6 4 9 20 4 3 0 2 4
  13. 12 13 10 8 13 16 8 7 4 2 0 4
  14. 13 6 3 1 6 23 1 0 3 5 7 3 7
  15. 14 10 13 15 10 39 15 16 19 21 23 19 23 16
  16. 15 1 2 4 1 28 4 5 8 10 12 8 12 5 11
  17. 16 10 7 5 10 19 5 4 1 1 3 1 3 4 20 9
  18. 17 26 23 21 26 3 21 20 17 15 13 17 13 20 36 25 16
  19. 18 7 4 2 7 22 2 1 2 4 6 2 6 1 17 6 3 19
  20. 19 5 8 10 5 34 10 11 14 16 18 14 18 11 5 6 15 31 12
  21. 20 1 2 4 1 28 4 5 8 10 12 8 12 5 11 0 9 25 6 6
  22. 21 8 5 3 8 21 3 2 1 3 5 1 5 2 18 7 2 18 1 13 7
  23. 22 12 9 7 12 17 7 6 3 1 1 3 1 6 22 11 2 14 5 17 11 4
  24. 23 14 11 9 14 15 9 8 5 3 1 5 1 8 24 13 4 12 7 19 13 6 2
  25. 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
  26. ...

改用二进制距离的计算结果如下:

  1. > dist(bank$age, method="binary", diag=FALSE, upper=FALSE, p=2)
  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 28
  3. 2 0
  4. 3 0 0
  5. 4 0 0 0
  6. 5 0 0 0 0
  7. 6 0 0 0 0 0
  8. 7 0 0 0 0 0 0
  9. 8 0 0 0 0 0 0 0
  10. 9 0 0 0 0 0 0 0 0
  11. 10 0 0 0 0 0 0 0 0 0
  12. 11 0 0 0 0 0 0 0 0 0 0
  13. 12 0 0 0 0 0 0 0 0 0 0 0
  14. 13 0 0 0 0 0 0 0 0 0 0 0 0
  15. 14 0 0 0 0 0 0 0 0 0 0 0 0 0
  16. 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  17. 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  18. 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  19. 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  20. 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  21. 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  22. 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  23. 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  24. 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  25. 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 对应最大观测值。该函数的语法如下:

  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))
  2. 0% 25% 50% 75% 100%
  3. -1.978171612 -0.746829079 -0.009440368 0.698271134 1.897942805

下面是生成银行年龄数据对应概率下的分位数的示例:

  1. > quantile(bank$age, probs = c(0.1, 0.5, 1, 2, 5, 10, 50)/100)
  2. 0.1% 0.5% 1% 2% 5% 10% 50%
  3. 20.0 22.6 24.0 25.0 27.0 29.0 39.0

IQR 函数

IQR 函数用于计算向量中数值的 四分位距(interquartile range)。其语法如下:

  1. IQR(x, na.rm = FALSE, type = 7)

参数 type 指定了一个整数以选择分位数算法,该算法在 Hyndman and Fan (1996)🔗 www.amherst.edu 中进行了讨论。下面是计算银行年龄四分位距的示例:

  1. > IQR(bank$age, na.rm = FALSE, type=7)
  2. 16

sd 函数

sd 函数用来计算一组数值中的标准差。该函数接受一个 数值向量(numeric vector) x 和一个逻辑值 na.rmna.rm 用来设置在计算时是否忽略缺失值。该函数的语法如下:

  1. sd(x, na.rm = FALSE)

对于长度为 0 或 1 的向量,该函数返回 NA。下面是两个例子:

  1. > sd(1:10)
  2. 3.02765
  3. > sd(1)
  4. NA

下面是计算 age 列标准差的示例:

  1. > sd(bank$age)
  2. 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中国 荣誉推出

LCTT 译者 :TAN Long
🌟🌟
翻译: 5.0 篇
|
贡献: 701 天
2021-07-15
2023-06-16
https://linux.cn/lctt/tanloong
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Rust 基础系列 #5: Rust 中的函数 | Linux 中国在 Linux 上用 Kdenlive 编辑视频 | Linux 中国Linux 中的模糊文件搜索 | Linux 中国如何在 Rocky Linux 9 / AlmaLinux 9 上安装 KVM | Linux 中国变化Voyager Linux 23.04:具有华丽外观且无 Snap 的 Ubuntu 体验 | Linux 中国8 款最佳的 Linux 远程桌面工具 | Linux 中国GDB 调试器如何通过调用帧信息来确定函数调用关系 | Linux 中国超越 Bash: 9 个不太知名的 Linux Shell 及其功能 | Linux 中国如何在 Ubuntu 和其他 Linux 发行版中查看 AVIF 图像 | Linux 中国看樱花Reminders:一个漂亮的开源 Linux 应用,可帮助你完成工作 | Linux 中国5 个最漂亮的 Arch Linux 发行版 | Linux 中国11 个不可变 Linux 发行版,适合那些想要拥抱未来的人们 | Linux 中国7 个超轻量级 Linux 发行版 | Linux 中国Large函数还可以这样玩?这个90%的人不知道的统计函数也太牛了!巴黎市长将重修Châtelet 广场以方便行人OpenAI重磅更新,又变强了!API有了恐怖的函数调用能力,能处理更长上下文,价格还又降了75%!使用 ChatGPT AI 从英文文本生成 Linux 命令 | Linux 中国留美中医博士10 个最佳 Linux 虚拟化软件 | Linux 中国Kali Linux 简介:你需要了解的一切 | Linux 中国Excel中唯一无法被替代的函数,90%的人都不知道!90%的人不知道!这个自动生成随机数的函数太好用了!risiOS:一个易于使用的基于 Fedora 的 Linux 发行版 | Linux 中国使用 Linux 让旧电脑焕发新颜 | Linux 中国【城事】巴黎市长将重修Châtelet 广场以方便行人终端基础:在 Linux 中删除文件和文件夹 | Linux 中国Alpine Linux 3.18 发布 | Linux 中国Linux 版 WhatsApp | Linux 中国玻璃缸里的孙凤 (10)测评适用于 Linux 中 Wayland 的最佳屏幕录制软件 | Linux 中国如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹 | Linux 中国关键是如何计算多普勒效应如何入门 Linux Shell 脚本编写 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。