文檔的校調:讓你的報告更具可讀性

Qmd vs. Rmd

  • 我們使用qmd或rmd是為了實現專業的線上出版與溝通。

  • 2022起Quarto Markdown (qmd)與R Markdown (rmd)同時存在。都是Positron(前RStudio公司)的產品。rmd 繼續可用,但新功能集中到qmd。

  • 長期來看多數專家認為 Quarto 會逐漸成為主流,但多數人不主張立刻把現有 Rmd 全面改寫,而是新案用 Quarto、舊案視需要慢慢轉。喜歡rmd或qmd那一個都行,都能完成工作,只是要留意兩者語法上有些微不同。

  • 2024年後學習R的學生,若只需要R便可完成所有工作,可維持用rmd; 若有可能使用到其他資料科學語言(如Python)或界面(如VSCode),不妨直接從qmd開始。

  • 特色比較:

    • Rmd特色:

      • 單行{r, opt1=T, opt2=F}簡潔。

      • R多數專案多用此,來回切換qmd十分自然。

    • Qmd優勢:

      • 基於Rmd開發,但用 #| (hash pipe) 可分多行寫,超長選項不必擠在單行; 新格式更整齊。

      • 可全域直接在檔頭YAML設定,省去各別設定單一語法框的麻煩。

語法框的選項標記

qmd與rmd的語法框選項標記 (chunk options)用於控制每個語法框的顯示效果。

若要突顯自己的發現,請考慮將自己整串的語法,依想要呈現的方式,重新分散到不同的語法框。讓次要的、瑣碎的結果隱藏起來。讀者便能更聚焦在正文及你研究發現最重要的結果圖表上。

以下是qmd的語法框選項標記重點提示:

  • 「要執行程式碼但不顯示結果」用的是 output=false

    #| output: false
  • 「不要顯示程式碼」用 echo=F

  • 「不要執行程式碼」用 eval=F

  • 「把訊息或警告隱藏起來」用 message=Fwarning=F

  • 「要執行但輸出結果通通都不顯示」才用(終極的) include = F

檔頭的調節

把以下參數放入檔頭(又叫文件頭或 YAML區塊)。

注意這裡的的縮排要用空格來進行,不要用tab。

顯示程式碼
format:
  html:
    theme: lumen 
    toc: true          # 顯示章節目錄
    toc-depth: 3       # 目錄顯示到第 3 層標題
    code-fold: true    # 程式碼預設可折疊
    code-summary: "顯示程式碼"   # 折疊按鈕的文字

自選主題風格

常見內建主題風格包括

類型 主題名稱(填在 theme: 後面)
預設 default, pandoc, none
淺色 cerulean, cosmo, flatly, journal, litera, lumen, lux, materia, minty, morph, pulse, quartz, sandstone, simplex, sketchy, spacelab, united, vapor, yeti, zephyr
深色 cyborg, darkly, slate, solar, superhero

在學界/課堂常見用法裡,qmd 內建的 HTML theme 大致有這三個特別常被採用:

  1. flatly:藍色系、乾淨、正式感足,報告與課堂講義都很多人用。

  2. cosmo:顏色稍微鮮明一點,但仍然偏正式,適合簡報式報告或教學投影片風格的 HTML。

  3. lumen:很明亮、留白感多,適合教學講義與給學生看的說明文件。

以BBQ(8.5)為例實作目標

我們使用由smilepoll.tw提供的開放資料BBQ.csv(在資料區可看到BBQ問卷檔及報表),學習如何整合本書之前的重點,進行變數描述、存檔、進行MCA探索式分析,以及二元勝算對數(確認式)分析實作。

顯示程式碼
# 在正式操作前,用本資料夾中的章節專案檔(.Rproj)點開專案再正式開始練習
# 請用此指令確認目前工作路徑是現在章節的資料夾
here::here() # suggestion: "chapter8/8.5_網路調查資料分析實作_BBQ"

假設

假設一:對烤肉的新鮮感不再便會降低明年烤肉的意願
假設二:覺得烤肉影響健康便會降低明年烤肉的意願
假設三:覺得烤肉花費造成負擔便會降低明年烤肉的意願
假設四:覺得烤肉麻煩便會降低明年烤肉的意願
假設五:覺得烤肉影響環境便會降低明年烤肉的意願
假設六:覺得不必要見面就能聯絡感情會降低明年烤肉的意願
假設七:認為烤肉不是聯絡感情的首選便會降低明年烤肉的意願

初步處理資料檔

顯示程式碼
# 讀入資料檔並將變數名稱字串轉為變數標籤
library(readr)
bbq <- read_csv("BBQ.csv")
nrow(bbq) # 共650列
ncol(bbq) # 共58欄

# 取出變數名稱當作變數標籤
varlabels <- colnames(bbq) # 先把變數名稱存起來當標籤用

# 拿掉標籤之後的變數名稱重新命名為V1, V2, ...
colnames(bbq)[1:58] <- paste("V", 1:58, sep = "")

# 為變數名稱裝上標籤
sjlabelled::set_label(bbq) <- varlabels # 把剛剛存的標籤裝上去

# 批次清理無效值 better way?
bbq <- sjmisc::set_na(bbq, na = "NA")

invisible(varlabels) #列出每個變數的標籤

變數編碼與描述

顯示程式碼
library(sjmisc)
library(sjPlot)
invisible(names(bbq)) # 確認有58個變數

# 如果你是Mac使用者:可能會遇到在之後的圖片的標籤中文字變成方塊的狀況。這是你的電腦中R預設的語系,與RStudio預設的顯示語系不一致所造成的。請用下一行調整你目前顯示主題下的顯示字型(「蘋方繁中」為mac的中文字體):
sjPlot::set_theme(theme.font = "PingFang TC")


## 依變數:「明年會不會烤肉」
# (V44)說回到烤肉,請問您明年會不會想全家人一起烤肉? (0~10)
# table(bbq$V44)

bbq$V44r <- rec(bbq$V44, rec = "0:5=0[不會]; 6:10=1[會]", as.num = F)
frq(bbq$V44, out="viewer")
說回到烤肉,請問您明年會不會想全家人一起烤肉? (x) <numeric>
val label frq raw.prc valid.prc cum.prc
0 33 5.08 5.08 5.08
1 20 3.08 3.08 8.15
2 23 3.54 3.54 11.69
3 45 6.92 6.92 18.62
4 49 7.54 7.54 26.15
5 136 20.92 20.92 47.08
6 109 16.77 16.77 63.85
7 85 13.08 13.08 76.92
8 56 8.62 8.62 85.54
9 33 5.08 5.08 90.62
10 61 9.38 9.38 100.00
NA NA 0 0.00 NA NA
total N=650 · valid N=650 · x̄=5.66 · σ=2.57
顯示程式碼
frq(bbq$V44r, out="v")
說回到烤肉,請問您明年會不會想全家人一起烤肉? (x) <categorical>
val label frq raw.prc valid.prc cum.prc
0 不會 306 47.08 47.08 47.08
1 344 52.92 52.92 100.00
NA NA 0 0.00 NA NA
total N=650 · valid N=650 · x̄=0.53 · σ=0.50
顯示程式碼
plot_frq(bbq$V44r)

顯示程式碼
## 自變數
# 假設一:「新鮮感」
# (V18)如果大家都烤肉,您會覺得「不好玩」嗎?*
#  跟別人做類似的活動,不好玩 1
#  跟別人做類似的活動也很ok啊 2
bbq$V18r <- rec(bbq$V18, rec = "1=1[不新鮮]; 2=0[沒有差]", as.num = F)
frq(bbq$V18r, out="v")
如果大家都烤肉,您會覺得「不好玩」嗎? (x) <categorical>
val label frq raw.prc valid.prc cum.prc
0 沒有差 540 83.08 83.08 83.08
1 不新鮮 110 16.92 16.92 100.00
NA NA 0 0.00 NA NA
total N=650 · valid N=650 · x̄=0.17 · σ=0.38
顯示程式碼
# 假設二:「對健康影響的認知」
# (V20)您覺得戶外的烤肉對您的健康有多大影響?*
#  影響很大 1
#  影響不大 2
#  完全沒影響 3
# table(bbq$V20)
bbq$V20r <- rec(
  bbq$V20,
  rec = "1=1[有很影響]; 2:3=0[影響不大或沒影響]",
  as.num = F
)
frq(bbq$V20r)
無論您喜不喜歡烤肉,現在我們來談談對它的印象吧。 您覺得戶外的烤肉對您的健康有多大影響? (x) <categorical> 
# total N=650 valid N=650 mean=0.36 sd=0.48

Value |            Label |   N | Raw % | Valid % | Cum. %
---------------------------------------------------------
    0 | 影響不大或沒影響 | 414 | 63.69 |   63.69 |  63.69
    1 |         有很影響 | 236 | 36.31 |   36.31 | 100.00
 <NA> |             <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
# 假設三:「金錢負擔」
# (V21)對您來說,烤肉費用的支出是不是一種負擔?*
#  是,的確是種負擔 1
#  還好 2
#  不會 3
# table(bbq$V21)
bbq$V21r <- rec(bbq$V21, rec = "1=1[是負擔]; 2:3=0[還好或不算負擔]", as.num = F)
frq(bbq$V21r)
對您來說,烤肉費用的支出是不是一種負擔? (x) <categorical> 
# total N=650 valid N=650 mean=0.34 sd=0.47

Value |          Label |   N | Raw % | Valid % | Cum. %
-------------------------------------------------------
    0 | 還好或不算負擔 | 430 | 66.15 |   66.15 |  66.15
    1 |         是負擔 | 220 | 33.85 |   33.85 | 100.00
 <NA> |           <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
# 假設四:「心力負擔」
# (V23)準備烤肉食材對您來說會不會很麻煩?*
#  會麻煩 1
#  不會麻煩 2
# table(bbq$V23)
bbq$V23r <- rec(bbq$V23, rec = "1=1[會麻煩]; 2:3=0[不會麻煩]", as.num = F)
frq(bbq$V23r) #
準備烤肉食材對您來說會不會很麻煩? (x) <categorical> 
# total N=650 valid N=650 mean=0.74 sd=0.44

Value |    Label |   N | Raw % | Valid % | Cum. %
-------------------------------------------------
    0 | 不會麻煩 | 167 | 25.69 |   25.69 |  25.69
    1 |   會麻煩 | 483 | 74.31 |   74.31 | 100.00
 <NA> |     <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
# 假設五:「對環境影響的認知」
# (V27)您在不在意您烤肉時造成的污染嗎?*
#  會在意,覺得多少影響了環境 1
#  還好 2
#  不會在意 3
# table(bbq$V27)
bbq$V27r <- rec(bbq$V27, rec = "1=1[會在意]; 2:3=0[還好/不會在意]", as.num = F)
frq(bbq$V27r)
您在不在意您烤肉時造成的污染嗎? (x) <categorical> 
# total N=650 valid N=650 mean=0.63 sd=0.48

Value |         Label |   N | Raw % | Valid % | Cum. %
------------------------------------------------------
    0 | 還好/不會在意 | 240 | 36.92 |   36.92 |  36.92
    1 |        會在意 | 410 | 63.08 |   63.08 | 100.00
 <NA> |          <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
# 假設六:「見面聯絡感情是必要的(必要性)」
#  (V45) 平時用社群媒體(Line, Facebook等)與家人聯繫感情。您覺得夠不夠?*
#  很夠了。科技讓我與家人緊緊連在一起,年節不見面也不要緊。 1
#  還算夠。有了科技,家人不必一定要聚在一起。 2
#  不夠!見面較能聯絡感情,所以仍然要經常找時間團聚。 3
#  絕對不夠!我不太相信用社群媒體可以聯繫感情,一定要見到面才行。 4
#  我有其他想法::  * 90
# table(bbq$V45)
bbq$V45r <- rec(
  bbq$V45,
  rec = "1:2=0[不常見面不要緊]; 3,4=1[見面是必要的] ",
  as.num = F
)
frq(bbq$V45r)
平時用社群媒體(Line, Facebook等)與家人聯繫感情。您覺得夠不夠? (x) <categorical> 
# total N=650 valid N=645 mean=0.64 sd=0.48

Value |          Label |   N | Raw % | Valid % | Cum. %
-------------------------------------------------------
    0 | 不常見面不要緊 | 234 | 36.00 |   36.28 |  36.28
    1 |   見面是必要的 | 411 | 63.23 |   63.72 | 100.00
 <NA> |           <NA> |   5 |  0.77 |    <NA> |   <NA>
顯示程式碼
# 假設七:「為聯絡感情烤肉是首選(重要性)」
#  (V48) 大家圍著烤肉比其他活動要較為容易聯絡感情。*
#  同意。 1
#  不會/不見得。 2
# table(bbq$V48)
bbq$V48r <- rec(bbq$V48, rec = "1=1[同意]; 2=0[不見得] ", as.num = F)
frq(bbq$V48r)
大家圍著烤肉比其他活動要較為容易聯絡感情。 (x) <categorical> 
# total N=650 valid N=650 mean=0.47 sd=0.50

Value |  Label |   N | Raw % | Valid % | Cum. %
-----------------------------------------------
    0 | 不見得 | 343 | 52.77 |   52.77 |  52.77
    1 |   同意 | 307 | 47.23 |   47.23 | 100.00
 <NA> |   <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
## 控制變數
# 「今年中秋有與家人團聚」
# (V2) 今年的中秋節您有與家人團聚嗎?(延後到國慶連假也算)*
#  有 1
#  沒有 2
# table(bbq$V2)
bbq$V2r <- rec(bbq$V2, rec = "1=1[有]; 2=0[沒有] ", as.num = F)
frq(bbq$V2r)
今年的中秋節您有與家人團聚嗎?(延後到國慶連假也算) (x) <categorical> 
# total N=650 valid N=650 mean=0.83 sd=0.37

Value | Label |   N | Raw % | Valid % | Cum. %
----------------------------------------------
    0 |  沒有 | 109 | 16.77 |   16.77 |  16.77
    1 |    有 | 541 | 83.23 |   83.23 | 100.00
 <NA> |  <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
# 「今年有參加家庭烤肉活動」
# (V3)  今年中秋節(含國慶連假)團圓時您有烤肉嗎?*
#  有 1
#  沒有 2
# table(bbq$V3)
bbq$V3r <- rec(bbq$V3, rec = "1=1[有]; 2=0[沒有(含沒有團聚)] ", as.num = F)
frq(bbq$V3r)
今年中秋節(含國慶連假)團圓時您有烤肉嗎? (x) <categorical> 
# total N=650 valid N=650 mean=0.50 sd=0.50

Value |              Label |   N | Raw % | Valid % | Cum. %
-----------------------------------------------------------
    0 | 沒有(含沒有團聚) | 328 | 50.46 |   50.46 |  50.46
    1 |                 有 | 322 | 49.54 |   49.54 | 100.00
 <NA> |               <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
# 「在意對環境的危害」
# (V24)在烤肉活動中,請問下列哪一項是您最無法忍受的?*
#  空氣汙染 1
#  垃圾 2
#  噪音 3
#  隨處亂滴的醬汁 4
#  我覺得還好,沒那麼嚴重 5
#  我最受不了的是::  * 90
bbq$V24r <- rec(
  bbq$V24,
  rec = "1,2,3,4=1[有環境顧慮]; 5=0[都還好]=; 90=NA",
  as.num = F
)
frq(bbq$V24r)
在烤肉活動中,請問下列哪一項是您最無法忍受的? (x) <categorical> 
# total N=650 valid N=634 mean=0.83 sd=0.38

Value |      Label |   N | Raw % | Valid % | Cum. %
---------------------------------------------------
    0 |     都還好 | 108 | 16.62 |   17.03 |  17.03
    1 | 有環境顧慮 | 526 | 80.92 |   82.97 | 100.00
 <NA> |       <NA> |  16 |  2.46 |    <NA> |   <NA>
顯示程式碼
# 「常用手機與網路聯絡感情」
# (V49)「請問您多常使用手機上的社群媒體(Line, FB等)APP與家人聯絡?」*
#  幾乎天天使用 1
#  偶爾使用 2
#  從來沒用(我用手機只打電話) 3
#  我不常使用手機 4
bbq$V49r <- rec(bbq$V49, rec = "1=1[很常用]; 2:4=0[偶爾/不常用]", as.num = F)
frq(bbq$V49r)
「請問您多常使用手機上的社群媒體(Line, FB等)APP與家人聯絡?」 (x) <categorical> 
# total N=650 valid N=650 mean=0.50 sd=0.50

Value |       Label |   N | Raw % | Valid % | Cum. %
----------------------------------------------------
    0 | 偶爾/不常用 | 325 |    50 |      50 |     50
    1 |      很常用 | 325 |    50 |      50 |    100
 <NA> |        <NA> |   0 |     0 |    <NA> |   <NA>
顯示程式碼
# 「聯絡家人時偏好語音(還是文字)」。
# (V50)請問您使用手機與家人聯絡時,比較喜歡使用文字簡訊(例如Line留言),還是使用講話(含視訊)?*
#  整體來說比較常用文字簡訊 1
#  整體來說比較常用語音講話(含視訊) 2
bbq$V50r <- rec(
  bbq$V50,
  rec = "1=0[偏好文字簡訊]; 2=1[偏好語音視訊]",
  as.num = F
)
frq(bbq$V50r)
請問您使用手機與家人聯絡時,比較喜歡使用文字簡訊(例如Line留言),還是使用講話(含視訊)? (x) <categorical> 
# total N=650 valid N=650 mean=0.33 sd=0.47

Value |        Label |   N | Raw % | Valid % | Cum. %
-----------------------------------------------------
    0 | 偏好文字簡訊 | 438 | 67.38 |   67.38 |  67.38
    1 | 偏好語音視訊 | 212 | 32.62 |   32.62 | 100.00
 <NA> |         <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
#「時間負擔」
# (V37) 請問您覺得一天之內自己可以自由支配的時間(用來做自己想做的事)大約有多少?*
#  很多 1
#  還好 2
#  有點少 3
#  完全沒有 4
bbq$V37r <- rec(bbq$V37, rec = "1,2=0[足夠]; 3,4=1[不夠]", as.num = F)
frq(bbq$V37r)
最後,我們來談談節慶與團聚。 請問您覺得一天之內自己可以自由支配的時間(用來做自己想做的事)大約有多少? (x) <categorical> 
# total N=650 valid N=650 mean=0.32 sd=0.47

Value | Label |   N | Raw % | Valid % | Cum. %
----------------------------------------------
    0 |  足夠 | 445 | 68.46 |   68.46 |  68.46
    1 |  不夠 | 205 | 31.54 |   31.54 | 100.00
 <NA> |  <NA> |   0 |  0.00 |    <NA> |   <NA>
顯示程式碼
## 儲存檔案
names(bbq) # 確認包含了上面新增的14個變數
 [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"
顯示程式碼
save(bbq, file = "BBQ.rda")
rm(list = ls())

驗證式分析:二元勝算對數模型

假設一:對烤肉的新鮮感不再便會降低明年烤肉的意願
假設二:覺得烤肉影響健康便會降低明年烤肉的意願
假設三:覺得烤肉花費造成負擔便會降低明年烤肉的意願
假設四:覺得烤肉麻煩便會降低明年烤肉的意願
假設五:覺得烤肉影響環境便會降低明年烤肉的意願
假設六:覺得不必要見面就能聯絡感情會降低明年烤肉的意願
假設七:認為烤肉不是聯絡感情的首選便會降低明年烤肉的意願

顯示程式碼
library(car)
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.103      0.261   -0.39  0.69368    
V18r1         -0.932      0.259   -3.59  0.00033 ***
V20r1         -0.230      0.203   -1.13  0.25797    
V21r1         -0.254      0.205   -1.24  0.21426    
V23r1         -0.701      0.232   -3.01  0.00257 ** 
V27r1         -0.111      0.206   -0.54  0.59075    
V45r1          0.517      0.192    2.70  0.00701 ** 
V48r1          1.803      0.187    9.64  < 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: 892.04  on 644  degrees of freedom
Residual deviance: 710.49  on 637  degrees of freedom
  (5 observations deleted due to missingness)
AIC: 726.5

Number of Fisher Scoring iterations: 4
顯示程式碼
vif(mod.1)
V18r V20r V21r V23r V27r V45r V48r 
1.02 1.14 1.11 1.11 1.17 1.02 1.02 
顯示程式碼
## 模型二:加入其他控制變數的完整模型
mod.2 <- update(mod.1, . ~ . + V2r + V3r + V24r + V49r + V50r + V37r)
summary(mod.2)

Call:
glm(formula = V44r ~ V18r + V20r + V21r + V23r + V27r + V45r + 
    V48r + V2r + V3r + V24r + V49r + V50r + V37r, family = binomial, 
    data = bbq)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -1.6128     0.4438   -3.63  0.00028 ***
V18r1        -0.7165     0.2914   -2.46  0.01392 *  
V20r1        -0.4371     0.2260   -1.93  0.05308 .  
V21r1        -0.1969     0.2288   -0.86  0.38938    
V23r1        -0.6465     0.2616   -2.47  0.01348 *  
V27r1         0.0261     0.2430    0.11  0.91455    
V45r1         0.7346     0.2191    3.35  0.00080 ***
V48r1         1.4889     0.2062    7.22  5.2e-13 ***
V2r1          0.7186     0.2929    2.45  0.01415 *  
V3r1          1.5821     0.2098    7.54  4.7e-14 ***
V24r1        -0.1383     0.2943   -0.47  0.63843    
V49r1         0.4945     0.2100    2.36  0.01851 *  
V50r1        -0.0502     0.2261   -0.22  0.82446    
V37r1        -0.2536     0.2204   -1.15  0.24977    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 870.03  on 628  degrees of freedom
Residual deviance: 600.50  on 615  degrees of freedom
  (21 observations deleted due to missingness)
AIC: 628.5

Number of Fisher Scoring iterations: 4
顯示程式碼
vif(mod.2)
V18r V20r V21r V23r V27r V45r V48r  V2r  V3r V24r V49r V50r V37r 
1.04 1.15 1.15 1.12 1.33 1.08 1.02 1.05 1.07 1.18 1.08 1.09 1.03 
顯示程式碼
## 模型三:留下有效的控制變數的最終模型
mod.3 <- update(mod.1, . ~ . + V3r + V49r)
summary(mod.3)

Call:
glm(formula = V44r ~ V18r + V20r + V21r + V23r + V27r + V45r + 
    V48r + V3r + V49r, family = binomial, data = bbq)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -1.2836     0.3200   -4.01  6.0e-05 ***
V18r1        -0.7424     0.2825   -2.63  0.00859 ** 
V20r1        -0.3987     0.2206   -1.81  0.07068 .  
V21r1        -0.2475     0.2226   -1.11  0.26621    
V23r1        -0.5814     0.2523   -2.30  0.02119 *  
V27r1        -0.0259     0.2232   -0.12  0.90764    
V45r1         0.7173     0.2113    3.39  0.00069 ***
V48r1         1.5509     0.2007    7.73  1.1e-14 ***
V3r1          1.6513     0.2025    8.16  3.5e-16 ***
V49r1         0.5223     0.2010    2.60  0.00938 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 892.04  on 644  degrees of freedom
Residual deviance: 627.94  on 635  degrees of freedom
  (5 observations deleted due to missingness)
AIC: 647.9

Number of Fisher Scoring iterations: 4
顯示程式碼
vif(mod.3)
V18r V20r V21r V23r V27r V45r V48r  V3r V49r 
1.02 1.15 1.13 1.11 1.19 1.06 1.02 1.05 1.04 

探索式分析

顯示程式碼
load("BBQ.rda")
library(dplyr)
library(FactoMineR)
library(factoextra)

bbqMCA <- select(
  bbq,
  V44r,
  V18r,
  V20r,
  V21r,
  V23r,
  V27r,
  V45r,
  V48r,
  V2r,
  V3r,
  V24r,
  V49r,
  V50r,
  V37r
)
bbqMCA.nona <- na.omit(bbqMCA)
nrow(bbqMCA.nona) # 629
[1] 629
顯示程式碼
names(bbqMCA.nona)
 [1] "V44r" "V18r" "V20r" "V21r" "V23r" "V27r" "V45r" "V48r" "V2r"  "V3r" 
[11] "V24r" "V49r" "V50r" "V37r"
顯示程式碼
res <- MCA(bbqMCA.nona, ncp = 5, graph = F)
fviz_screeplot(res, ncp = 10)

顯示程式碼
# 變數關聯關係圖
plot(
  res,
  axes = c(1, 2),
  new.plot = TRUE,
  col.var = "red",
  col.ind = "black",
  col.ind.sup = "black",
  col.quali.sup = "darkgreen",
  col.quanti.sup = "blue",
  label = c("var"),
  cex = 0.8,
  selectMod = "cos2",
  invisible = c("ind", "quali.sup"),
  autoLab = "yes",
  title = ""
)

顯示程式碼
# 初步假設:覺得自己時間充裕的人(V37r=0),愈可能傾向見面團聚取代使用手機(V45r=1);相反的,自覺一天內時間不足的人,反而傾向以手機來取代見面團聚。

## 用卡方檢定來進一步確認肉眼所預判潛在變數之間的相關性
# 做法一
library(gmodels)
CrossTable(
  bbq$V37r,
  bbq$V45r,
  chisq = T, # 顯示卡方檢定結果
  prop.chisq = F, # 不必顯示每個細格的卡方值貢獻程度
  prop.t = F # 不必顯示每個細格次數所佔全體百分比
)

 
   Cell Contents
|-------------------------|
|                       N |
|           N / Row Total |
|           N / Col Total |
|-------------------------|

 
Total Observations in Table:  645 

 
             | bbq$V45r 
    bbq$V37r |         0 |         1 | Row Total | 
-------------|-----------|-----------|-----------|
           0 |       173 |       269 |       442 | 
             |     0.391 |     0.609 |     0.685 | 
             |     0.739 |     0.655 |           | 
-------------|-----------|-----------|-----------|
           1 |        61 |       142 |       203 | 
             |     0.300 |     0.700 |     0.315 | 
             |     0.261 |     0.345 |           | 
-------------|-----------|-----------|-----------|
Column Total |       234 |       411 |       645 | 
             |     0.363 |     0.637 |           | 
-------------|-----------|-----------|-----------|

 
Statistics for All Table Factors


Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 =  4.97     d.f. =  1     p =  0.0257 

Pearson's Chi-squared test with Yates' continuity correction 
------------------------------------------------------------
Chi^2 =  4.59     d.f. =  1     p =  0.0322 

 
顯示程式碼
# 做法二
library(sjPlot)
tab_xtab(
  bbq$V37r,
  bbq$V45r,
  show.row.prc = TRUE, # 顯示列百分比
  show.col.prc = TRUE # 顯示欄百分比
)
最後,我們來談談節慶與團聚。
請問您覺得一天之內自己可以自由支配的時間(用來做自己想做的事)大約有多少?
平時用社群媒體(Line,
Facebook等)與家人聯繫感情。您覺得夠不夠?
Total
不常見面不要緊 見面是必要的
足夠 173
39.1 %
73.9 %
269
60.9 %
65.5 %
442
100 %
68.5 %
不夠 61
30 %
26.1 %
142
70 %
34.5 %
203
100 %
31.5 %
Total 234
36.3 %
100 %
411
63.7 %
100 %
645
100 %
100 %
χ2=4.588 · df=1 · &phi=0.088 · p=0.032
顯示程式碼
## 與資料喝杯咖啡:拿資料來檢視自己對變數關係的判斷
mod.4 <- glm(V45r ~ V37r, data = bbq, family = binomial)
summary(mod.4)

Call:
glm(formula = V45r ~ V37r, family = binomial, data = bbq)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   0.4414     0.0975    4.53  5.9e-06 ***
V37r1         0.4035     0.1815    2.22    0.026 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 844.96  on 644  degrees of freedom
Residual deviance: 839.90  on 643  degrees of freedom
  (5 observations deleted due to missingness)
AIC: 843.9

Number of Fisher Scoring iterations: 4

參考資料

Dyer, J. B. (2017). Political science and american political thought. Political Science and Politics, 50(3), 784–788. https://doi.org/10.1017/S1049096517000592

Everitt, J. (2021). Academic absences, disciplinary siloes and methodological prejudices within the political science discipline in Canada. Canadian Journal of Political Science-Revue Canadienne De Science Politique, 54(4), 749–768. https://doi.org/10.1017/S0008423921000883

Wilson, M. C. (2017). Trends in political science research and the progress of comparative politics. Ps-Political Science & Politics, 50(4), 979–984. https://doi.org/10.1017/S104909651700110X