講義範例來自R基本實作秘訣速查表,搭配參考Rstudio視覺介面以及Rmarkdown秘訣速查表

預先載入套件

一份Rmarkdown文件經常使用非內建套件(package)的函式(function)與資料,為了能在文件內正常使用這些套件的函式,建議方式是在R markdown的第一個chunk載入。這段文字之後的setup chunk,渲染後(Knit)不會在輸出文件顯示chunk內的程式碼,你可以從源始Rmarkdown檔檢視安裝及載入套件的程式碼。

使用內建套件

載入內建資料:“iris”是經典生物統計資料集,常用於各式統計方法及程式測試。資料集介紹請見維基百科條目:安德森鳶尾花卉數據集

data(iris)
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa

iris 資料有五個變項。

查詢使用說明

在console視窗輸入以下任何查詢指令,可開啟函式或套件的說明文件。

?mean  ## 取得函式的說明文件
help.search('weightedmean')  ## 以關鍵詞查詢有weightedmean函式的套件說明文件
help(package ='dplyr')  ## 關鍵詞查詢說明文件

查詢資料物件性質

資料與函式在R環境通稱“物件”(Objects),物件有兩種性質:形態(class)與資料結構(structure)。R環境設資料物件形態有數值(value)、向量(vector)、矩陣(matrix)、資料框架(data frame)、以及列表(List)。每種型態都有指定的資料結構,依照資料結構建立的資料物件,才能輸入函式,執行計算、資料整頓等工作。

class(iris) ## 顯示物件型態
## [1] "data.frame"
str(iris)   ## 顯示物作型態與資料結果
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

工作目錄

  1. 在console視窗執行getwd()
  2. 在Rstudio切換Files視窗,點擊右上角Rstudio logo。

  1. 在Rmarkdown文件內編輯的程式碼,工作目錄是文件存檔的資料夾路徑。

存取資料

資料檔可存放於工作目錄之外的資料夾路徑,未處理的資料建議以csv格式存檔。

讀取資料檔

如果要使用之前儲存的映像檔(RData),建議在文件第一個chunk setup執行匯入load()

讀取前確認資料檔第一列(row)為欄位標題,才能獲得如範例的執行效果。 以五大人格測驗資料為例:

# 讀取格式化分欄的純文字檔
big5_01 <- read.table(file = "../data/5factor.txt", header = TRUE)
head(big5_01)
##   subj_id        O   C        E        A     N
## 1     S01 4.428571 4.5 3.333333 5.142857 1.625
## 2     S02 5.714286 2.9 3.222222 3.000000 2.625
## 3     S03 5.142857 2.8 6.000000 3.571429 2.500
## 4     S04 3.142857 5.2 1.333333 1.571429 3.125
## 5     S05 5.428571 4.4 2.444444 4.714286 1.625
## 6     S06 4.428571 2.2 3.111111 4.571429 4.000
# 讀取逗號分欄的純文字檔
big5_02 <- read.csv(file = "../data/5factor.csv")
head(big5_02)
##   subj_id        O   C        E        A     N
## 1     S01 4.428571 4.5 3.333333 5.142857 1.625
## 2     S02 5.714286 2.9 3.222222 3.000000 2.625
## 3     S03 5.142857 2.8 6.000000 3.571429 2.500
## 4     S04 3.142857 5.2 1.333333 1.571429 3.125
## 5     S05 5.428571 4.4 2.444444 4.714286 1.625
## 6     S06 4.428571 2.2 3.111111 4.571429 4.000

寫入資料檔

存放資料檔格式以有分欄的純文字檔優先考慮,有其他格式或需儲存檔案太多,再考慮以映像檔(RData)儲存。

## 建議增加參數row.names = FALSE
## 寫入格式化分欄的純文字檔
write.table(head(big5_01), file = "big5_head.txt",row.names = FALSE)
## 寫入逗號分欄的純文字檔
write.csv(head(big5_02), file = "big5_head.csv",row.names = FALSE)

檢視及建立物件

  1. 在console視窗執行ls(),列印已存物件名稱。
  2. 在Rstudio切換Environment視窗,查看已存物件清單。
  1. 移除指定物件:在console視窗,或程式碼腳本,執行rm(x)(x代表任何已存物件)。
  2. 移除全部物件:在console視窗,或程式碼腳本,執行rm(list = ls())
  3. 在Rstudio主選單選擇“Session -> Restart R and Clear Output”,清除所有已存物件及已載入套件。

## 指派數值
a <- "apple"
## 建立函式
square <- function(x){
  squared = x*x
  return(squared)
}
## 檢視函式執行效果
square(7)
## [1] 49

向量

定義:一維資料結構~只用一套數值/向量索引資料內數值的結構。

建立向量的各種方法:

x1 <- c(2,4,6)              #直接列出數值
x2 <- 2:6                   #製造連續數值
x3 <- seq(2, 3, by = 0.5)   #製造連續數值
x4 <- rep(1:2, times=3)     #製造重覆數值
names(x2) <- c("apple","banana","orange","lemon","papaja") #為數值命名

向量運算函式

資料表內一個欄位就是一個向量,內建運算函式能檢視向量內數值狀態:

sort(x4)   # 回傳排序的數值 
## [1] 1 1 1 2 2 2
rev(x4)    # 顛倒數值順序 
## [1] 2 1 2 1 2 1
table(x4)  # 表列數值次數
## x4
## 1 2 
## 3 3
unique(x4) # 查看數值種類
## [1] 1 2

索引向量內數值

資料處理與運算經常要由向量內取出部分數值,善用索引技巧能事半功倍。

  • 位置索引
x2[4]      # 第四位數值
## lemon 
##     5
x2[-4]     # 第四位之外的數值
##  apple banana orange papaja 
##      2      3      4      6
x2[2:4]    # 第二到第四位數值
## banana orange  lemon 
##      3      4      5
x2[-(2:4)]  # 第二到第四位之外的數值
##  apple papaja 
##      2      6
x2[c(1,5)]  # 第一位和第五位數值
##  apple papaja 
##      2      6
  • 數值索引
x3[x3==3]            # 等於3的數值
## [1] 3
x3[which(x3==3)]     # 等於3的數值
## [1] 3
x3[x3<3]             # 小於3的數值
## [1] 2.0 2.5
x3[x3 %in% c(1,2,5)] # 符合集合{1, 2, 5}的數值
## [1] 2
  • 命名索引
x2['apple']          # 命名是'apple'的數值
## apple 
##     2

向量的物件型態

向量的型態可以是邏輯值(logical), 整數或浮點數(numeric), 字符或字串(character), 以及因子(factor)。型態之間能用as.函式系列互相轉換,初次建立物件的R判斷順序是“logical -> numeric -> character -> factor”。

as.logical() TRUE, FALSE, TRUE
as.numeric() 1, 0, 1
as.character() 1, 0, 1 測試console內執行
as.factor() 1, 0, 1 測試console內執行

迴圈與迭代

比對數值

廻圈與函式需要透過“比對”,設定執行程式碼的條件:

功能 程式碼範例
等於 a==b
不等於 a!=b
大於 a>b
小於 a<b
大於或等於 a>=b
小於或等於 a<=b
等於 NA is.na(a)
等於 null is.null(a)

只要兩項物件資料結構相同,都能比對!

  • 善用迴圈與迭代,能簡化需要多次執行的程式碼。

for

x <- 1:4

for (i in x) {
  j <- i + 10
  print(j)
}
## [1] 11
## [1] 12
## [1] 13
## [1] 14

while

i <- 2

while (i < 5) {
  print(i)
  i <- i + 1
}
## [1] 2
## [1] 3
## [1] 4

if-else

i <- 2

if (i > 3) {
  print('Yes')
} else {
  print('No')
}
## [1] "No"

function

square <- function(x){
  squared = x*x
  return(squared)
}

square(7)
## [1] 49
square(13)
## [1] 169
  • for, while, if-else 需要在執行前先建立物件
  • function在建立物件前要完成

二維以上的資料結構

定義:需要使用兩套數值/向量索引資料內數值的結構。

矩陣

對角矩陣做範例:

m <- matrix(c(1:3,c(2,1,6),c(3,6,1)),nc=3)
m
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    2    1    6
## [3,]    3    6    1
n <- 0:2
n
## [1] 0 1 2

索引矩陣內數值

m[2,] ## 取得第2列數值
## [1] 2 1 6
m[,1] ## 取得第1欄數值
## [1] 1 2 3
m[2,3] ## 取得第 2 列第 3 欄數值
## [1] 6

矩陣運算

t(m) ## 轉置矩陣
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    2    1    6
## [3,]    3    6    1
m %*% n ## 矩陣內積
##      [,1]
## [1,]    8
## [2,]   13
## [3,]    8
solve(m,n) ## 解聯立方程式, m必須是對角矩陣
## [1]  1.4166667 -0.3333333 -0.2500000

字串

定義:由兩個以上字符組合的資料。例如姓名~ John, Rebeca

字串可以是向量數值,例如問卷選項。依處理需要,經常會合併、分割或取代字串內容。

x <- c("Donald", "Trump")
y <- c("Joe","Biden")
paste(x,y,sep = "")
## [1] "DonaldJoe"  "TrumpBiden"
paste(x, collapse ='')
## [1] "DonaldTrump"
grep(pattern="D", x)
## [1] 1
toupper(x)
## [1] "DONALD" "TRUMP"
tolower(x)
## [1] "donald" "trump"
nchar(x)
## [1] 6 5

資料框架

定義: 包含至少一筆數值數量相同的向量

df <- data.frame(x = 1:10, y = letters[1:10])
df$x     ## 索引x欄位數值
##  [1]  1  2  3  4  5  6  7  8  9 10
df[[2]]  ## 索引第2欄數值
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
df[,2]   ## 索引第2欄數值
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
df[2,]   ## 索引第2列數值
##   x y
## 2 2 b
df[2,2]  ## 索引第2欄,第2列數值
## [1] "b"
head(df) ## 列印首6列數值
##   x y
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 d
## 5 5 e
## 6 6 f
tail(df)
##     x y
## 5   5 e
## 6   6 f
## 7   7 g
## 8   8 h
## 9   9 i
## 10 10 j

有需要時,資料框架能依欄或依列合併其他物件。

z <- runif(10)  ## 製造新欄位資料
d <- c(11,letters[11],runif(1))  ## 製造新列資料
df = cbind(df,z)
df
##     x y           z
## 1   1 a 0.263787938
## 2   2 b 0.890226405
## 3   3 c 0.726580267
## 4   4 d 0.641465773
## 5   5 e 0.009535941
## 6   6 f 0.252358800
## 7   7 g 0.151483895
## 8   8 h 0.340676893
## 9   9 i 0.550592119
## 10 10 j 0.925533424
df = rbind(df,d)
df
##     x y                   z
## 1   1 a   0.263787937816232
## 2   2 b   0.890226404881105
## 3   3 c   0.726580267073587
## 4   4 d   0.641465773107484
## 5   5 e 0.00953594082966447
## 6   6 f   0.252358800265938
## 7   7 g   0.151483895257115
## 8   8 h    0.34067689278163
## 9   9 i   0.550592118874192
## 10 10 j   0.925533423898742
## 11 11 k   0.769426781916991

因子

定義: 索引資料框架的欄位,統計函式必須使用因子分組資料。

x<-rep(1:4,each=25) 
factor(x)  ## 將向量轉換成因子,設定層次(levels)及層次順序
##   [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
##  [38] 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
##  [75] 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## Levels: 1 2 3 4
x<-1:100
cut(x,4)   ## 指定切割區間數,將向量轉換成因子
##   [1] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8]
##   [6] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8]
##  [11] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8]
##  [16] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8]
##  [21] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8] (0.901,25.8]
##  [26] (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5] 
##  [31] (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5] 
##  [36] (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5] 
##  [41] (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5] 
##  [46] (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5]  (25.8,50.5] 
##  [51] (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2] 
##  [56] (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2] 
##  [61] (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2] 
##  [66] (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2] 
##  [71] (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2]  (50.5,75.2] 
##  [76] (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]  
##  [81] (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]  
##  [86] (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]  
##  [91] (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]  
##  [96] (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]   (75.2,100]  
## Levels: (0.901,25.8] (25.8,50.5] (50.5,75.2] (75.2,100]
df <- data.frame(y = sample(1:16,size = 100,replace = TRUE), x = as.factor(rep(1:4,each=25)) )
plot(y ~ x,data=df)

列表

定義: 集合型態及數量不一致的資料

l<-list(x= 1:5,
        y= c('a','b'),
        z= df)

l[[2]]      ## 取得第二個物件數值 
## [1] "a" "b"
l[3]        ## 取得列表第三個物件名稱與數值
## $z
##      y x
## 1    7 1
## 2    9 1
## 3    9 1
## 4    3 1
## 5    3 1
## 6    6 1
## 7    4 1
## 8   13 1
## 9   14 1
## 10   4 1
## 11   9 1
## 12   9 1
## 13  12 1
## 14   5 1
## 15  11 1
## 16  15 1
## 17   2 1
## 18  10 1
## 19  11 1
## 20   1 1
## 21  11 1
## 22  15 1
## 23   9 1
## 24   3 1
## 25  10 1
## 26   9 2
## 27  11 2
## 28  14 2
## 29  10 2
## 30   9 2
## 31   7 2
## 32   9 2
## 33   7 2
## 34  11 2
## 35   7 2
## 36   9 2
## 37   8 2
## 38  16 2
## 39  10 2
## 40   4 2
## 41   4 2
## 42  14 2
## 43  13 2
## 44   6 2
## 45  16 2
## 46  16 2
## 47  10 2
## 48  15 2
## 49  16 2
## 50   1 2
## 51   5 3
## 52  11 3
## 53  15 3
## 54   3 3
## 55   4 3
## 56   8 3
## 57   5 3
## 58  10 3
## 59   8 3
## 60   9 3
## 61   4 3
## 62   1 3
## 63  13 3
## 64   1 3
## 65   7 3
## 66  14 3
## 67  11 3
## 68   5 3
## 69  16 3
## 70   2 3
## 71  13 3
## 72   9 3
## 73   8 3
## 74  10 3
## 75   1 3
## 76  11 4
## 77   3 4
## 78  15 4
## 79  12 4
## 80   3 4
## 81   7 4
## 82  15 4
## 83  16 4
## 84   9 4
## 85  11 4
## 86  10 4
## 87  10 4
## 88  11 4
## 89  15 4
## 90   7 4
## 91   7 4
## 92  14 4
## 93   5 4
## 94  10 4
## 95   5 4
## 96  16 4
## 97   8 4
## 98  14 4
## 99  14 4
## 100  6 4
l$x         ## 取得列表x物件數值
## [1] 1 2 3 4 5
l['z']      ## 取得列表z物件名稱與數值
## $z
##      y x
## 1    7 1
## 2    9 1
## 3    9 1
## 4    3 1
## 5    3 1
## 6    6 1
## 7    4 1
## 8   13 1
## 9   14 1
## 10   4 1
## 11   9 1
## 12   9 1
## 13  12 1
## 14   5 1
## 15  11 1
## 16  15 1
## 17   2 1
## 18  10 1
## 19  11 1
## 20   1 1
## 21  11 1
## 22  15 1
## 23   9 1
## 24   3 1
## 25  10 1
## 26   9 2
## 27  11 2
## 28  14 2
## 29  10 2
## 30   9 2
## 31   7 2
## 32   9 2
## 33   7 2
## 34  11 2
## 35   7 2
## 36   9 2
## 37   8 2
## 38  16 2
## 39  10 2
## 40   4 2
## 41   4 2
## 42  14 2
## 43  13 2
## 44   6 2
## 45  16 2
## 46  16 2
## 47  10 2
## 48  15 2
## 49  16 2
## 50   1 2
## 51   5 3
## 52  11 3
## 53  15 3
## 54   3 3
## 55   4 3
## 56   8 3
## 57   5 3
## 58  10 3
## 59   8 3
## 60   9 3
## 61   4 3
## 62   1 3
## 63  13 3
## 64   1 3
## 65   7 3
## 66  14 3
## 67  11 3
## 68   5 3
## 69  16 3
## 70   2 3
## 71  13 3
## 72   9 3
## 73   8 3
## 74  10 3
## 75   1 3
## 76  11 4
## 77   3 4
## 78  15 4
## 79  12 4
## 80   3 4
## 81   7 4
## 82  15 4
## 83  16 4
## 84   9 4
## 85  11 4
## 86  10 4
## 87  10 4
## 88  11 4
## 89  15 4
## 90   7 4
## 91   7 4
## 92  14 4
## 93   5 4
## 94  10 4
## 95   5 4
## 96  16 4
## 97   8 4
## 98  14 4
## 99  14 4
## 100  6 4

常用內建函式

數學運算函式

有至少一個欄位的資料,使用數學運算函式能做簡單統計。

x <- runif(10)
y <- rnorm(10)

log(x)            ##自然對數  
##  [1] -2.2098940 -1.4485347 -1.2754271 -0.3863455 -0.9332931 -0.3900075
##  [7] -0.9000852 -0.8343352 -0.2740980 -0.1494294
exp(x)            ##自然指數  
##  [1] 1.115957 1.264800 1.322219 1.972961 1.481798 1.968067 1.501606 1.543670
##  [9] 2.138827 2.365996
max(x)            ##最大值
## [1] 0.8611993
min(x)            ##最小值
## [1] 0.1097123
round(exp(x), 2)  ##顯示數值到小數點第2位
##  [1] 1.12 1.26 1.32 1.97 1.48 1.97 1.50 1.54 2.14 2.37
signif(log(x), 3) ##小數點第3位起簡寫數值
##  [1] -2.210 -1.450 -1.280 -0.386 -0.933 -0.390 -0.900 -0.834 -0.274 -0.149
quantile(x)       ##百分位數
##        0%       25%       50%       75%      100% 
## 0.1097123 0.3077979 0.4203490 0.6789147 0.8611993
rank(x)           ##次序位數
##  [1]  1  2  3  8  4  7  5  6  9 10
sum(x)            ##總和  
## [1] 4.835937
mean(x)           ##平均
## [1] 0.4835937
median(x)         ##中位數
## [1] 0.420349
var(x)            ##樣本變異數
## [1] 0.06165004
sd(x)             ##樣本標準差
## [1] 0.2482943
cor(x,y)          ##相關
## [1] 0.01682948

統計函式

預設內建統計函式已經涵蓋基礎統計方法

prop.test(x,seq(10,100,by=10))   ## 分組平均比例顯著性考驗
## Warning in prop.test(x, seq(10, 100, by = 10)): Chi-squared approximation may be
## incorrect
## 
##  10-sample test for equality of proportions without continuity
##  correction
## 
## data:  x out of seq(10, 100, by = 10)
## X-squared = 0.55949, df = 9, p-value = 1
## alternative hypothesis: two.sided
## sample estimates:
##      prop 1      prop 2      prop 3      prop 4      prop 5      prop 6 
## 0.010971227 0.011745712 0.009310388 0.016988392 0.007865131 0.011284197 
##      prop 7      prop 8      prop 9     prop 10 
## 0.005807643 0.005427038 0.008447306 0.008611993
t.test(x,y)                      ## 獨立分組平均數 t檢定
## 
##  Welch Two Sample t-test
## 
## data:  x and y
## t = 1.5587, df = 9.9596, p-value = 0.1503
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.2337581  1.3202625
## sample estimates:
##  mean of x  mean of y 
##  0.4835937 -0.0596585
group <- factor(rep(c("a","b","c"),c(3,3,4) ))
pairwise.t.test(x,group)    ## 計算t檢定的相依樣本變數相關性
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  x and group 
## 
##   a     b    
## b 0.076 -    
## c 0.063 0.821
## 
## P value adjustment method: holm
aov.1 <- aov(x~group)                ## 變異數分析
lm.1 <- lm(x~group)                 ## 線性模型
glm.1 <- glm(x~group)                ## 通用線性模型

summary(glm.1)                   ## 簡報變異數分析, 線性模型, 通用線性模型
## 
## Call:
## glm(formula = x ~ group)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -0.20900  -0.16060   0.04913   0.09563   0.24566  
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)   0.2080     0.1041   1.998   0.0859 .
## groupb        0.3753     0.1472   2.550   0.0381 *
## groupc        0.4076     0.1377   2.960   0.0211 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.03250139)
## 
##     Null deviance: 0.55485  on 9  degrees of freedom
## Residual deviance: 0.22751  on 7  degrees of freedom
## AIC: -1.4527
## 
## Number of Fisher Scoring iterations: 2

機率分佈函式

使用機率分佈函式製造符合假設的模擬資料,預覽研究設計的合理性與可執行程度。

##常態分佈
norm_data <- rnorm(100)   ## 製造隨機變數
pnorm(norm_data)          ## 累積機率函數
##   [1] 0.511818722 0.528197230 0.806257959 0.663110218 0.577459701 0.163710770
##   [7] 0.243985175 0.983917183 0.058142202 0.004315057 0.385448269 0.228004765
##  [13] 0.804911385 0.302604457 0.151559213 0.544692017 0.542362573 0.007197635
##  [19] 0.037259712 0.724940836 0.488882865 0.531323755 0.992170175 0.069239582
##  [25] 0.978199043 0.073253398 0.001973101 0.553173747 0.210628005 0.188412162
##  [31] 0.761909583 0.131724295 0.589672377 0.454968829 0.094633519 0.468221689
##  [37] 0.970285643 0.327576360 0.888312975 0.798949402 0.218118679 0.558900375
##  [43] 0.380713982 0.779811579 0.141196367 0.858054495 0.920942277 0.781069739
##  [49] 0.213405383 0.905578633 0.260644816 0.875675009 0.450664927 0.483139225
##  [55] 0.382430326 0.770389849 0.695413620 0.352796222 0.945055188 0.526267843
##  [61] 0.699129007 0.555892288 0.688561775 0.777178405 0.750814844 0.119140784
##  [67] 0.395385369 0.826755357 0.491371131 0.084368741 0.955318635 0.107745785
##  [73] 0.396795975 0.898234457 0.413503511 0.443954135 0.054459252 0.855430105
##  [79] 0.467491176 0.976216715 0.245624424 0.720841465 0.962893935 0.940897389
##  [85] 0.452361287 0.322529190 0.893556401 0.659931221 0.355857729 0.686593700
##  [91] 0.432687381 0.647718070 0.150522968 0.160366066 0.600580484 0.400344119
##  [97] 0.497175911 0.644863691 0.397514132 0.861568013
dnorm(norm_data)          ## 機率密度函數
##   [1] 0.398767202 0.397945375 0.274624702 0.365114265 0.391398554 0.246973790
##   [7] 0.313662466 0.040205072 0.116219905 0.012678518 0.382380938 0.302167345
##  [13] 0.275785100 0.349048651 0.234769594 0.396436315 0.396690979 0.019971598
##  [19] 0.081331984 0.333707256 0.398787372 0.397711924 0.021508965 0.133143537
##  [25] 0.052084173 0.139030294 0.006262715 0.395393332 0.288707035 0.269966665
##  [31] 0.309518577 0.213480334 0.388821271 0.396398095 0.168537761 0.397675937
##  [37] 0.067504114 0.361074408 0.190097210 0.280844157 0.294634854 0.394586276
##  [43] 0.380972959 0.296239021 0.223865960 0.224670000 0.147339264 0.295265605
##  [49] 0.290927399 0.168259124 0.324779415 0.205075926 0.395887876 0.398585928
##  [55] 0.381490187 0.303359795 0.350067534 0.371465901 0.111153572 0.398077181
##  [61] 0.348148273 0.395020559 0.353503737 0.298258989 0.317225924 0.199029068
##  [67] 0.385145842 0.256128747 0.398848958 0.154741291 0.094246039 0.185257130
##  [73] 0.385517508 0.177752123 0.389528290 0.394998942 0.110376249 0.227467083
##  [79] 0.397617014 0.056047512 0.314795073 0.336131852 0.081057824 0.117724335
##  [85] 0.396094559 0.358784915 0.183639645 0.366438694 0.372609881 0.354466119
##  [91] 0.393249965 0.371271255 0.233700210 0.243675503 0.386195033 0.386429562
##  [97] 0.398932285 0.372342580 0.385704744 0.220877218
qnorm(pnorm(norm_data))   ## 量數 = 隨機變數
##   [1]  0.02962948  0.07073893  0.86418898  0.42096647  0.19539900 -0.97932071
##   [7] -0.69354061  2.14234619 -1.57056208 -2.62636923 -0.29120239 -0.74543378
##  [13]  0.85929600 -0.51692443 -1.02976907  0.11226163  0.10638757 -2.44724563
##  [19] -1.78341100  0.59758282 -0.02787013  0.07859786  2.41675275 -1.48147830
##  [25]  2.01789773 -1.45198133 -2.88243056  0.13368394 -0.80424411 -0.88376270
##  [31]  0.71245861 -1.11827727  0.22670229 -0.11311718 -1.31275049 -0.07974084
##  [37]  1.88500833 -0.44661547  1.21760517  0.83787449 -0.77856270  0.14818186
##  [43] -0.30360615  0.77155701 -1.07495978  1.07161942  1.41143820  0.77581111
##  [49] -0.79466093  1.31401031 -0.64135874  1.15363466 -0.12398159 -0.04227629
##  [55] -0.29910406  0.74013134  0.51125464 -0.37778214  1.59868945  0.06589137
##  [61]  0.52189709  0.14056269  0.49177777  0.76269856  0.67705618 -1.17929289
##  [67] -0.26530990  0.94142075 -0.02163105 -1.37627186  1.69876893 -1.23860566
##  [73] -0.26164915  1.27155553 -0.21854176 -0.14095148 -1.60307315  1.06001057
##  [79] -0.08157793  1.98122032 -0.68832388  0.58534306  1.78530332  1.56235143
##  [85] -0.11969776 -0.46063795  1.24566557  0.41227543 -0.36955316  0.48621802
##  [91] -0.16953638  0.37916699 -1.03419302 -0.99295449  0.25484990 -0.25245650
##  [97] -0.00707900  0.37148998 -0.25978676  1.08739116

比照以上的示範,自由測試秘訣速查表列出的其他機率函式:卜瓦松分佈,二項分佈,均勻分佈。

繪圖函式

有上百筆資料時,視覺化是理解資料的最佳方式

plot(dnorm(norm_data)~norm_data)  ## 視覺化機率密度函數

plot(pnorm(norm_data)~qnorm(pnorm(norm_data)))  ## 視覺化累積機率函數

比照以上的示範,嘗試視覺化秘訣速查表列出的其他機率函式:卜瓦松分佈,二項分佈,均勻分佈。