近年來,在日常生活中我們經常聽到大數據、演算法、AI人工智慧等等,過去認為只有統計學家、經濟學家需要使用數據說明經濟現象、人口成長等等,現在社會各行各業越來越重視數據加上演算法做為決策的依據,資料科學變得非常熱門,例如用大量的雷達、衛星、氣象站資料建立氣象預測的模型、用大量的X光攝影檢查照片診斷病人、用各種感應器回傳的數據進行無人駕駛,以及收集各種社群媒體的留言、貼文構成政治人物的聲量等等。
但是早在資料科學出現之前,統計學已經幫助我們描述資料以及找出變數之間的關係,進一步加以預測,例如預測經濟成長、預測選舉結果、預測人口成長等等。
學好統計學可以化繁為簡,避免被龐大的資料淹沒。不論是資料科學或是統計學,目的都是幫助我們透視資料後面的故事,進而幫助自己或者組織做出正確的決策。
就社會科學而言,統計可以運用在許多重要的研究問題,例如:
有些國家的國會選舉採用簡單多數決制,有些國家採取比例代表制。有些國家是多黨制,有些國家則是兩黨制,有些國家落在中間。選舉制度與政黨數目有什麼關係?
有哪些國家的投票率比較高、哪些國家比較低?經濟發展、社會不平等或者其他因素會影響投票率嗎?投票率與政府治理的關係為何?
為什麼有些民眾喜歡川普?有些民眾喜歡拜登?有些民眾兩個都不喜歡?
社群媒體對於民眾的政治態度有多大的影響?如何確認民眾先有政治立場再選媒體?還是被媒體影響其政治立場?哪些因素決定民眾會分享貼文、按讚、追蹤?
針對中國研究,威權政體如何讓民眾滿足現狀,不會要求社會改革?哪些因素影響黨員的升遷?哪些因素決定中國的外交政策?
雖然這些問題不容易回答,但是學者盡力收集資料來驗證理論,希望建立好的模型推論到未來的事件,或者其他國家地區。
本課程目的是用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)。
不論是統計或者資料分析,背後都需要有嚴謹的研究設計,本課程希望達到下列目標,但是也會時時提醒修課者培養看問題以及回答問題的敏銳度:
瞭解研究設計
瞭解如何用R
描述資料
瞭解如何用R
整理資料
瞭解如何用R
進行資料視覺化
暸解如何用R
進行相關分析
瞭解如何用R
進行線性迴歸模型
瞭解如何用R
進行非線性迴歸模型
R
的語法檔給助教以驗證執行。我們會選出最好的10份作業成績的平均值做為最後的成績。
R
描述資料型態,並且說明變數之間可能的關係,最後以線性或者非線性迴歸模型檢證假設,但是在這個階段不一定要有非常顯著的發現。報告字數約在8000字以內,請說明每一位組員的分工。
R
的輸出做為分析結果的報告將會嚴重扣分。沒有適當引用文獻也會扣分。週次 | 日期 | 主題 |
---|---|---|
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 | 期末報告寫作諮詢 |
週次 | 日期 | 主題 | 說明 |
---|---|---|---|
1 | 2/23 | 讀取資料 | 介紹匯入不同來源的資料 |
2 | 3/1 | 資料類型 | 介紹各種資料的格式 |
3 | 3/8 | 子資料集 | 介紹如何切割資料 |
4 | 3/15 | 條件判斷與迴圈 |
將解釋如何設定條件讓R 依照邏輯計算答案,以及如何設定迴圈
|
5 | 3/22 | 長表與寬表 | 轉換資料的型態 |
6 | 3/29 | 資料視覺化 | 介紹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
的基本原理,有興趣的同學可以先讀導論。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
R
的網站The Comprehensive R Archive Network,簡稱CRAN,請找download R的連結,然後按照電腦的系統(Windows, Linux, Mac),到任何一個國家的載點,下載最新的版本。R
本身介面並不太友善,RStudio 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也可以轉成
請到這裡閱讀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% |
library(ggplot2)
ggplot2::ggplot(data = df, aes(x=language, group = 1)) +
geom_bar(fill = '#C2CC1C')
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')
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
# 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("第一次政黨輪替"))
Figure 7.1: 統獨趨勢折線圖1