1 上課時間與地點

2025年2月21日至2025年6月20日,星期五,9:10-12:00 .270812

2 課程簡介

  • 近年來,在日常生活中我們經常聽到AI人工智慧、大數據、演算法、機器學習等等名詞,過去認為只有統計學家或者經濟學家需要使用數據說明經濟成長、物價上漲、人口變化等等,但是現在社會各行各業越來越重視數據加上演算法做為決策的依據,甚至用AI直接判斷什麼是異常出錯或者風險高低,使得資料科學變得非常熱門。常見的例子包括使用大量的雷達、衛星、氣象站資料建立氣象預測的模型,用大量的X光攝影檢查照片診斷病人,用各種感應器回傳的數據進行無人駕駛,以及收集各種社群媒體的留言、貼文等計算政治人物的聲量等等。透過深度學習,只要把資料輸入可能是非常複雜的訓練模型 (常常會聽到的「神經網路」) 中,讓訓練模型進行特徵擷取,接著進行判斷,得到答案,跟原來資料比較,就可以驗證模型的品質。可以不斷輸入新的資料,更新模型。
  • 但是早在資料科學出現之前,統計學已經幫助我們描述資料以及找出變數之間的關係,進一步加以預測,例如根據經濟指標預測經濟成長率,根據民調預測選舉結果,根據宏觀與微觀的數據預測市場需求等等。貝氏統計更進一步使用最新的數據更新現有的資料,產生最新的預測。
  • 學好統計學可以化繁為簡,從各種龐大的資料中,透視資料後面的故事,進而幫助自己或者組織做出正確的決策。

2.1 重要課題

  • 就社會科學而言,統計可以運用在許多重要的研究問題,首先,我們可以統計一些有趣的現象,例如:
    1. 哪些國家實施民主的時間最長?哪些最短?
    2. 哪些媒體最多人看?哪些媒體最多人相信?
    3. 哪些地區過去十年來有最多的天災?
    4. 哪些候選人收到最多的政治獻金?什麼時間收到?哪些候選人完全不接受政治獻金?哪個選區的候選人花費最多?
    5. 民粹主義常用哪些詞?左派的民粹主義跟右派的民粹主義所用的詞有什麼差異?
  • 我們可能進一步找出兩個變數之間的關係,例如:
    1. 有些國家的國會選舉採用簡單多數決制,有些國家採取比例代表制。有些國家是多黨制,有些國家則是兩黨制,有些國家落在中間。選舉制度與政黨數目有什麼關係?
    2. 有哪些國家的投票率比較高、哪些國家比較低?經濟發展、社會不平等或者其他因素會影響投票率嗎?投票率與政府治理的關係為何?
    3. 為什麼有些民眾喜歡川普?有些民眾喜歡拜登?有些民眾兩個都不喜歡?
    4. 社群媒體對於民眾的政治態度有多大的影響?如何確認民眾先有政治立場再選媒體?還是被媒體影響其政治立場?哪些因素決定民眾會分享貼文、按讚、追蹤?
    5. 針對中國研究,威權政體如何讓民眾滿足現狀,不會要求社會改革?哪些因素影響黨員的升遷?哪些因素決定中國的外交政策?
    6. 中央政府的精英之間是否彼此串連?又跟地方的利益團體之間形成什麼樣的網路?這些網路會增強還是減弱王朝的社會控制?
  • 雖然這些問題不容易回答,但是學者盡力收集資料來驗證理論,希望建立好的模型推論到未來的事件,或者其他國家地區。
  • 18週的課程一開始介紹隨機實驗,然後將進入描述統計、相關分析、卡方檢定、估計與檢定、平均數分析、變異數分析、線性迴歸、非線性迴歸、時間序列的因果關係。如果還有時間會教授貝氏統計。希望從因果關係切入引發大家的學習興趣,也切合因果推論的趨勢,然後以迴歸描述資料,並且檢視線性的關係,進而以母體推論的方法,說明變數之間的關係是否可以驗證理論。
  • 本課程以R實作統計,在上課過程中讓修課者同時學習統計以及操作R,未來能夠進一步延伸到其他的領域。本課程假設修課的同學有部分使用R的經驗,在第一次上課之後,就用講義說明R的基本功能,請同學自己閱讀講義。上課與作業都會用R來處理資料。希望大家從做中學,久而久之就會越來越有樂趣。

2.2 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的統計功能較多也較正確,可優先考慮學習。

3 課程目標

  • 不論是統計或者資料分析,背後都需要有嚴謹的研究設計,本課程希望達到下列目標,但是也會時時提醒修課者培養看問題以及回答問題的敏銳度:

    • 瞭解如何用R實驗設計
    • 瞭解如何用R描述資料
    • 瞭解如何用R整理資料
    • 瞭解如何用R進行資料視覺化
    • 暸解如何用R進行相關分析
    • 瞭解如何用R進行線性迴歸模型
    • 瞭解如何用R進行非線性迴歸模型

4 上課方式

  • 主要由教師於課堂上講授,歡迎同學隨時發問。上課重點是了解統計的思維,課後可以參考講義複習。不需背誦上課所教的統計知識,如果不經常使用,死背也會很快遺忘。最好透過閱讀文獻以及實作,時時提醒自己。

4.1 評分方式

  • 本課程沒有期中考,透過作業與期末報告呈現學習的成果。
  1. 作業 65%
  2. 期末口頭報告 10%
  3. 期末書面報告 25%

4.1.1 作業

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

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

    4.1.3 建議期末報告內容

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

    4.1.4 期末報告進度

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

    4.2 課程進度

    • 以下的課程進度列出授課主題的時程,但是實際上課時可能會調整上課的進度。在上課過程中,盡量讓同學有機會實作相對應的作業,以加深印象。
    • 所有的上課內容會逐步上傳到https://rpubs.com/chiahung_tsai 的html檔案:
    週次 日期 主題
    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 自主學習
    • 第18週是自主學習,請每一位同學在學期中自行閱讀兩篇量化資料分析的學術論文,並且撰寫一篇1,000字的心得,討論文章的優點以及可以改進的地方,連同期末報告繳交。

    4.3 R講義進度

    • 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等套件的指令

    4.4 討論時間

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

    4.5 助教

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

    4.6 參考書目

    • 統計學
    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 上課講義與資料

    • 在上課前請到本課程的moodle打開講義的連結,如果必須改為線上課程,會提供影片連結。

    7 使用R的步驟

    7.1 下載R

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

    7.2 裝設RStudio

    • R本身介面並不太友善,RStudio 是一個免費的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的說明。也可以上網自行搜尋資料。

    • 打開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))
    語言直方圖1

    Figure 7.1: 語言直方圖1

    • 也可以輸出為表格:
    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')
    語言直方圖2

    Figure 7.2: 語言直方圖2

    • 如果要輸出為PDF檔,Rmarkdown目前只支援英文,可能需要安裝Mac\(\TeX\),但是可以轉成中文的Word檔。

    • Overleaf註冊一個帳戶,可以隨時上線使用\(\LaTeX\) ,尋找適當的模板,改寫之後,可以輸出各種中、英文文件的PDF檔。

    7.7 控制中文字體

    • 如果想要控制中文字體,可以打開字體簿,找PostScript名稱,然後在\(\texttt{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='GenKiMin2 TW L')
  • 另一個做法是上網找字體的檔案(ttf, ttc),安裝字體,用底下的語法辨識字體:
  • 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
  • 我們用\(\texttt{par()}\)設定圖裡面的字型為明體,並且用\(\texttt{text()}\)把隸書字體放在圖裡面的一段文字,也用\(\texttt{axis()}\)設定Y軸數字的字型,如圖7.3
  • # 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("第二次政黨輪替"))
    1992-2021統獨趨勢折線圖

    Figure 7.3: 1992-2021統獨趨勢折線圖

    • 如果需要下載字體可以到這個Github,下載之後記得安裝字體。
    • Word裡面的字體跟系統裡面的字體不見得一致,要以字體簿的字體為準。例如,Mac系統裡面沒有細明體(MingLIU),只能用GenKiMin或者GenRyuMin字體代替,但是Word可以看到新細明體。