R 語言 stats 包中的函數
我們已經學習了 R 語言的基礎知識,包括其語法以及語法所對應的語義,現在準備使用 R 向統計學領域進發。本文是 R 系列的第十一篇文章,我們將學習如何使用 R 語言 stats 包中提供的統計函數。
與此系列之前的文章一樣,我們將使用安裝在 Parabola GNU/Linux-libre(x86-64)上的 R 4.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)。 邏輯參數 (TRUE
或 FALSE
)na.rm
可以設置是否忽略空值(NA
)。該函數的語法如下:
mean(x, trim = 0, na.rm = FALSE, ...)
該函數支持數值、邏輯值、日期和 時間區間 。下面是使用 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 <- 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 檢驗等的 配對檢驗 。
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
列距離矩陣的示例:
> 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
函數接受以下參數:
參數 | 描述 |
---|---|
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 <- 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
函數用於計算向量中數值的 四分位距 。其語法如下:
IQR(x, na.rm = FALSE, type = 7)
參數 type
指定了一個整數以選擇分位數演算法,該演算法在 Hyndman and Fan (1996) 中進行了討論。下面是計算銀行年齡四分位距的示例:
> IQR(bank$age, na.rm = FALSE, type=7)
16
sd 函數
sd
函數用來計算一組數值中的標準差。該函數接受一個 數值向量 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: https://www.opensourceforu.com/2022/08/the-functions-in-the-r-stats-package/
作者:Shakthi Kannan 選題:lkxed 譯者:tanloong 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive