統 計 程 式 語 言
What is R? History and benefit
What is R? R was initially written by Ross Ihaka and Robert Gentleman. http://www.stat.auckland.ac.nz/~ihaka/ Robert Gentleman http://gentleman-lab.fhcrc.org/lab-members/rgentleman/ R Ihaka, R Gentleman (1996) R: A Language for Data Analysis and Graphics. JOURNAL OF COMPUTATIONAL AND GRAPHICAL STATISTICS. V5(3) 299-314. http://biostat.mc.vanderbilt.edu/twiki/pub/Main/JeffreyHorner/JCGSR.pdf Ross Ihaka Robert Gentleman
What is R? Could be connected with C, Matlab, WinBugs,… Another version of S Developed at AT&T Bell Lab by R. Becker, J. Chambers, and A. Wilks Open source and flexible: Windows, Unix, Linix, MacOS R is free: downloaded from the Comprehensive R Archive Network (CRAN) Supports and extension of R update everyday. Any leading statistical models and analysis can be found in R (with package) More flexible in programming and analysis. Could be connected with C, Matlab, WinBugs,… Many users around the world. 27 countries and 66 mirror sites. http://www.r-project.org/useR-2006/Slides/Chambers.pdf
Why R? 引自台灣資料科學愛好者年會 面對龐大與多元的資料浪潮,資料科學世代已經興起,近年來國外企業應用 R 語言進行資料分析已經相當成熟,包含 Google、Facebook、Agoda、Intel、Pfizer、Bank of America 等企業,都採用 R 語言進行資料分析。國際知名的 KDnuggets 論壇最新統計,R 語言已經連續三年獲得資料科學家採用資料分析語言第一名的殊榮。
Why R? 引自台灣資料科學愛好者年會 在眾多的資料分析工具中,R語言在統計分析上最為知名,除了具備物件導向的開發環境、擁有強大的資料視覺化能力、更有支援跨平台與免費等優勢,R 語言專注在資料分析上的特性,使它已經成為目前資料分析和繪圖的主流軟體之一。
Why R ? R 語言已是全球廣泛度排名第九的程式語言了!!! ---引自台灣資料科學愛好者年會 根據 IEEE Spectrum 的統計,R 語言排行第九,在前面的八名為 Java, C, C++, Python, C#, PHP, Javascript, and Ruby,皆為泛用語言或與網頁開發相關的程式語言。以此來看,R 語言是專用於處理資料的程式語言中最流行的。 http://www.r-bloggers.com/ieee-ranks-r-9-amongst-all-languages/
TIOBE 全球程式語言排名 TIOBE 是全球公認客觀的程式語言排名統計單位。 一個月更新一次。它的統計方法是基於全球有經驗的工程師,科目和第三方廠商。同時也參考來自 google, msn, yahoo 等搜索引擎計算得出的結果 。http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html R在2014年9月排名第21。相較2012年排名第24名,有逐漸上升的趨勢。
Installing R— Click on CRAN Web page: http://www.r-project.org/index.html 1.Click on CRAN
Installing R — Select a mirror site
Installing R — Select a mirror site
Installing R — Select OS in CRAN Click on Windows
Installing R — Select Binaries Click on base
Installing R — Download Setup file Click here
Installing R — Download Setup file
Installing R — Download Setup file
Installing R — Download Setup file
Installing R — Download Setup file Unclick ‘Message Translations’ to get R in English mode.
Installing R — Download Setup file 1 2 3 4
Using R Interactive Command Window 可在此視窗做程式編纂,按Enter執行 R主要指令執行視窗 Double click on the R icon
R程式編纂與執行【程式存檔 =>*.R】
改變工作目錄 【getwd() setwd(dir)】
Help Manuals
求助 【help(“topic”)】 help(“xxx”) / ?”xxx”:已知指令,欲查詢指令內容或輸入方式
求助範例 使用方法 input output
求助 【help.search(“指令名稱或關鍵字”) / ??”xxx”】 package function Output會列出指令名稱或指令說明中包含此關鍵字(mean)的所有指令
套件(packages)
自動載入之套件 stats: 常用統計分析(t.test, anova, etc.) graphics: 基本繪圖工具 grDevices:基本繪圖介面 utils: 基本程式編寫工具 datasets: 數據範例 methods: 定義classes of objects base: 基本函式(IO, 敘述統計, etc.)
安裝套件 【以package:leaps為例】
載入套件【方法一】
載入套件【方法二】
套件查詢 Currently, the CRAN package repository features 5816 available packages. Package 查詢:http://cran.r-project.org/web/packages/ Package “leaps”: http://cran.r-project.org/web/packages/leaps/index.html
套件查詢
變數命名及語法 例子:定義一個新的變數叫temp,並且指定其值為24 紅字是輸入,藍字是輸出 大小寫代表不同物件 等號可用箭頭(<-)代替 變數名稱必須為字母或是點(.)開頭 變數名稱由字母、數字、點(.)或下底線( _ )組成,不能含有特殊符號,如:$&!。 正確的命名:x5; x_5; x.5; .x5; x.y.z.5 錯誤的命名:x-5; 5x; x$5 c, q, t, C, D, F, I, T; diff, df, pt, pi, …不可以是物件名稱
語法 程式以分號(;)或是換行做分隔。 註解:R不執行#後之內容,故常將程式註解置於#之後。 Recall : 上下鍵。 基本運算: 可以直接輸入數值計算。 若物件屬性與維度相同,可以進行四則運算。 若不能計算,會回傳NaN (not a number),如:log(-1)。
R as a calculator 可以直接輸入數值計算 若物件屬性與維度相同,可以進行四則運算 36 可以直接輸入數值計算 若物件屬性與維度相同,可以進行四則運算 常用的數學函數,如log, exp, sin,..可直接計算 若不能計算,會回傳NaN (not a number)
查詢、移除已定義物件 37 ls() rm(“A”) rm(list=ls())
Environment commands — ls() rm() 紅色字代表輸入的指令、藍色字代表輸出的結果。 R的註解符號為「#」,當程式遇到「#」,後面的文字將不會執行 查詢已存在的package:共九個package 查詢已定義物件:尚無物件 定義新物件(定義新變數為Temp01,並指定其值為9):大小寫代表不同變數 查詢已定義物件:兩個物件temp01 & Temp01 移除已定義物件:移除temp01
Practice 請用R計算 請比較log(10); log2(10); log10(10) 39 請用R計算 請比較log(10); log2(10); log10(10) Hint: 可用x!=gamma(x+1)或是x!=prod(1:x)
輸入向量 40 c(…) 可以是數值 可以是字串 還可以把每一個元素取名字
Practice 41 Weight: 50, 62, 47, 48, 72, 81, 45, 58, 65, 55 Height: 1.58, 1.77, 1.43, 1.52, 1.84, 1.72, 1.45, 1.62, 1.70, 1.55 請計算每個人的BMI及平均BMI
將物件存檔 42 save.image("C:\\Users\\user1\\Desktop\\統計軟體\\temp.RData")
Input a sequence 用“:”表示從1到10 等距的數列可以用seq (sequence) 43 用“:”表示從1到10 等距的數列可以用seq (sequence) 重複生成相同的數/數列,用rep (replication) Practice: 如何生出 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 這個數列? Q:如何生出 10 9 8 7 6 5 4 3 2 1 呢?
輸入矩陣 直接輸入矩陣的元素,再指定其維度 利用matrix這個function。 1:12為矩陣內元素 44 直接輸入矩陣的元素,再指定其維度 利用matrix這個function。 1:12為矩陣內元素 nrow=number of row Note: ncol=number of column
矩陣運算 維度相同才能加減 x*y: x,y相同位置的元素直接相乘 x%*%t(y): 需維度符合才可相乘/除 45 維度相同才能加減 x*y: x,y相同位置的元素直接相乘 x%*%t(y): 需維度符合才可相乘/除 t(y): transpose of y
其他相關函數 cbind/rbind solve(A) rownames/colnames 46 cbind/rbind solve(A) rownames/colnames is.matrix/as.matrix, is.numeric/as.numeric, … colSums/rowSums, colMeans/rowMeans eigen(x)
Operations
Practice 48 輸入矩陣 計算 比較: A×AT和A2有何不同? 那(A×AT)-1和solve(A)有何不同?
Operations --- 定義變數 Function Example Output 數字運算 1+1 2 序列 -2:2 -2 -1 0 1 2 c(1:5) 1 2 3 4 5 rep(1, 5) 1 1 1 1 1 rep(1:2, 3) 1 2 1 2 1 2 factor(c(“a”, “b”)) a b temp= seq(1, 10, 0.01) #從1到10的數列,每0.01為間隔 [1] 1.00 1.01 1.02 1.03 1.04 1.05 1.06 … temp[2] #讀取temp第二筆資料 1.01 矩陣 matrix(1:6, 2, 3) #建立一個2×3矩陣 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
Operations 運算符號 Example 邏輯符號 加號 (+) X+Y 大於等於(>=) X>=Y 減號 (-) X-Y 小於等於(<=) X<=Y 乘號 (*) X*Y 不等於(!=) X!=Y 除號 (/) X/Y 或(|) (X>=3)|(Y>=5) 冪次 (^) X^Y 且 (&) (X>=3)&(Y<=5)
Operations