關卡 1

探索性資料分析(ExploratoryDataAnalysis,EDA)是資料分析的第一步,包含檢查數據的正確性、掌握資料脈絡以規畫進階的分析策略等重要步驟。R提供了許多執行EDA的工具,主要分為兩部分(1).敘述統計;(2).統計圖表。

關卡 2

關於(1).敘述統計(Descriptive-Statistics),可以分為數值型變數與類別型變數兩部分。本教材將針對R對數值型變數的敘述性統計進行說明。

關卡 3

對於描述數值型變數的資料中心點,我們可以使用:mean計算向量的平均數、median計算向量的中位數、table+sort尋找眾數。

關卡 4

請同學輸入mean(x1)計算x1的平均數

mean(x1)

關卡 5

請同學輸入median(x1)計算x1的中位數

median(x1)

關卡 6

目前R沒有內建函數可以計算眾數。最簡單的方法是利用table+sort。請同學輸入table(x1)來看看x1各種值所出現個數。

table(x1)

關卡 7

從螢幕上的輸出,我們可以看到x1中包含:3個1、1個2、1個3、…、1個10。第一列代表向量元素的名稱,對應到x1中的值。第二列代表出現的次數。

關卡 8

根據table(x1)的輸出,x1的眾數為?

1

關卡 9

如果要取得眾數的值,我們可以使用:names(sort(-table(x1)))[1]但是這樣會讓結果變成字串型態。在StackOverflow這個網站中,有許多網友討論了如何更方便地計算眾數。有興趣的同學可以參考:http://stackoverflow.com/q/2547402/1182304

關卡 10

另外也有一個套件:modeest可以幫助我們計算眾數。有興趣的同學也可以自行摸索。

關卡 11

請同學計算分別計算x1,x2,x3與x4的平均數、中位數與眾數。

# 請同學計算x1的平均數
x1.mean <- local({
  # 請填寫你的程式碼
  mean(x1)
})

# 請同學計算x1的中位數
x1.median <- local({
  # 請填寫你的程式碼
  median(x1)
})

# 請同學計算x1的眾數
x1.mode <- local({
  # 請填寫你的程式碼
  1
})

# 請同學計算x2的平均數
x2.mean <- local({
  # 請填寫你的程式碼
  mean(x2)
})

# 請同學計算x2的中位數
x2.median <- local({
  # 請填寫你的程式碼
  median(x2)
})

# 請同學計算x2的眾數
x2.mode <- local({
  # 請填寫你的程式碼
  1
})

# 請同學計算x3的平均數
x3.mean <- local({
  # 請填寫你的程式碼
  mean(x3)
})

# 請同學計算x3的中位數
x3.median <- local({
  # 請填寫你的程式碼
  median(x3)
})

# 請同學計算x3的眾數
x3.mode <- local({
  # 請填寫你的程式碼
  100
})

x4.mean <- mean(x4)
x4.median <- median(x4)
x4.mode <- 2

關卡 12

為了方便比較,我們把同學計算出來的結果整理到變數answer_02之中。請同學看看該變數

answer_02

關卡 13

請問平均數(mean)、中位數(median)和眾數(mode),哪一個會受到極端觀測值的影響?(比較x1與x2的結果)或是全部都不會受到影響(none)

mean

關卡 14

由於平均數容易受到極端值所影響,實務上可以使用修剪平均(trimmedmean),譬如跳水比賽,有五個評審,最終評分會先刪除最高與最低的分數,再從三個實得分中取得平均。在R中可以使用參數trim來指定要刪減的資料比率。舉例來說,trim=0.2就會刪除前後20%的資料請同學輸入以下程式碼練習修剪平均mean(x2,trim=0.2)

mean(x2, trim=0.2)

關卡 15

請問資料變成原本的100倍後,平均數(mean)、中位數(median)和眾數(mode),哪一個的值不會變成原來的100倍?(比較x1與x3的結果)或是全部都會變成原本的100倍(all)

all

關卡 16

請問資料變成原本的值加1後,平均數(mean)、中位數(median)和眾數(mode),哪一個的值不會變成原來的加1?(比較x1與x4的結果)或是全部都會變成原本的值+1(all)

all

關卡 17

並不是所有度量資料中心的指標,經過線性轉換後都能夠保有相同結果。譬如冪平均(powermean)即是反例。我們熟知的調和平均數、幾何平均數就是冪平均的特例。有興趣的同學請參考:https://en.wikipedia.org/wiki/Generalized_mean

關卡 18

請同學利用prod(連乘)與^(開根號)兩個數學算子計算x1的幾何平均數。

prod(x1)^(1/length(x1))

關卡 19

計算幾何平均數還有一個小技巧:exp(mean(log(x1)))。因為log與exp互為反函數,所以我們可以聯想到廣義平均:F_inv(mean(F(x1))),其中F_inv是F的反函數。

關卡 20

接下來,我們介紹描述數值型變數分散程度的函數。

關卡 21

max(x1)可以計算x1的最大值,請同學試試看

max(x1)

關卡 22

min(x1)可以計算x1的最小值,請同學試試看

min(x1)

關卡 23

range(x1)可以計算x1的最大值和最小值,請同學試試看

range(x1)

關卡 24

diff則會計算一個數值向量,相鄰元素的差距(後減前)。搭配range即可計算x1的全距。請同學試試看。

diff(range(x1))

關卡 25

請同學計算x1,x2,x3與x4的最大值、最小值與全距

# 請同學計算x1的最大值
x1.max <- local({
  max(x1)
})


# 請同學計算x1的最小值
x1.min <- local({
  min(x1)
})

# 請同學計算x1的全距
x1.range <- local({
  diff(range(x1))
})

# 請同學計算x2的最大值
x2.max <- local({
  max(x2)
})


# 請同學計算x2的最小值
x2.min <- local({
  min(x2)
})

# 請同學計算x2的全距
x2.range <- local({
  diff(range(x2))
})

# 請同學計算x3的最大值
x3.max <- local({
  max(x3)
})


# 請同學計算x3的最小值
x3.min <- local({
  min(x3)
})

# 請同學計算x3的全距
x3.range <- local({
  diff(range(x3))
})

x4.min <- min(x4)
x4.max <- max(x4)
x4.range <- diff(range(x4))
# 請同學回到console輸入`submit()`檢查答案

關卡 26

我們把同學計算的結果整理到變數answer_03_01,請同學看看它

answer_03_01

關卡 27

請問同學,全距是不是會受到極端觀測值的影響?(比較x1與x2的結果)

Yes

關卡 28

請問同學,在資料放大100倍後,全距的值不會變成原來的100倍?(比較x1與x3的結果)

Yes

關卡 29

請問同學,在資料全部加1後,全距的值會不會改變?(比較x1與x4的結果)

No

關卡 30

abs可以計算向量的絕對值。mean可以計算平均值。所以mean(abs(x1-mean(x1)))就可以計算x1的平均差(MD)。請同學試試看

mean(abs(x1 - mean(x1)))

關卡 31

接著,請同學計算x1、x2和x3的平均差

# 請同學計算x1的全距
x1.MD <- local({
  # 請填寫你的程式碼
  mean(abs(x1 - mean(x1)))
})

# 請同學計算x2的全距
x2.MD <- local({
  # 請填寫你的程式碼
  mean(abs(x2 - mean(x2)))
})

# 請同學計算x3的全距
x3.MD <- local({
  # 請填寫你的程式碼
  mean(abs(x3 - mean(x3)))
})

x4.MD <- mean(abs(x4 - mean(x4)))

# 請同學回到console輸入`submit()`檢查答案

關卡 32

我們把同學計算的結果整理到變數answer_03_02,請同學看看它

answer_03_02

關卡 33

請問同學,平均差是不是會受到極端觀測值的影響?(比較x1與x2的結果)

Yes

關卡 34

請問同學,在資料放大100倍後,平均差的值不會變成原來的100倍?(比較x1與x3的結果)

Yes

關卡 35

請問同學,在資料全部加1後,平均差的值會不會改變?(比較x1與x4的結果)

No

關卡 36

同樣的要領,我們可以計算MAD(MedianAbsoluteDeviation)。請同學組合medianabs找出x1的MAD。

median(abs(x1 - median(x1)))

關卡 37

R也有提供內建函數計算MAD。請同學輸入?mad打開該函數的說明文件

?mad

關卡 38

請問下列哪一個不是mad的參數?

method

關卡 39

R的mad函數提供了一些彈性讓使用者設定。再說明之前,我們請同學先試試看:mad(x1)

mad(x1)

關卡 40

同學有沒有注意到,mad(x1)和我們先前用medianabs組合的計算結果不同。這是因為R的mad預設會使用一個常數(即mad的參數constant)來修正輸出結果。

關卡 41

根據Details的說明,如果利用神奇的1.4826乘上原本定義的MAD做修正。在某些條件下,修正後的MAD可以估計母體標準差。

關卡 42

請同學輸入:mad(x1,constant=1)來看看結果是不是2(我們之前自行計算的結果)

mad(x1, constant = 1)

關卡 43

接著請同學計算x1,x2,x3,x4的MAD

# 請同學計算x1的Median Absolute Deviation
x1.MAD <- local({
  # 請填寫你的程式碼
  mad(x1, constant = 1)
})

# 請同學計算x2的Median Absolute Deviation
x2.MAD <- local({
  # 請填寫你的程式碼
  mad(x2, constant = 1)
})

# 請同學計算x3的Median Absolute Deviation
x3.MAD <- local({
  # 請填寫你的程式碼
  mad(x3, constant = 1)
})

x4.MAD <- mad(x4, constant = 1)
# 請同學回到console輸入`submit()`檢查答案

關卡 44

我們把同學計算的結果整理到變數answer_03_03,請同學看看它

answer_03_03

關卡 45

請問同學,MAD是不是會受到極端觀測值的影響?(比較x1與x2的結果)

No

關卡 46

請問同學,在資料放大100倍後,MAD的值不會變成原來的100倍?(比較x1與x3的結果)

Yes

關卡 47

請問同學,在資料全部加1後,MAD的值會不會改變?(比較x1與x4的結果)

No

關卡 48

接著我們介紹如何計算百分位數

關卡 49

請同學先輸入?quantile看看這個函數的說明文件

?quantile

關卡 50

quantile函數的參數probs即代表我們要選取的百分位。舉例來說,25百分位數,probs參數就要設定為0.25。75百分位數,probs就設定為0.75

關卡 51

請問同學,probs的預設參數為何?

seq(0, 1, 0.25)

關卡 52

這裡複習一下seq函數。請問同學,seq(0,1,0.25)的長度會是多少?

5

關卡 53

由上述的說明,我們可以意識到,如果把一個向量放入probs參數,quantile函數就可以一次算出所有向量對應的百分位數

關卡 54

在說明文件中,Details的部分也有交代R實作的quantile算法細節。請問同學,如果要更換實作方式,要用哪一個參數做調整?

type

關卡 55

type參數一共有幾種設定呢?R實作了多少種quantile的算法?

9

關卡 56

請同學嘗試算出x1的四分位差(請用預設的type

diff(quantile(x1, probs = c(0.25, 0.75)))

關卡 57

R也提供了內建函數來直接計算四分位差。請同學輸入:?IQR看看說明文件

?IQR

關卡 58

請同學計算x1,x2,x3,x4的四分位差

# 請同學計算x1的四分位差
x1.IQR <- local({
  # 請填寫你的程式碼
  IQR(x1)
})

# 請同學計算x2的四分位差
x2.IQR <- local({
  # 請填寫你的程式碼
  IQR(x2)
})

# 請同學計算x3的四分位差
x3.IQR <- local({
  # 請填寫你的程式碼
  IQR(x3)
})

x4.IQR <- IQR(x4)

# 請同學回到console輸入`submit()`檢查答案

關卡 59

我們把同學計算的結果整理到變數answer_03_04,請同學看看它

answer_03_04

關卡 60

請問同學,四分位差是不是會受到極端觀測值的影響?(比較x1與x2的結果)

No

關卡 61

請問同學,在資料放大100倍後,四分位差的值不會變成原來的100倍?(比較x1與x3的結果)

Yes

關卡 62

請問同學,在資料全部加1後,四分位差的值會不會改變?(比較x1與x4的結果)

No

關卡 63

接下來我們介紹R內建計算變異數與標準差的函數。

關卡 64

請同學先輸入:?var看看計算變異數的說明文件

?var

關卡 65

請問var計算的是母體變異數,還是樣本變異數呢?請同學閱讀Details段落的第五段後,作答。A代表母體變異數、B代表樣本變異數

B

關卡 66

請同學直接輸入var(x1)計算x1的樣本變異數

var(x1)

關卡 67

請同學輸入?sd閱讀計算標準差的說明文件

?sd

關卡 68

請問同學,sd計算的是母體標準差,還是樣本標準差?請同學閱讀Details段落後作答。A代表母體標準差、B代表樣本標準差

B

關卡 69

請同學輸入sd(x1)計算x1的樣本標準差

sd(x1)

關卡 70

請同學計算x1,x2,x3,x4的樣本變異數與樣本標準差

# 請同學計算x1的樣本變異數
x1.var <- local({
  # 請填寫你的程式碼
  var(x1)
})

# 請同學計算x1的樣本標準差
x1.sd <- local({
  # 請填寫你的程式碼
  sd(x1)
})

# 請同學計算x2的樣本變異數
x2.var <- local({
  # 請填寫你的程式碼
  var(x2)
})

# 請同學計算x2的樣本標準差
x2.sd <- local({
  # 請填寫你的程式碼
  sd(x2)
})

# 請同學計算x3的樣本變異數
x3.var <- local({
  # 請填寫你的程式碼
  var(x3)
})

# 請同學計算x3的樣本標準差
x3.sd <- local({
  # 請填寫你的程式碼
  sd(x3)
})

x4.var <- var(x4)
x4.sd <- sd(x4)
# 請同學回到console輸入`submit()`檢查答案

關卡 71

我們把同學計算的結果整理到變數answer_03_05,請同學看看它

answer_03_05

關卡 72

請問同學,變異數是不是會受到極端觀測值的影響?(比較x1與x2的結果)

Yes

關卡 73

請問同學,在資料放大100倍後,變異數的值不會變成原來的100倍?(比較x1與x3的結果)

No

關卡 74

由於變異數帶有平方,所以當資料放大100倍之後,變異數應當要放大10000倍,也就是100的平方。

關卡 75

請問同學,在資料全部加1後,變異數的值會不會改變?(比較x1與x4的結果)

No

關卡 76

值得一提的是,變異數(或標準差)在加法性轉換時會改變,但是平均差(MAD)不變。

關卡 77

接著請同學利用sdmean兩個函數計算x1,x2,x3與x4的變異係數

# 請同學計算x1的變異係數
x1.CV <- local({
  # 請填寫你的程式碼
  sd(x1) / mean(x1)
})

# 請同學計算x2的變異係數
x2.CV <- local({
  # 請填寫你的程式碼
  sd(x2) / mean(x2)
})

# 請同學計算x3的變異係數
x3.CV <- local({
  # 請填寫你的程式碼
  sd(x3) / mean(x3)
})

# 請同學計算x4的變異係數
x4.CV <- local({
  # 請填寫你的程式碼
  sd(x4) / mean(x4)
})

# 請同學存檔後回到console輸入`submit()`檢查答案

關卡 78

我們把同學計算的結果整理到變數answer_03_06,請同學看看它

answer_03_06

關卡 79

請問同學,變異係數是不是會受到極端觀測值的影響?(比較x1與x2的結果)

Yes

關卡 80

請問同學,在資料放大100倍後,變異係數的值不會變成原來的100倍?(比較x1與x3的結果)

No

關卡 81

事實上,變異係數維持不變

關卡 82

請問同學,在資料平移後,變異係數的值會不會改變(比較x1與x4的結果)?

Yes

關卡 83

最後,我們請同學利用IQRmedian計算x1,x2,x3與x4的Quartilecoefficientofdispersion

# 請同學計算x1的Quartile coefficient of dispersion
x1.QCD <- local({
  # 請填寫你的程式碼
  IQR(x1) / median(x1)
})

# 請同學計算x2的Quartile coefficient of dispersion
x2.QCD <- local({
  # 請填寫你的程式碼
  IQR(x2) / median(x2)
})

# 請同學計算x3的Quartile coefficient of dispersion
x3.QCD <- local({
  # 請填寫你的程式碼
  IQR(x3) / median(x3)

})

# 請同學計算x4的Quartile coefficient of dispersion
x4.QCD <- local({
  # 請填寫你的程式碼
  IQR(x4) / median(x4)
})

# 請同學存檔後回到console輸入`submit()`檢查答案

關卡 84

我們把同學計算的結果整理到變數answer_03_07,請同學看看它

answer_03_07

關卡 85

請問同學,Quartilecoefficientofdispersion是不是會受到極端觀測值的影響?(比較x1與x2的結果)

No

關卡 86

請問同學,在資料放大100倍後,Quartilecoefficientofdispersion的值不會變成原來的100倍?(比較x1與x3的結果)

No

關卡 87

請問同學,在資料平移後,Quartilecoefficientofdispersion的值會不會改變(比較x1與x4的結果)?

Yes

關卡 88

我們將各種分散指標的特性:不受極端值影響(robustness)、不受數據等比例放大的影響(ratio.invariant)、會隨著數據等比例放大(ratio)與不會被數據同加同減影響(shift.invariant)整理到變數answer。請同學看一看

answer