r 資料分析的基本觀念 - opentech

9
5 R 資料分析的基本觀念 5-1 隨機取樣 玩過樂透彩的人都會認知到一個基本概念,就是每個號碼都是隨機出現 的。這裡的隨機其實背後有很大的學問,其中最重要的一個概念是每一個號碼 隨機出現的機率為何。若每一個號碼出現的機率都一樣就稱為均勻分佈 (uniform distribution)。使用 R 軟體以相同機率隨機產生從 1 n 範圍內的整數共 m 的指令是 sample(n,m)。預設的情況下,sample() 所產生的 m 個整數都不 同。若要允許產生相同的整數,必須加上 replace=TRUE 的參數設定,也就是 sample(n,m,replace=TRUE)replace=TRUE 可以理解成 " 可重覆 "完成圖 5-1 的練習。 5-1 sample() 的使用

Upload: others

Post on 07-Jun-2022

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: R 資料分析的基本觀念 - OPENTECH

5 R資料分析的基本觀念

5-1 隨機取樣

玩過樂透彩的人都會認知到一個基本概念,就是每個號碼都是隨機出現

的。這裡的隨機其實背後有很大的學問,其中最重要的一個概念是每一個號碼

隨機出現的機率為何。若每一個號碼出現的機率都一樣就稱為均勻分佈 (uniform

distribution)。使用 R軟體以相同機率隨機產生從 1到 n範圍內的整數共 m個

的指令是 sample(n,m)。預設的情況下,sample(…)所產生的 m個整數都不

同。若要允許產生相同的整數,必須加上 replace=TRUE的參數設定,也就是

sample(n,m,replace=TRUE)。replace=TRUE可以理解成 "可重覆 "。

完成圖 5-1的練習。

▲圖 5-1 sample(…)的使用

Page 2: R 資料分析的基本觀念 - OPENTECH

機器學習入門 -R 語言 

5-2 

sample(…)函數的第一個參數實際上可以想成是向量,sample(10,5)就是從向

量 1:10中隨機取出 5個。舉一反三,sample(x,5)就是從向量 x中隨機取出 5個,

若 x<−1:10,那麼就等同於執行 sample(10,5)。

sample(…)所使用的向量可由編程者自訂,這樣有很大的彈性。舉例來說,

若有一個樂透彩有 9個號碼 {88,99,66,77,55,44,33,22,11}可以簽注,每次會開 2個

不同號碼,那程式碼就可以如圖 5-2所示

▲圖 5-2 sample(…)的使用

前述概念稱為隨機取樣,隨機取樣在 R程式主要是應用在模擬 (simulation)

上。隨機取樣的應用除了從離散集合 (數字放在向量中 )中隨機取值之外,有時

也需要從一個連續區間取值,例如從 0.0到 1.0隨機取出 2個浮點數 (也就是有小

數點的數 )。R軟體提供隨機變數產生器 (random number generator)來應付這個需

求,例如 runif(5)就可以產生 5個介於 0與 1的均勻分佈隨機變數。runif(5)相當

於 runif(5,0,1),也就是將 0與 1也設定為參數,同理可推,runif(3,8,40)是產生 3

個介於 8到 40的均勻分佈隨機變數。

完成以下的練習。

x<-runif(5) #產生 5個介於 0到 1的隨機浮點數

x<-runif(5,0,1) #同上

x<-runif(3,8,40) #產生 3個介於 8到 40的隨機浮點數

Page 3: R 資料分析的基本觀念 - OPENTECH

第 5 章 R 資料分析的基本觀念

 5-3

▲圖 5-3 runif(5) 的使用

隨機變數產生器在產生隨機變數值時,都會需要給定一個亂數種子 (random

seed),相同的亂數種子可以產生相同的隨機變數值,若未設定種子值,則每次

產生的隨機值都會不一樣。set.seed(…)函數可以用來設定亂數種子,例如 set.

seed(100)就是設定亂數種子為 100。完成圖 5-4的練習。

▲圖 5-4 set.seed(…) 函式的使用

Page 4: R 資料分析的基本觀念 - OPENTECH

機器學習入門 -R 語言 

5-4 

隨機產生的數值除了可以是均質機率分佈之外,也可以是常態分佈。rnorm(5)

可以隨機產生 5個標準常態分佈的隨機變數值,rnorm(5)相當於 rnorm(5,0,1),這

裡的 0為常態分佈的平均值,而 1為標準差。同理可推,norm(5,4,8)會產生 5個

平均值為 4,標準差為 8的常態分佈隨機變數值。完成圖 5-5的練習:

▲圖 5-5 rnorm(…)函式的使用

set.seed (…)所引入做為亂數種子的參數必須是一個正整數,至於該正整數的

數值是多少並不是重點。重點是在產生隨機數之前,若設定的正整數是相同的,

呼叫相同的隨機數產生器就會產生相同的亂數值。設定亂數種子值能確保程式每

次執行的結果都會相同,這在程式的開發與驗證上非常重要。完成圖 5-6的練習:

set.seed(200)

rnorm(n=100,mean=20,sd=10)

rnorm(10,20,10)

set.seed(200)

rnorm(n=10,mean=20,sd=10)

Page 5: R 資料分析的基本觀念 - OPENTECH

第 5 章 R 資料分析的基本觀念

 5-5

▲圖 5-6 rnorm(…)函式的使用

為了確定 rnorm(…)所產生的隨機值的確是常態分配,一個驗證方式就是產

生足夠的點,然後繪出各值出現次數之統計圖,也就是直方圖。hist(…)函數可以

繪出此一統計圖。完成圖 5-7的練習:

▲圖 5-7 hist(…)函式的練習

從繪出的圖很明顯可以看到,在 x=6附近所統計出來的數值出現最多次,因

為在呼叫 rnorm(⋯)函式時,平均值係設為 6,也就是 mean=6。

Page 6: R 資料分析的基本觀念 - OPENTECH

機器學習入門 -R 語言 

5-6 

5-2 摘要統計 (summary statistics)

摘要統計 (summary statistics)包含了多種基本敘述統計量,包括:

(1) 基本資訊:樣本數、總和

(2) 集中量數:平均數、中位數、眾數

(3) 離勢量數:變異數、標準差、最小值、最大值、四分位距 (第一四分位數、

第三四分位數等 )等等。

給定一個數列,也就是向量,可以使用mean(…)函數算出平均值,完成圖 5-8

的練習:

▲圖 5-8 mean(⋯)的使用

有時候數值資料有遺失值的情況,這時不應將其加入平均值計算,這時可以

在呼叫 mean(…)函數時加入 na.rm=TRUE,這裡的 na是 non-available的意思,

rm是 remove的意思,所以 na.rm=TRUE是將遺失值忽略,完成圖 5-9的練習:

y<-sample(1:10,size=10,replace=TRUE)

y[5] <-NA

y[10] <-NA

mean(y,na.rm=TRUE)

Page 7: R 資料分析的基本觀念 - OPENTECH

第 5 章 R 資料分析的基本觀念

 5-7

▲圖 5-9 NA保留字的使用

上述的練習中,指派敘述 <−的右邊的 NA是 R的保留字,表示缺值。

而 mean(y,na.rm=TRUE)其實只會取 8個有值的數值作平均數計算,因為有

rm=TRUE的設定。

weighted.mean(…)函數可以計算加權平均數,此函數需有 2個 vector,一個

是數值向量,一個是權重向量。它也可以設定引數 na.rm,若不給定,預設值為

TRUE,在計算平均值之前會將 NA移除掉;當 na.rm=FLASE,若 vector內有 NA

值,則此函數不會進行計算,而是直接回傳 NA。完成圖 5-10的練習:

▲圖 5-10 weighted.mean(…)函數的使用

Page 8: R 資料分析的基本觀念 - OPENTECH

機器學習入門 -R 語言 

5-8 

我們曾討論常態分配的平均值與標準差,給定一組數列 { x1 , x2 , …, xn },

這裡 n是資料記錄的筆數。平均值意義很清楚,以 x代表平均值,標準差可由變

異數 (variance)開根號取得,計算變異數的公式則為:

var( )

=−

−=∑ i

nix x

n1

2

1

x in xi n= =∑( ) /1

在 R中,sd (…)函數可以計算出標準差,var (…)函數可以計算出變異數。

我們可以使用上述 2個式子算出變異數,然後驗證兩者是否相同。完成圖 5-11的

練習:

x<-rnorm(50,10,2)

var(x)

mean_x<-mean(x)

sumOfSqu<-sum((x-mean_x)^2)

len_x<-length(x)-1 #資料記錄筆數

var_x<-sumOfSqu/len_x #以公式計算變異數

sqrt(var(x)) #標準差是變異數的開根號

sd(x) #呼叫 sd(…)功能,驗證標準差是否相同

▲圖 5-11 sd(…)函數與 var(…)函數的使用

Page 9: R 資料分析的基本觀念 - OPENTECH

第 5 章 R 資料分析的基本觀念

 5-9

常用的摘要統計量函數中,min(…)可以計算最小值,max(…)可以計算最

大值,median(…)可以計算中位數。quantile(…)函數則可以計算百分比位,例如

quantile(data,0.25)可以求出向量 data第 25百分位數,也就是第 1個四分位數。

quantile(data,probs=c(0.25,0.75)則可以一次計算出第 25個及第 75個百分位數

(percentile),也就是第 1個及第 3個四分位數。另外,summary(…)函數可以一次

計算最小值、第 1個四分位數 (1st Qu.)、中位數、平均數、第 3個四分位數及最

大值。完成圖 5-12的練習:

▲圖 5-12 summary(…)函式的使用