R
實作統計,在上課過程中讓修課者同時學習統計以及操作R
,未來能夠進一步延伸到其他的領域。本課程假設修課的同學有部分使用R
的經驗,在第一次上課之後,就用講義說明R
的基本功能,請同學自己閱讀講義。上課與作業都會用R
來處理資料。希望大家從做中學,久而久之就會越來越有樂趣。1991年,Ross Ihaka與Robert Gentleman開發R
,前身為S-Plus,雖然R
跟S-Plus是不同的軟體,但兩者的語法有許多重疊的地方。
R
是免費、開源軟體,目前R
已經有超過9000個套件(package),每個套件儲存資料、函數、文件等等。除了進行統計、機器學習、資料視覺化,也可以用R
的套件撰寫html文件,或者轉換為PDF,文件中可以結合R
的統計功能,也就是文件中的統計、資料視覺化都是由同一組語法產生,不需要在別的地方製作,再複製貼上目前的文件。
R
有6種物件(object),每一種物件有兩種屬性:長度以及屬性。這6種物件為向量(vector)、矩陣(matrix)、陣列(array)、列表(list)、因素(factor)、資料框(Data Frame)。
C語言主要功能是控制硬體,而R
的函式是用C語言寫成,發展出許多統計的函式。Python的優點則是網路爬蟲、網頁開發、資料視覺化、機器學習等等,例如Gareth James等人所寫的”An Introduction to Statistical Learning: with Applications in Python”,但是R
的統計功能較多也較正確,可優先考慮學習。
不論是統計或者資料分析,背後都需要有嚴謹的研究設計,本課程希望達到下列目標,但是也會時時提醒修課者培養看問題以及回答問題的敏銳度:
R
實驗設計R
描述資料R
整理資料R
進行資料視覺化R
進行相關分析R
進行線性迴歸模型R
進行非線性迴歸模型R
的語法檔給助教以驗證執行。我們會選出最好的10份作業成績的平均值做為最後的成績。
R
描述資料型態,並且說明變數之間可能的關係,最後以線性或者非線性迴歸模型檢證假設,但是在這個階段不一定要有非常顯著的發現。最後期末報告字數在8000字以內,並且說明每一位組員負責的部分。
R
的輸出做為分析結果的報告將會嚴重扣分。沒有適當引用文獻也會扣分。R
的套件裡面的許多現成資料,不要只找國內的資料。
週次 | 日期 | 主題 |
---|---|---|
1 | 2/21 | 課程簡介、安裝R |
2 | 2/28 | 放假 |
3 | 3/7 | 隨機實驗 1 |
4 | 3/14 | 隨機實驗 2 |
5 | 3/21 | 母體推論 1 |
6 | 3/28 | 母體推論 2 |
7 | 4/4 | 放假 |
8 | 4/11 | 交叉列表與相關 |
9 | 4/18 | 機率 |
10 | 4/25 | 迴歸原理 |
11 | 5/2 | 單迴歸 |
12 | 5/9 | 複回歸 |
13 | 5/16 | 假設檢定 |
14 | 5/23 | 二元變數迴歸模型1 |
15 | 5/30 | 放假 |
16 | 6/6 | 二元變數迴歸模型 2 |
17 | 6/13 | 期末課堂報告 |
18 | 6/20 | 自主學習 |
R
講義共有六週,請同學按照日期自行閱讀,同樣是上傳到https://rpubs.com/chiahung_tsai 的html檔案,閱讀後請繳交作業:週次 | 日期 | 主題 | 說明 |
---|---|---|---|
1 | 2/21 | 讀取資料 | 介紹匯入不同來源的資料 |
2 | 3/7 | 資料類型 | 介紹各種類型的資料 |
3 | 3/14 | 子資料集 | 介紹如何切割資料 |
4 | 3/21 | 條件判斷與迴圈 |
將解釋如何設定條件讓R 依照邏輯計算答案,以及如何設定迴圈
|
5 | 3/28 | 長表與寬表 | 轉換資料的型態 |
6 | 4/11 | 資料視覺化 | 介紹ggplot2以及ggpubr等套件的指令 |
R
語法R
教學R
的夏季課程(http://faculty.washington.edu/cadolph/index.php?page=60&pan=essex),從初階到進階,內容非常的詳盡。R
的基礎,循序漸進,不會覺得太艱深(https://www.ling.upenn.edu/~joseff/rstudy/index.html)。R
的部分在(https://stats.idre.ucla.edu/r)。R
的大神:Hadley Wickham 在Advanced R的網站 (http://adv-r.had.co.nz/Introduction.html) 介紹R
的基本原理,有興趣的同學可以先讀導論。library(DSC2014Tutorial)
slides("Basic") #Basics: data type, basic operations, etc.
slides("ETL1") #ETL on R
slides("ETL2") #Web scrapping
slides("DataAnalysis") #Data analysis
slides("Visualization1") #R basic visualization
slides("Visualization2") #R visualization using ggplot2
slides("Visualization3") #R markdown
R
的網站The Comprehensive R Archive Network,簡稱CRAN,請找download R的連結,然後按照電腦的系統(Windows, Linux, Mac),到任何一個國家的載點,下載最新的版本。R
本身介面並不太友善,RStudio 是一個免費的IDE,下載R
之後請下載RStudio (http://rstudio.com)。
如果喜歡把輸出結果放在右上角,可在RStudio設定:View–>Panes–>Console on Rightmypkg <- c('foreign','ISLR','tidyverse','Zeligverse','car','ggplot2','UsingR','lattice','nycflights13', 'stargazer','e1071', 'dplyr', 'tidyr', 'emoGG', 'ggthemes', 'psych', 'ggstatsplot', 'janitor', 'kmed', 'readr', 'lubridate',
'CTT','TSstudio','Rcolorbrewer')
install.packages(mypkg)
devtools
這個套件,然後去Github找可以下載套件的地方,例如:install.packages('devtools') #assuming it is not already installed
library(devtools)
devtools::install_github(
repo = "jtlandis/ggside", # package path on GitHub
dependencies = TRUE,
quick = TRUE # skips docs, demos, and vignettes
)
library('套件名稱')
確認可否使用該套件,或者輸入以下語法顯示全部已經安裝的套件:# List all installed packages
installed_packages <- installed.packages()
# Print the names of the installed packages
print(rownames(installed_packages))
R
的版本有可能會隨著時間而更新,建議定時到CRAN下載最新版的R
。然後重開RStudio,讓RStudio會使用R
的最新版本。
而我們下載的各種套件,在Mac系統上,可以用updateR套件更新,指令如下:
library(devtools)
install_github('andreacirilloac/updateR')
library(updateR)
updateR(admin_password = 'Admin user password')
library(installr)
updateR()
1 假設在你的桌面開一個工作目錄叫做 stat2024
2 到本課程的moodle下載壓縮檔,解壓縮,然後複製貼上資料檔到stat2022
3 到RStudio–>File–>New Project–>existing director–>Browse (找到stat2022)–>Create Project–Switching to project
4 資料檔應該都在RStudio右下角的視窗了,下次你開RStudio,File–>Recent projects,選擇stat2022,就會看到所有相關檔案在右下角。
5 如果你打開stat2022這個Project但是不小心跳到別的資料夾,到右下角找到More–>Go To Working Directory,應該就會回到stat2022
每一次進入RStudio之後,請打開想執行的計劃案,才能進入正確的路徑,否則RStudio的內建路徑是由Tools–>Global Options–>General決定。
R
可讓使用者在R–>環境設定中,設定要讀取資料來自的資料夾,或是儲存資料之前指定工作目錄,以確定分析結果例如畫圖可以儲存到特定的資料夾。也可以用語法表示,例如:setwd('C:/my documents/mywork')
\[ f(x\mid \mu,\sigma^2)=\frac{1}{\sqrt{2\pi}\sigma}\text{exp}^{-\frac{(x_{i}-\mu)^2}{2\pi}} \]
Rmarkdown 可以轉成html檔案,所以有一些格式設定與CSS語言互通。
請到這裡閱讀Rmarkdown的說明。也可以上網自行搜尋資料。
打開Rstudio,File\(\rightarrow\)New File\(\rightarrow\)R markdown,看到一個子畫面,可以填標題、作者、日期等等,還可以選擇未來要輸出html, PDF或者Word檔。填好之後會產生一個範例檔案。
如果選擇輸出html檔或者Word檔,Rmarkdown不需要安裝xelatex或者tinytex就可以顯示中文的內文,如果在執行語法中,想要輸出中文,請加上\(\texttt{showtext_auto()}\),例如圖7.1:
library(showtext)
showtext_auto()
set.seed(02138)
words <- c('英文', '西班牙文', '中文', '日文')
A <- sample(words, 400, replace = T)
barplot(table(A))
Figure 7.1: 語言直方圖1
language | Count | Percent |
---|---|---|
中文 | 106 | 26.5% |
日文 | 87 | 21.8% |
英文 | 101 | 25.2% |
西班牙文 | 106 | 26.5% |
Total | 400 | 100.0% |
library(ggplot2)
ggplot2::ggplot(data = df, aes(x=language, group = 1)) +
geom_bar(fill = '#C2CC1C')
Figure 7.2: 語言直方圖2
如果要輸出為PDF檔,Rmarkdown目前只支援英文,可能需要安裝Mac\(\TeX\),但是可以轉成中文的Word檔。
用Overleaf註冊一個帳戶,可以隨時上線使用\(\LaTeX\) ,尋找適當的模板,改寫之後,可以輸出各種中、英文文件的PDF檔。
library(here);library(foriegn)
CSV<-here("data","Tondutrend.csv")
trend<-read.csv(CSV, header=T, sep=",")
tonduts<-ts(trend, start=1992.6, frequency=2)
par(xpd=NA, mar=par()$mar+c(2.5, 0, 0, 0), family='GenKiMin2 TW L')
library(here);library(showtext)
showtext_auto()
font.add("Helvetica", "Helvetica.ttc")
#font.add("GenKiMin2 TW L", "GenKiMin2-L.ttc")
font.add("GenRyuMin2JP-R","GenRyuMin2-R.ttc")
font.add("LiSu","Lisu.ttf")
CSV<-here::here("data","Tondutrend.csv")
trend<-read.csv(CSV, header=T, sep=",")
tonduts<-ts(trend, start=c(1992.1), frequency=2)
head(tonduts, n=10)
## 統一 維持現狀 獨立 拒答
## [1,] 2.4 66.1 7.7 23.8
## [2,] 18.6 42.2 4.0 35.2
## [3,] 20.4 51.4 11.4 16.7
## [4,] NA NA NA NA
## [5,] NA NA NA NA
## [6,] NA NA NA NA
## [7,] 19.1 46.1 11.1 23.8
## [8,] 22.3 41.1 12.2 24.4
## [9,] 21.0 48.5 14.1 16.4
## [10,] 27.8 47.1 16.1 9.0
# Margin
par(xpd=NA, mar=par()$mar+c(2.5, 0, 0, 0), family = 'GenRyuMin2JP-R')
# Plot
plot(tonduts, plot.type=c("single"), lty=c(2,3,1,2),ylab="%",xlab = '年度',
pch='1', lwd=3,frame.plot=F,col=c("gray20","gray60", "black", "gray80"),xaxt="n", main="台灣民眾的統獨立場, 1992.6-2021.12")
axis(1, at=seq(1992,2021, by=2))
axis(2, at=seq(10,70, by=10), family='Helvetica')
legend("bottomright", c("統一","維持現狀"), inset=c(0.35, -0.61), col=c("gray20","gray60"),lty=c(2,3), bty='n', lwd=3)
legend("bottomright", c("獨立","無反應"), inset=c(0, -0.61), col=c("black", "gray80"),lty=c(1,2), bty='n', lwd=3)
text(2000, 33, paste("第一次政黨輪替"), family = 'LiSu', cex = 1.2)
text(2008, 32, paste("第二次政黨輪替"))
Figure 7.3: 1992-2021統獨趨勢折線圖