导读:我们将学习怎么使用R语言stats包中提供的统计函数。
本文字数:7561,阅读时长大概:9分钟
我们早已学习了R语言的基础知识,包括其句型以及句型所对应的语义,如今打算使用R向统计学领域进发。本文是R系列的第十一篇文章,我们将学习怎么使用R语言stats包中提供的统计函数。
与此系列之前的文章一样,我们将使用安装在ParabolaGNU/Linux-libre(x86-64)上的R4.1.2版本来运行文中的代码。
$ R --version
R version 4.1.2 (2021-11-01) -- "Bird Hippie"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: 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 the
GNU 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)。逻辑参数(logicalargument)(TRUE或FALSE)na.rm可以设置是否忽视空值(NA)。该函数的句型如下:
mean(x, trim = 0, na.rm = FALSE, ...)
该函数支持数值、逻辑值、日期和时间区间(timeintervals)。下边是使用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文件长春linux培训,我们使用read.csv()函数导出其中的bank.csv文件。
> bank <- read.csv(file="bank.csv", sep=";")
> bank[1:3,]
age job marital education default balance housing loan contact day
1 30 unemployed married primary no 1787 no no cellular 19
2 33 services married secondary no 4789 yes yes cellular 11
3 35 management single tertiary no 1350 yes no cellular 16
month duration campaign pdays previous poutcome y
1 oct 79 1 -1 0 unknown no
2 may 220 1 339 4 failure no
3 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 6
attr(,"class")
[1] "Pair"
该函数常用于像T检验和Wilcox检验等的配对检验(pairedtest)。
dist函数
dist函数拿来估算数据矩阵中各行之间的距离矩阵linux 随机数 函数,接受以下参数:
参数描述
数值矩阵
method
距离检测方式
diag
若为TRUE,则复印距离矩阵的对角线
upper
若为TRUE,则复印距离矩阵的上三角
闵可夫斯基距离的幂次(见下文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 25
2 3
3 5 2
4 0 3 5
5 29 26 24 29
6 5 2 0 5 24
7 6 3 1 6 23 1
8 9 6 4 9 20 4 3
9 11 8 6 11 18 6 5 2
10 13 10 8 13 16 8 7 4 2
11 9 6 4 9 20 4 3 0 2 4
12 13 10 8 13 16 8 7 4 2 0 4
13 6 3 1 6 23 1 0 3 5 7 3 7
14 10 13 15 10 39 15 16 19 21 23 19 23 16
15 1 2 4 1 28 4 5 8 10 12 8 12 5 11
16 10 7 5 10 19 5 4 1 1 3 1 3 4 20 9
17 26 23 21 26 3 21 20 17 15 13 17 13 20 36 25 16
18 7 4 2 7 22 2 1 2 4 6 2 6 1 17 6 3 19
19 5 8 10 5 34 10 11 14 16 18 14 18 11 5 6 15 31 12
20 1 2 4 1 28 4 5 8 10 12 8 12 5 11 0 9 25 6 6
21 8 5 3 8 21 3 2 1 3 5 1 5 2 18 7 2 18 1 13 7
22 12 9 7 12 17 7 6 3 1 1 3 1 6 22 11 2 14 5 17 11 4
23 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 28
2 0
3 0 0
4 0 0 0
5 0 0 0 0
6 0 0 0 0 0
7 0 0 0 0 0 0
8 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0
11 0 0 0 0 0 0 0 0 0 0
12 0 0 0 0 0 0 0 0 0 0 0
13 0 0 0 0 0 0 0 0 0 0 0 0
14 0 0 0 0 0 0 0 0 0 0 0 0 0
15 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
23 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函数接受以下参数:
参数描述
数值向量
probs
机率向量,取值为[0,1](LCTT评注:默认为(0,0.25,0.5,0.75,1))
na.rm
若为TRUE,忽视向量中的NA和NaN值
names
若为TRUElinux 随机数 函数,在结果中包含命名属性
type
整数类型美国linux主机,用于选择任意一个九种分位数算法(LCTT评注:默认为7)
digits
小数精度
…
传递给其他方式的额外参数
rnorm函数可用于生成正态分布的随机数。它可以接受要生成的观测值的数目n,一个均值向量以及一个标准差向量。下边是一个估算rnorm函数生成的随机数的四分位数的示例:
> quantile(x <- rnorm(100))
0% 25% 50% 75% 100%
-1.978171612 -0.746829079 -0.009440368 0.698271134 1.897942805
下边是生成建行年纪数据对应机率下的分位数的示例:
> 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函数用于估算向量中数值的四分位距(interquartilerange)。其句型如下:
IQR(x, na.rm = FALSE, type = 7)
参数type指定了一个整数以选择分位数算法,该算法在HyndmanandFan(1996)中进行了讨论。下边是估算建行年纪四分位距的示例:
> IQR(bank$age, na.rm = FALSE, type=7)
16
sd函数
sd函数拿来估算一组数值中的标准差。该函数接受一个数值向量(numericvector)x和一个逻辑值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:
作者:ShakthiKannan选题:lkxed译者:tanloong校对:wxy
本文由LCTT原创编译,Linux中国荣誉推出
LCTT译者:TANLong
翻译:5.0篇
贡献:701天