pop <- rep(0:1, c(1900000-0.56*1900000,0.56*1900000))
#創造出一個虛擬母體
mean(sample(pop,1068)) #從中抽樣[1] 0.57397
上半場(14:00~15:30):基本觀念與操作
下半場(15:40~16:40):觀念應用與案例操作
Q&A問與答(16:40~17:00)
開啟本講線上講義:https://bit.ly/3OG6nsc
下載本講的資料檔:https://bit.ly/3C0ixoj
請先在電腦中安裝 R 再安裝RStudio
統計(statistics)是個收集、分析和解釋數據的學問,分為描述性統計和推論性統計,也是今日新興的「資料科學」的基礎。
描述統計用於認識資料(樣本)的特性。
推論統計用於推斷資料背後群體(母體)的特性,而且可以用於探討概念之間的潛在關係。
民調為什麼本來就不會準?(它是「一個」民調)
賽馬式民調在吵什麼?(你把民調數字當真相)
我們一起點開這張圖(連結:https://bit.ly/3osMKcD),跟著老師一起操作。
R是統計學社群所發展出來的語言。在眾多統計軟體中,R是一項免費公開、普遍下載的應用軟體,在國內外學界及業界應用很廣泛。應用範圍從公衛、民意調查到人工智慧、視覺、聲音、健康、能源資料大數據分析等。
R運用在研究分析上很強大,是國際級的工具。
2020@TPE; 2022@Beijin; 2022@online; 2023@Chicago
R比其他程式語言(如Python)更適合想探索資料的初學者。但台灣整體風氣偏重Python多過R。Python很棒,但你要清楚你學習它的目的為何。你需要的是你最喜歡且擅長的工具,用於有效率地解決問題。面對R,你要問自己的問題也是一樣的。
想學一個新工具來取代你熟悉的工具(如Excel)並不切實際。你需要去思考R是否能讓你(依需要)做到一些Excel做不到的事。無論你喜歡那一個工具,或是多一把刷子,請挑自己喜歡的來「刻意練習」。
Ctrl + Enter。假設在2023年全台灣成年合格選民有1900萬人,經普查發現支持「電價緩漲」的比例為56%。今天我們進行一次民意調查,全台灣隨機抽出1,068位合格選民電訪,問他們支持「電價緩漲」比例為何?
pop <- rep(0:1, c(1900000-0.56*1900000,0.56*1900000))
#創造出一個虛擬母體
mean(sample(pop,1068)) #從中抽樣[1] 0.57397
如果你在R上反覆執行上兩行的指令,你會發現每次抽樣得到數值(支持比例)都會不一樣,但你也會發現它們之間的差異不會大到那裡去。也就是說抽樣平均數呈現某種程度的分配(在本例中為常態)。現在我們抽樣3000次(且不重複抽樣),並看看這些平均數的分配情形。
result <- replicate(3000, mean(sample(pop,1068, replace=TRUE)))
mean(result)[1] 0.5599959
hist(result)微笑小熊調查小棧:smilepoll.tw 相聚時光烤不烤
調查時間:2017/11/06~2017/12/05
受訪人數:650人
RStudio可以毫無障礙地讀入Excel, SPSS, SAS等軟體的資料檔。但Excel必需要透過另外購買外掛才能做得到。
# 使用foreign這個套件,讀入csv資料格式的檔案
library(foreign)
bbq <- read.csv("BBQ.csv")
# 使用readxl套件,讀入Excel資料檔
library(readxl)
bbq <- read_excel("BBQ.xlsx") 這次的練習,我們使用R資料的格式(BBQ.rda)來操作。
# 讀入R資料檔
load("BBQ.rda")
# 用library()載入必需的套件工具(沒有的話就來先安裝它!)
library(sjPlot) #劉老師推薦的製圖工具箱(使用plot_frq及plot_grid指令)
library(sjmisc) #sjPlot套件家族中的資料處理工具箱(使用frq指令)
library(dplyr) #強大的資料處理工具箱(使用glimpse與filter指令)
# 顯示資料檔中所有的變數名稱
names(bbq) [1] "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8" "V9" "V10"
[11] "V11" "V12" "V13" "V14" "V15" "V16" "V17" "V18" "V19" "V20"
[21] "V21" "V22" "V23" "V24" "V25" "V26" "V27" "V28" "V29" "V30"
[31] "V31" "V32" "V33" "V34" "V35" "V36" "V37" "V38" "V39" "V40"
[41] "V41" "V42" "V43" "V44" "V45" "V46" "V47" "V48" "V49" "V50"
[51] "V51" "V52" "V53" "V54" "V55" "V56" "V57" "V58" "V44r" "V18r"
[61] "V20r" "V21r" "V23r" "V27r" "V45r" "V48r" "V2r" "V3r" "V24r" "V49r"
[71] "V50r" "V37r" "age"
# 若你是Mac的使用者,請將下一行的井字拿掉並執行該行,才能讓之後圖片中的中文字正常顯示出來。
# set_theme(theme.font="PingFang TC")讀入資料後,你可以點開右上角的物件名稱(bbq),檢視整筆資料檔,也可以用很簡短的指令,更有效率的檢視這筆資料的「長相」。
# 顯示這筆資料的結構
glimpse(bbq)接下來,進行變數的描述與觀察,並進一步進行資料的清理。
# 挑選變數進行統計描述與製圖
# (V44r)說到烤肉,請問您明年會不會想全家人一起烤肉? (0~10) 0:5=0[不會]; 6:10=1[會]
frq(bbq$V44r) #製表 說回到烤肉,請問您明年會不會想全家人一起烤肉? (x) <categorical>
# total N=588 valid N=588 mean=0.52 sd=0.50
Value | Label | N | Raw % | Valid % | Cum. %
----------------------------------------------
0 | 不會 | 282 | 47.96 | 47.96 | 47.96
1 | 會 | 306 | 52.04 | 52.04 | 100.00
<NA> | <NA> | 0 | 0.00 | <NA> | <NA>
plot_frq(bbq$V44r) #製圖 以下請你自己來試試看能不能快速為變數來製表製圖。複製任何一道題目到你的語法檔內,執行上述frq()與plot_frq()兩個指令,只要把變數名稱換為該題的變數名稱即可。
#(V18r)如果大家都烤肉,您會覺得「不好玩」嗎?
# 跟別人做類似的活動,不好玩 1
# 跟別人做類似的活動也很ok啊 0
# (V20r)您覺得戶外的烤肉對您的健康有多大影響?
# 影響很大 1
# 影響不大 0
# 完全沒影響 0
# (V21r)對您來說,烤肉費用的支出是不是一種負擔?
# 是,的確是種負擔 1
# 還好 0
# 不會 0
# (V23r)準備烤肉食材對您來說會不會很麻煩?
# 會麻煩 1
# 不會麻煩 0
# (V27r)您在不在意您烤肉時造成的污染?
# 會在意,覺得多少影響了環境 1
# 還好 0
# 不會在意 0
# (V45r) 平時用社群媒體(Line, Facebook等)與家人聯繫感情。您覺得夠不夠?
# 很夠了。科技讓我與家人緊緊連在一起,年節不見面也不要緊。 0
# 還算夠。有了科技,家人不必一定要聚在一起。 0
# 不夠!見面較能聯絡感情,所以仍然要經常找時間團聚。 1
# 絕對不夠!我不太相信用社群媒體可以聯繫感情,一定要見到面才行。 1
# (V48r) 大家圍著烤肉比其他活動要較為容易聯絡感情。
# 同意。 1
# 不會/不見得。 0一般的數據資料,以變數為名存放在不同的欄位中。這些變數的型態有三類:類別型(categorical/nominal)、順序型(ordinal)與連續型(numerical/continuous)。上述示範的是類別型變數的處理與描述,而以下要處理的是連續型變數「出生年」。我們先來看看受訪者的年齡分佈。順序型變數在某些場合被為類別型變數,在某些場合被視為連續型變數,因此在處理上有兩派說法,比較複雜,不納入本講的範圍。
# (V54)出生年
# 轉換為年紀並創造一個新變數
bbq$age <- 2017-bbq$V54
summary(bbq$age) #發現錯誤!
# 使用{dplyr}套件中的filter()工具來排除不合理觀察值
bbq <- filter(bbq, age>1) #留下年齡大於1的觀察值
save(bbq, file="BBQ.rda") #將更新後的資料存檔
plot_frq(bbq$age, type = "histogram", show.mean = T, normal.curve = T) #製圖summary(bbq$age)我們進一步使用兩個變數製圖的方式,用肉眼來看看兩個變數之間的潛在關係。
# 年齡與烤肉意願有沒有相關? 這裡用的是「水管」( |> )來走整個製圖流程。
bbq |>
group_by(V44r) |>
plot_frq(age, type = "histogram",
show.mean = T, normal.curve = T, xlim=c(10, 90)) |>
plot_grid()兩者間好似有關,尤其是出社會後的青壯世代好像比較有意願(明年烤肉)。
有同學看了這張圖後舉手表示,他覺得「認為見面團聚取代使用手機比較重要」(v45r)的人,跟「覺得自己時間充裕」(v37r)有關係。因為上班族總是比較忙,覺得時間不夠用,所以可能會選擇用手機與家人連線就好,不一定需要見面團聚。你覺得他是對的嗎?
虛無假設(H0 兩者無關): 自覺時間充裕 與 想見面團聚 之間 沒有明顯關係。
替代假設(H1 兩者有關):自覺時間充裕的人 應該會比較想 見面團聚。
我們可以來用R檢視一下相關性。
load("BBQ.rda")
library(sjPlot)
#製圖
plot_grpfrq(var.cnt=bbq$V45r,var.grp = bbq$V37r, legend.title = "個人可支配時間") #製表與顯示統計檢定結果
tab_xtab(bbq$V37r, bbq$V45r,
show.row.prc = TRUE, # 顯示列百分比
show.col.prc = TRUE # 顯示欄百分比
)| 最後,我們來談談節慶與團聚。 請問您覺得一天之內自己可以自由支配的時間(用來做自己想做的事)大約有多少? |
平時用社群媒體(Line, Facebook等)與家人聯繫感情。您覺得夠不夠? |
Total | |
|---|---|---|---|
| 不常見面不要緊 | 見面是必要的 | ||
| 足夠 | 155 38.8 % 72.8 % |
244 61.2 % 65.9 % |
399 100 % 68.4 % |
| 不夠 | 58 31.5 % 27.2 % |
126 68.5 % 34.1 % |
184 100 % 31.6 % |
| Total | 213 36.5 % 100 % |
370 63.5 % 100 % |
583 100 % 100 % |
| χ2=2.607 · df=1 · φ=0.071 · p=0.106 | |||
以上統計分析結果發現:這個自由發想、探索式隨意推想並未得到統計上的支持。
於是劉老師正式問大家:「明年中秋你們家會不會烤肉?」你要提出更正式的、有理由的假設。全班的同學七嘴八舌一番後提出了七個假設,劉老師收齊後,一起納入模型中進行較嚴格的檢驗。
假設一:對烤肉的新鮮感不再(V18r)便會降低明年烤肉的意願(V44r)
假設二:覺得烤肉影響健康(V20r)便會降低明年烤肉的意願
假設三:覺得烤肉花費造成負擔(V21r)便會降低明年烤肉的意願
假設四:覺得烤肉麻煩(V23r)便會降低明年烤肉的意願
假設五:覺得烤肉影響環境(V27r)便會降低明年烤肉的意願
假設六:覺得不必要見面(V45r)就能聯絡感情會降低明年烤肉的意願
假設七:認為烤肉不是聯絡感情的首選(V48r)便會降低明年烤肉的意願
你覺得做出這樣的模型檢驗,需要的語法複不複雜?(其實很短,就一行。)
load("BBQ.rda")
mod.1 <- glm(V44r ~ V18r+V20r+V21r+V23r+V27r+V45r+V48r,
data=bbq,
family=binomial)
summary(mod.1)
Call:
glm(formula = V44r ~ V18r + V20r + V21r + V23r + V27r + V45r +
V48r, family = binomial, data = bbq)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.22638 0.27366 -0.827 0.40810
V18r1 -0.82946 0.26991 -3.073 0.00212 **
V20r1 -0.23105 0.21476 -1.076 0.28199
V21r1 -0.25776 0.21286 -1.211 0.22592
V23r1 -0.68031 0.24455 -2.782 0.00540 **
V27r1 -0.02185 0.21487 -0.102 0.91899
V45r1 0.59284 0.19972 2.968 0.00299 **
V48r1 1.73865 0.19512 8.911 < 2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 807.30 on 582 degrees of freedom
Residual deviance: 653.72 on 575 degrees of freedom
(5 observations deleted due to missingness)
AIC: 669.72
Number of Fisher Scoring iterations: 4
那麼,若回頭考慮上述的年齡(age)這個變數呢?我們創造模型二,加入這個變數來檢驗新的假設。
我們更新一下上一個模型,就能直接做出模型二。
mod.2 <- update(mod.1, .~.+age)
summary(mod.2)
Call:
glm(formula = V44r ~ V18r + V20r + V21r + V23r + V27r + V45r +
V48r + age, family = binomial, data = bbq)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.306733 0.384714 -0.797 0.42528
V18r1 -0.842413 0.273404 -3.081 0.00206 **
V20r1 -0.231235 0.214792 -1.077 0.28168
V21r1 -0.248322 0.215176 -1.154 0.24848
V23r1 -0.684564 0.244983 -2.794 0.00520 **
V27r1 -0.024962 0.215196 -0.116 0.90765
V45r1 0.592500 0.199786 2.966 0.00302 **
V48r1 1.730717 0.196798 8.794 < 2e-16 ***
age 0.002559 0.008600 0.298 0.76605
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 807.30 on 582 degrees of freedom
Residual deviance: 653.63 on 574 degrees of freedom
(5 observations deleted due to missingness)
AIC: 671.63
Number of Fisher Scoring iterations: 4
進一步,我們將依變數從「明年烤肉」這個具體行動,置換為比較模糊概念的「見面團聚」(V45r),再次檢驗年紀是否明顯會影響見面團聚意願(模型三)。之前已經不顯著的相關性,在更嚴格的模型檢驗中顯然不會被看好。
mod.3 <- glm(V45r ~ age, data=bbq, family=binomial)
summary(mod.3)
Call:
glm(formula = V45r ~ age, family = binomial, data = bbq)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.418611 0.275955 1.517 0.129
age 0.003879 0.007629 0.508 0.611
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 765.40 on 582 degrees of freedom
Residual deviance: 765.14 on 581 degrees of freedom
(5 observations deleted due to missingness)
AIC: 769.14
Number of Fisher Scoring iterations: 4
解讀:模型二中的假設八並未得到統計證據的支持。模型三的檢驗,結果是一樣的:年紀對見面團聚意願的影響「不明顯」(學術語言是「統計上無顯著的影響」)。因此假設二、三、五、八中的自變數-依變數關係,都叫作「虛假關聯」。看似或以為兩兩之間有關係的概念,在更嚴格的模型檢驗下,那個關聯就不明顯了。因此,我們要小心過度推論自己眼前所見以為相關的現象。
使用不同軟體「跑統計」已不算新鮮事。很多時候用Excel就能做了。R出現後,統計分析領域結合了R之後,邁向了更跨域、更普遍的境界。今日連高中生都能做到透過資料揭密、發現真相的工作,也因此出現了「資料科學」這個新興領域以及「資料記者」這種新的職業。本講帶著各位已從頭走過一遍描述統計與推論統計。巡禮一遍。資料科學的世界是不是很有趣?
最重要的差異:
使用語法(而非滑鼠點放)來取用資料,例如 資料檔物件$變數。
使用套件(packages)來無窮擴充能量,例如要製作統計模型就下載對應的套件工具。
第二重要的差異:
語法檔可保留下來供檢誤與再製(所以沒有黑箱)。
可以用時開啟多個專案及多個資料檔進行分析。
R=free(既免費,也自由)。對照組:買SPSS (點我窺見價格)。想維持使用Excel並擴充到具有R或SPSS功能的方案….還是得用$解決。
第三重要的差異:
拼裝車(有褒意也有貶意)。
並非全中文環境(這並不算新鮮事)。
對一般人來說挺大的學習曲線(事實是幾乎每個統計軟體都需要相當程度的投入)。
有師傅帶著入門最好,但自學環境與材料在今日已相當充足。
長期使用要懂得保養(定期更新):引擎(R)、車體(RStudio)與配件(外掛/套件)