1 課程資訊

1.1 上課時間

2024年2月23日至2024年6月21日,星期五,9:10-12:00

1.2 上課地點

270425

2 課程簡介

2.1 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)。

3 課程目標

4 上課方式

4.1 評分方式

4.1.1 評分

  1. 作業 65%
  2. 期末口頭報告 10%
  3. 期末書面報告 25%

4.1.2 作業

  • 每次上課後會有作業,請在下次上課之前繳交R的語法檔給助教以驗證執行。我們會選出最好的10份作業成績的平均值做為最後的成績。
  • 為了鼓勵寫作業正確以及有效率,最早交作業的前5名同學,如果答案正確,期末總分可獲得加分。
  • 寫作業可以討論,但是請勿複製貼上,每份作業應該出自於自己的心得。寫作業過程中可以使用生成式AI確定語法無誤,但是勿過份依賴,否則無法真正成為自己學習的成果。
  • 為鼓勵大家協助收集資料,學期中到選舉研究中心擔任電訪員表現良好可獲得期末加分。
  • 4.1.3 期末報告

  • 期末報告的要求是展示對於資料以及統計的學習成果。每一組應該有2到3位同學,每一組選擇一筆現有資料,或者自行建立資料,然後以R描述資料型態,並且說明變數之間可能的關係,最後以線性或者非線性迴歸模型檢證假設,但是在這個階段不一定要有非常顯著的發現。報告字數約在8000字以內,請說明每一位組員的分工。
  • 修課同學可能有不同的領域,鼓勵同學趁期末報告的機會可以嘗試了解其他領域的知識,並且在期末報告中用淺顯易懂方式解釋這個領域的背景。老師會盡量媒合同學完成分組。
  • 請以Email於5月17日之前,告知老師報告主題、資料來源、預計發現等重點,以及組員分工方式。
  • 期末需要上台說明書面報告的大致內容,接受老師與同學的提問。報告時間為15分鐘,提問時間為10分鐘。
  • 請參考台灣政治學刊的體例撰寫書面報告,直接貼上R的輸出做為分析結果的報告將會嚴重扣分。沒有適當引用文獻也會扣分。
  • 配分方式如下:
    • 研究問題:10%
    • 資料收集與整理:40%
    • 資料分析: 30%
    • 整體寫作:20%

    4.1.4 建議期末報告內容

    1. 研究問題
    2. 相關文獻
    3. 假設與模型
    4. 資料與變數
    5. 資料分析
    6. 結論

    4.1.5 期末報告進度

    1. 報告題目與分組成員名單繳交期限:5月17日(星期五)
    2. 期末課堂口頭報告:6月14日(星期五)
    3. 書面報告繳交期限:7月15日(星期一)

    4.2 課程進度

    • 以下的課程進度列出授課主題的時程,但是實際上課時可能會調整上課的進度,例如隨機實驗可能不會用到6個小時,機率可能超過3個小時。在上課過程中,盡量讓同學有機會實作相對應的作業,以加深印象。
    • 所有的上課內容會逐步上傳到https://rpubs.com/chiahung_tsai 的html檔案:
    週次 日期 主題
    1 2/23 課程簡介、安裝R
    2 3/1 隨機實驗 1
    3 3/8 隨機實驗 2
    4 3/15 母體推論 1
    5 3/22 母體推論 2
    6 3/29 交叉列表與相關
    7 4/5 放假
    8 4/12 機率
    9 4/19 迴歸原理
    10 4/26 單迴歸
    11 5/3 複回歸
    12 5/10 假設檢定
    13 5/17 Logit Regression 1
    14 5/24 Logit Regression 2
    15 5/31 時間序列的因果關係
    16 6/7 貝氏統計
    17 6/14 期末課堂報告
    18 6/21 期末報告寫作諮詢
    • 請同學按照週數自行閱讀同樣是上傳到https://rpubs.com/chiahung_tsai 的html檔案以及繳交作業:
    週次 日期 主題 說明
    1 2/23 讀取資料 介紹匯入不同來源的資料
    2 3/1 資料類型 介紹各種資料的格式
    3 3/8 子資料集 介紹如何切割資料
    4 3/15 條件判斷與迴圈 將解釋如何設定條件讓R依照邏輯計算答案,以及如何設定迴圈
    5 3/22 長表與寬表 轉換資料的型態
    6 3/29 資料視覺化 介紹ggplot2以及ggpubr等套件的指令

    4.3 討論時間

    • 原則上訂在星期三中午12點到1點,研究室位於綜合院館北棟5樓。如果更動時間將通知,需要預約其他時間請email tsaich AT nccu.edu.tw。

    4.4 助教

    洪子淳(Email: 111260010 AT nccu.edu.tw)

    4.5 參考書目

    • 統計學
    1. Elena Llaudet and Kosuke Imai, 2023. Data Analysis for Social Science: A Friendly and Practical Introduction. Princeton University Press.
    2. 林惠玲、陳正倉,現代統計學二版,雙葉書廊。
    3. Gareth James, Daniela Witten, Trevor Hastie, and Robert Tibshirani, 2013. An Introduction to Statistical Learning with Applications in R (http://www-bcf.usc.edu/~gareth/ISL/ISLR%20First%20Printing.pdf)
    • R語法
    1. 蔡佳泓,2014,基礎統計分析:R 程式在社會科學之應用,雙葉書廊。
    2. John Fox, 2002. An R and S-Plus Companion to Applied Regression, Sage.
    3. John Verzani, 2001. Using R for Introductory Statistics. (https://cran.r-project.org/doc/contrib/Verzani-SimpleR.pdf)
    4. 劉正山,2018,民意調查資料分析的R實戰手冊,五南出版社。

    5 網路資源

    5.1 R教學

    5.2 資料萃取

    • 最近政府提供許多開放資料,許多產業也有開放資料,如何下載這些公開資料然後找出資料之間的連結?台灣資料愛好者年會在2014年提供的ETL(Extract-Transform-Load)講義,詳細說明資料萃取、轉置以便分析的過程。透過執行下列程式碼,可閱讀ETL之投影片。請參考說明。請複製貼上以下的語法:
    devtools::install_github('TaiwanRUserGroup/DSC2014Tutorial')
    • 然後依序執行下列程式碼,結果會出現在瀏覽器的網頁:
    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

    6 上課講義與資料

    7 使用R的步驟

    7.1 下載R

    • 搜尋R project就可以找到R的網站The Comprehensive R Archive Network,簡稱CRAN,請找download R的連結,然後按照電腦的系統(Windows, Linux, Mac),到任何一個國家的載點,下載最新的版本。

    7.2 裝設RStudio

    • R本身介面並不太友善,RStudio R Studio Logo 是一個免費的IDE,下載R之後請下載RStudio (http://rstudio.com)。 如果喜歡把輸出結果放在右上角,可在RStudio設定:View–>Panes–>Console on Right

    7.3 安裝相關套件

    • 請在上課前安裝一些常用的套件。例如輸入:
    mypkg <- 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)
    • 如果不能在CRAN找到想要的套件,可能是放在Github,這時候要先載入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))
    • 如果嘗試很多次還是無法安裝,可以把錯誤訊息複製貼上到搜尋引擎,說不定其他人也有類似的問題,然後有好心人士提供解決方法。

    7.4 更新R

    • R的版本有可能會隨著時間而更新,建議定時到CRAN下載最新版的R。然後重開RStudio,讓RStudio會使用R的最新版本。

    • 而我們下載的各種套件,在Mac系統上,可以用updateR套件更新,指令如下:

    library(devtools)
    install_github('andreacirilloac/updateR')
    library(updateR)
    updateR(admin_password = 'Admin user password')
    • 在Windows系統上,請用installr套件更新,指令如下:
    library(installr)
    updateR()

    7.5 設定Rproj

    • RStudio可以建立一個計劃案,連結特定的資料夾。每次只要打開這個計劃案,就不需要記憶資料夾的路徑,資料讀取、結果儲存都會到這個計畫案所在的資料夾。請參考以下步驟:

    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')
    

    7.6 Rmarkdown介紹

    • 用Rmarkdown可以結合文字、語法以及分析結果,也可以製作表格,還可以用\(\LaTeX\)寫方程式,例如:

    \[ 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也可以轉成

    • 請到這裡閱讀Rmarkdown的說明。也可以上網自行搜尋資料。

    • 打開Rstudio,File\(\rightarrow\)New File\(\rightarrow\)R markdown,看到一個子畫面,可以填標題、作者、日期等等,還可以選擇未來要輸出html, PDF或者Word檔。填好之後會產生一個範例檔案。

    • 如果選擇輸出html檔或者Word檔,Rmarkdown不需要安裝xelatex或者tinytex就可以顯示中文的內文,如果在執行語法中,想要輸出中文,請加上\(\texttt{showtext_auto()}\),例如:

    library(showtext)
    showtext_auto()
    set.seed(02138)
    words <- c('英文', '西班牙文', '中文', '日文')
    A <- sample(words, 400, replace = T)
    barplot(table(A))

    • 也可以輸出為表格:
    df <- data.frame(A, language = A)
    flextable::proc_freq(df, 'language', include.column_percent = T)

    language

    Count

    Percent

    中文

    106

    26.5%

    日文

    87

    21.8%

    英文

    101

    25.2%

    西班牙文

    106

    26.5%

    Total

    400

    100.0%

    • 或者用\(\texttt{ggplot2}\)
    library(ggplot2)
    ggplot2::ggplot(data = df, aes(x=language, group = 1)) +
      geom_bar(fill = '#C2CC1C')

    • 如果要輸出為PDF檔,Rmarkdown目前只支援英文,可能需要安裝Mac\(\TeX\)或者找一下語法克服輸出中文的問題,但是可以轉成中文的Word檔。

    7.6.1 控制中文字

    • 如果想要控制中文字型,可以打開字體簿,找PostScript名稱,然後在par()裡面設定參數family=““,例如底下的語法:
    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='HanWangKaiMediumChuIn')
  • 另一個做法是上網找字體的檔案(ttf),安裝字體,用底下的語法辨識字體:
  • library(here);library(showtext)
    showtext_auto()
    font.add("細明體", "MingLiu.ttf")
    font.add("Helvetica", "Helvetica.ttc")
    par(xpd=NA, 
        mar=par()$mar+c(0, 0, 0, 0), 
        family='細明體')
    • 例如我們讀取以下時間序列的資料:
    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
    • 然後指定剛剛輸入的細明體體畫圖,但是指定Helvetica在X, Y軸的數字,可以發現標題的數字跟X, Y軸的數字屬於不同的字體,但是X軸的標題還是細明體:
    # Margin
    par(xpd=NA, mar=par()$mar+c(2.5, 0, 0, 0), family='細明體')
    # 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), family='Helvetica')
    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, 30, paste("第一次政黨輪替"))
    統獨趨勢折線圖1

    Figure 7.1: 統獨趨勢折線圖1