台灣媒體的收視偏好與政黨傾向:台灣媒體品牌的政治身分分析

Author

陳博新

一.研究動機

在台灣政治討論中,新聞媒體經常被賦予明顯的政治標籤。特別是在網路討論裡,民眾常以「偏藍」、「偏綠」來形容不同電視新聞台,例如將三立、民視視為偏綠,將中天、TVBS視為偏藍。這些說法雖然在日常政治討論中相當常見,但若只停留在這種二分式標籤,容易忽略不同新聞台受眾之間更細緻的差異。例如,同樣被認為偏藍的新聞台,其受眾是否都具有相同的政黨傾向、統獨立場與政治人物評價?同樣被認為偏綠的新聞台,是否也代表完全相同的政治認同結構?這些問題都需要透過資料進一步檢視。

我想看的並不是單純判斷哪一台新聞偏藍或偏綠,而是想進一步探討:主要收看不同電視新聞台的民眾,是否會和特定政黨傾向、統獨立場,以及對政治人物的評價形成相近的空間位置。換言之,本研究想了解電視新聞台是否不只是政治資訊來源,也可能成為民眾確認政治身份、理解政黨與政治人物形象的日常媒介。

二.資料來源

本分析採用之資料來自「政治領導與網路政治:民眾、網路聲量與記者的觀點」。計畫編號為 MOST 108-2410-H-305-045-SSS,執行單位為國立臺北大學公共行政暨政策學系,計畫主持人為劉嘉薇教授。調查類型為抽查,調查方式是電話訪問。調查時間為109年3月20日至109年3月23日間執行電話訪問,完成1,081份有效樣本數,在信心水準95%的情況下,抽樣誤差介於+-2.98%之間。

官網連結:SRDA 學術調查研究資料庫 (E10805)

三.研究背景

2018 九合一選舉後,台灣政治進入一個很適合觀察媒體與政治身份關係的時期。選舉結果上,國民黨在地方選舉大勝,民進黨挫敗,蔡英文辭去黨主席;但接著 2019 香港反送中、兩岸壓力與 2020 總統大選,又讓蔡英文的政治位置快速反轉。這種「地方選舉挫敗」和「總統層級支持回升」之間的張力,正好提供一個問題:民眾收看不同新聞台時,究竟是在接收新聞,還是在選擇一套與自己政治身份相符的解釋框架?在這樣的政治環境中,選擇性接觸可以作為本研究的理論地基。選擇性接觸不是本研究要證明的結果,而是用來說明為什麼新聞台收視偏好可能會和政黨傾向、統獨立場、蔡馬形象連動。也就是說,民眾可能會傾向接觸與自身政治立場相符的媒體環境;而媒體環境也可能進一步強化其既有立場。相關研究指出,在多元且政治化的媒體環境中,媒體選擇更容易呈現態度一致的暴露模式。

四.處理資料

library(tidyverse)
library(haven)
library(sjlabelled)
library(sjmisc)
library(sjPlot)
library(FactoMineR)
library(factoextra)
library(corrplot)


lead <- read_sav("data.sav", user_na = TRUE)

names(lead)
 [1] "v11"       "v12"       "v13"       "v14"       "v15"       "v16"      
 [7] "v17"       "v211"      "v212"      "v221"      "v222"      "v231"     
[13] "v232"      "v241"      "v242"      "v251"      "v252"      "v261"     
[19] "v262"      "v271"      "v272"      "v281"      "v282"      "v311"     
[25] "v312"      "v321"      "v322"      "v331"      "v332"      "v341"     
[31] "v342"      "v41"       "v42"       "v421"      "v422"      "v43"      
[37] "v431"      "v432"      "v44"       "v441"      "v442"      "v51"      
[43] "v511"      "v512"      "v513"      "v514"      "v515"      "v516"     
[49] "v517"      "v518"      "v519"      "v5110"     "v5111"     "v5112"    
[55] "v5113"     "v5114"     "v5115"     "v5116"     "v5117"     "v5118"    
[61] "v5119"     "v5120"     "v5121"     "v5122"     "K52_birth" "v53"      
[67] "v54"       "v55"       "v56"       "v57"       "v571"      "v58"      
[73] "v6"        "v7"        "REC_NO"    "w9"       
str(lead)
tibble [1,081 × 76] (S3: tbl_df/tbl/data.frame)
 $ v11      : dbl+lbl [1:1081] 10, 10, 10,  5,  9,  3, 10, 10,  8, 10,  3,  9,  8,  ...
   ..@ label        : chr "Q1-1.請問「品格(台:品德)」的部分,0到10分您會打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 4
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v12      : dbl+lbl [1:1081] 10,  9,  8,  5,  8,  7, 10, 10, 10, 10,  3,  9,  7,  ...
   ..@ label        : chr "Q1-2.請問「提出清楚施政目標」的部分,0到10分您會打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 3
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v13      : dbl+lbl [1:1081]  7,  9, 10,  5,  8,  0, 10,  9,  8, 10,  3,  9,  8,  ...
   ..@ label        : chr "Q1-3.請問「鼓舞人民士氣(台:鼓勵人心)」的部分,0到10分您會打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 4
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v14      : dbl+lbl [1:1081]  8, 10,  8,  0,  8,  3, 10, 10, 10, 10,  3,  8,  9,  ...
   ..@ label        : chr "Q1-4.請問「團結社會各界」的部分,0到10分您會打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 5
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v15      : dbl+lbl [1:1081] 10,  9, 10,  5, 10,  3, 10, 10, 10,  9,  3, 10, 10,  ...
   ..@ label        : chr "Q1-5.請問「對國家效忠(台:忠心)」的部分,0到10分您會打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 5
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v16      : dbl+lbl [1:1081] 10,  8,  9,  5,  8,  6, 10,  8,  8, 10,  3,  8,  7, 1...
   ..@ label        : chr "Q1-6.請問「回應民眾需要」的部分,0到10分您會打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v17      : dbl+lbl [1:1081]  9,  9, 10,  5,  9,  4, 10, 10, 10,  8,  3,  9,  9,  ...
   ..@ label        : chr "Q1-7.請問「值得民眾信任」的部分,0到10分您會打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 5
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v211     : dbl+lbl [1:1081]  5,  6, 10,  5,  8,  6,  7,  9,  6,  9,  2,  9,  7,  ...
   ..@ label        : chr "Q2-1-1.關於「品格(台:品德)」的部分,請問您會給蔡英文總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v212     : dbl+lbl [1:1081]  6, 10,  4,  8,  3,  5,  7,  7, 10,  5,  3,  6,  1,  ...
   ..@ label        : chr "Q2-1-2.關於「品格(台:品德)」的部分,請問您會給馬英九總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v221     : dbl+lbl [1:1081]  6,  7,  8,  5,  7,  6,  6,  9,  6,  8,  3,  9,  8,  ...
   ..@ label        : chr "Q2-2-1.關於「提出清楚施政目標」的部分,請問您會給蔡英文總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v222     : dbl+lbl [1:1081] 7, 8, 6, 5, 6, 5, 8, 8, 7, 6, 3, 6, 1, 4, 2, 6, 8, 6,...
   ..@ label        : chr "Q2-2-2.關於「提出清楚施政目標」的部分,請問您會給馬英九總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v231     : dbl+lbl [1:1081]  5,  6,  9,  5,  7,  6,  9,  9,  6,  9,  3,  9,  8,  ...
   ..@ label      : chr "Q2-3-1.關於「鼓舞人民士氣(台:鼓勵人心)」的部分,請問您會給蔡英文總統打幾分?"
   ..@ na_range   : num [1:2] 95 99
   ..@ format.spss: chr "F2.0"
   ..@ labels     : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v232     : dbl+lbl [1:1081]  6,  6,  4,  5,  5,  6,  8,  7,  8,  5,  3,  6,  0,  ...
   ..@ label        : chr "Q2-3-2.關於「鼓舞人民士氣(台:鼓勵人心)」的部分,請問您會給馬英九總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 9
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v241     : dbl+lbl [1:1081]  5,  5,  9,  0,  7,  4,  7,  9,  5, 10,  3,  9,  7,  ...
   ..@ label        : chr "Q2-4-1.關於「團結社會各界」的部分,請問您會給蔡英文總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v242     : dbl+lbl [1:1081] 7, 8, 3, 8, 5, 4, 7, 6, 8, 7, 3, 5, 1, 5, 2, 5, 8, 7,...
   ..@ label      : chr "Q2-4-2.關於「團結社會各界」的部分,請問您會給馬英九總統打幾分?"
   ..@ na_range   : num [1:2] 95 99
   ..@ format.spss: chr "F2.0"
   ..@ labels     : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v251     : dbl+lbl [1:1081]  6,  7,  8,  5,  8,  5,  9,  9,  6, 10,  3, 10,  9,  ...
   ..@ label        : chr "Q2-5-1.關於「對國家效忠(台:忠心)」的部分,請問您會給蔡英文總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v252     : dbl+lbl [1:1081]  6,  9,  8,  5,  2,  4,  9,  7, 10,  6,  3,  4,  0,  ...
   ..@ label        : chr "Q2-5-2.關於「對國家效忠(台:忠心)」的部分,請問您會給馬英九總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v261     : dbl+lbl [1:1081]  5,  5,  9,  8,  8,  6,  8,  8,  6,  9,  3,  9,  7,  ...
   ..@ label        : chr "Q2-6-1.關於「回應民眾需要」的部分,請問您會給蔡英文總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v262     : dbl+lbl [1:1081] 5, 7, 8, 5, 3, 6, 7, 5, 8, 6, 3, 6, 0, 3, 2, 6, 8, 6,...
   ..@ label      : chr "Q2-6-2.關於「回應民眾需要」的部分,請問您會給馬英九總統打幾分?"
   ..@ na_range   : num [1:2] 95 99
   ..@ format.spss: chr "F2.0"
   ..@ labels     : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v271     : dbl+lbl [1:1081]  6,  5,  9,  5,  8,  5,  6,  8,  6,  8,  3, 10,  9,  ...
   ..@ label        : chr "Q2-7-1.關於「值得民眾信任」的部分,請問您會給蔡英文總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v272     : dbl+lbl [1:1081] 6, 8, 3, 8, 2, 6, 8, 7, 8, 5, 3, 5, 0, 6, 2, 5, 8, 7,...
   ..@ label        : chr "Q2-7-2.關於「值得民眾信任」的部分,請問您會給馬英九總統打幾分?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v281     : dbl+lbl [1:1081]  5,  6,  9,  5,  7,  6,  7,  9,  5,  7,  3,  9,  8,  ...
   ..@ label      : chr "Q2-8-1.整體來說(台:總共一句),請問您會給蔡英文總統的領導能力打幾分?"
   ..@ na_range   : num [1:2] 95 99
   ..@ format.spss: chr "F2.0"
   ..@ labels     : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v282     : dbl+lbl [1:1081] 6, 8, 4, 5, 3, 5, 7, 8, 8, 6, 3, 6, 0, 5, 2, 7, 8, 7,...
   ..@ label      : chr "Q2-8-2.整體來說(台:總共一句),請問您會給馬英九總統的領導能力打幾分?"
   ..@ na_range   : num [1:2] 95 99
   ..@ format.spss: chr "F2.0"
   ..@ labels     : Named num [1:17] 0 1 2 3 4 5 6 7 8 9 ...
   .. ..- attr(*, "names")= chr [1:17] "0" "1" "2" "3" ...
 $ v311     : dbl+lbl [1:1081]  4,  4,  2,  4, 97,  2,  4,  3,  4,  1,  1,  1,  4,  ...
   ..@ label        : chr "Q3-1-1.請問您認為蔡英文總統從上任到現在常不常(台:咁有定定)影響民意的發展?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v312     : dbl+lbl [1:1081]  3,  3,  4,  3, 97,  2,  2,  4,  3,  1,  2, 97,  1,  ...
   ..@ label        : chr "Q3-1-2.請問您認為馬英九總統在當總統的時候常不常影響民意的發展?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v321     : dbl+lbl [1:1081]  4,  4,  4,  4, 95,  2,  4,  2,  4,  1,  4, 98,  2, 9...
   ..@ label        : chr "Q3-2-1.請問您認為蔡英文總統從上任到現在常不常只想維持她自己的權力?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v322     : dbl+lbl [1:1081]  3,  4,  4,  4, 95,  2,  4,  4,  1,  4,  2, 98,  4, 9...
   ..@ label        : chr "Q3-2-2.請問您認為馬英九總統在當總統的時候常不常只想維持他自己的權力?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v331     : dbl+lbl [1:1081]  2,  2,  4,  4,  3,  2,  3, 97,  1,  4,  2, 97,  3,  ...
   ..@ label        : chr "Q3-3-1.請問您認為蔡英文總統從上任到現在常不常維持政黨之間的和諧(台:和孩)?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v332     : dbl+lbl [1:1081]  2,  4,  2,  4,  2,  2,  3, 97,  3,  1,  2,  1,  1,  ...
   ..@ label        : chr "Q3-3-2.請問您認為馬英九總統在當總統的時候常不常維持政黨之間的和諧(台:和孩)?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v341     : dbl+lbl [1:1081]  2,  3,  4,  1,  4,  2,  3, 97,  3,  4,  1,  4,  4,  ...
   ..@ label        : chr "Q3-4-1.請問您認為蔡英文總統從上任到現在常不常保護人民?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v342     : dbl+lbl [1:1081]  2,  4,  4,  1,  1,  2,  3, 97,  4,  3,  2,  1,  1,  ...
   ..@ label        : chr "Q3-4-2.請問您認為馬英九總統在當總統的時候常不常保護人民?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:9] 1 2 3 4 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:9] "幾乎沒有(台:擠點阿攏無)" "很少" "偶爾" "經常" ...
 $ v41      : dbl+lbl [1:1081] 96,  3,  1,  3, 96,  1,  3,  1,  1,  1,  1,  1,  3,  ...
   ..@ label        : chr "Q4-1.有關總統的新聞,請問您大多(台:大部分)是看電視、報紙、還是網路上的新聞?【務必追問出一種,若受訪者回答兩種"| __truncated__
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 5
   ..@ labels       : Named num [1:8] 1 2 3 92 95 96 98 99
   .. ..- attr(*, "names")= chr [1:8] "電視新聞(續問Q4-2、Q4-2-1、Q4-2-2)" "報紙新聞(續問Q4-3、Q4-3-1、Q4-3-2)" "網路新聞(續問Q4-4、Q4-4-1、Q4-4-2)" "都不看" ...
 $ v42      : dbl+lbl [1:1081] 99, 99, 91, 99, 99,  3, 99,  1,  7,  2,  8,  6, 99, 9...
   ..@ label        : chr "Q4-2.請問主要是那一台電視?【務必追問出一台,若受訪者回答兩份以上,則追問在最忙時會先選擇看哪一台、或對哪一台最有興趣】"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:29] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:29] "臺視" "中視" "華視" "民視" ...
 $ v421     : dbl+lbl [1:1081] 99, 99,  4, 99, 99,  3, 99, 97,  5,  1,  1,  4, 99, 9...
   ..@ label        : chr "Q4-2-1.整體來說(台:總共一句),請問蔡英文總統在這家電視台上的形象(台:印象)偏向正面還是負面?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:10] 1 2 3 4 5 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:10] "非常負面" "有點負面" "有點正面" "非常正面" ...
 $ v422     : dbl+lbl [1:1081] 99, 99, 96, 99, 99,  3, 99, 97,  5,  4,  2, 98, 99, 9...
   ..@ label        : chr "Q4-2-2.整體來說(台:總共一句),請問馬英九總統在這家電視台上的形象(台:印象)偏向正面還是負面?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:10] 1 2 3 4 5 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:10] "非常負面" "有點負面" "有點正面" "非常正面" ...
 $ v43      : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q4-3.請問主要是那一份報紙?【務必追問出一份,若受訪者回答兩份以上,則追問在最忙時會先選擇看哪一份、或對哪一份最有興趣】"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:21] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:21] "中國時報" "聯合報" "工商時報" "民眾日報" ...
 $ v431     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q4-3-1.整體來說(台:總共一句),請問蔡英文總統在這份報紙上的形象(台:印象)偏向正面還是負面?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:10] 1 2 3 4 5 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:10] "非常負面" "有點負面" "有點正面" "非常正面" ...
 $ v432     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q4-3-2.整體來說(台:總共一句),請問馬英九總統在這份報紙上的形象(台:印象)偏向正面還是負面?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:10] 1 2 3 4 5 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:10] "非常負面" "有點負面" "有點正面" "非常正面" ...
 $ v44      : dbl+lbl [1:1081] 99,  2, 99,  3, 99, 99,  3, 99, 99, 99, 99, 99, 20,  ...
   ..@ label        : chr "Q4-4.請問主要是那一個網站?【務必追問出一個,若受訪者回答兩份以上,則追問在最忙時會先選擇看哪一個、或對哪一個最有興趣】"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:65] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:65] "YouTube" "LINE" "Facebook" "Instagram" ...
 $ v441     : dbl+lbl [1:1081] 99,  1, 99,  5, 99, 99,  3, 99, 99, 99, 99, 99,  4,  ...
   ..@ label        : chr "Q4-4-1.整體來說(台:總共一句),請問蔡英文總統在這個網站上的形象(台:印象)偏向正面還是負面?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:10] 1 2 3 4 5 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:10] "非常負面" "有點負面" "有點正面" "非常正面" ...
 $ v442     : dbl+lbl [1:1081] 99,  3, 99,  5, 99, 99,  3, 99, 99, 99, 99, 99,  1,  ...
   ..@ label        : chr "Q4-4-2.整體來說,請問馬英九總統在這個網站上的形象(台:印象)偏向正面還是負面?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:10] 1 2 3 4 5 95 96 97 98 99
   .. ..- attr(*, "names")= chr [1:10] "非常負面" "有點負面" "有點正面" "非常正面" ...
 $ v51      : dbl+lbl [1:1081] 95, 13,  2,  4, 20,  3, 16,  2,  2, 16, 12,  2,  2, 1...
   ..@ label        : chr "Q5-1戶籍縣市"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 5
   ..@ labels       : Named num [1:24] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:24] "基隆市" "台北市" "新北市" "桃園市" ...
 $ v511     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (基隆市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:10] 1 2 3 4 5 6 7 95 98 99
   .. ..- attr(*, "names")= chr [1:10] "仁愛區" "中正區" "信義區" "中山區" ...
 $ v512     : dbl+lbl [1:1081] 99, 99,  5, 99, 99, 99, 99,  7,  4, 99, 99,  1,  4, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (台北市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:15] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:15] "中正區" "大同區" "中山區" "松山區" ...
 $ v513     : dbl+lbl [1:1081] 99, 99, 99, 99, 99,  3, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (新北市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:32] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:32] "板橋區" "新莊區" "中和區" "永和區" ...
 $ v514     : dbl+lbl [1:1081] 99, 99, 99,  2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (桃園市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:16] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:16] "桃園區" "中壢區" "平鎮區" "八德區" ...
 $ v515     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (新竹市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:6] 1 2 3 95 98 99
   .. ..- attr(*, "names")= chr [1:6] "東區" "北區" "香山區" "拒答" ...
 $ v516     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (新竹縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:16] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:16] "竹北市" "竹東鎮" "新埔鎮" "關西鎮" ...
 $ v517     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (苗栗縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:21] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:21] "苗栗市" "頭份市" "竹南鎮" "後龍鎮" ...
 $ v518     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (台中市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:32] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:32] "中區" "東區" "南區" "西區" ...
 $ v519     : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (彰化縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 6
   ..@ labels       : Named num [1:29] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:29] "彰化市" "員林市" "和美鎮" "鹿港鎮" ...
 $ v5110    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (南投縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:16] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:16] "南投市" "埔里鎮" "草屯鎮" "竹山鎮" ...
 $ v5111    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (雲林縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:23] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:23] "斗六市" "斗南鎮" "虎尾鎮" "西螺鎮" ...
 $ v5112    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,  1, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (嘉義市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:5] 1 2 95 98 99
   .. ..- attr(*, "names")= chr [1:5] "東區" "西區" "拒答" "不知道" ...
 $ v5113    : dbl+lbl [1:1081] 99,  2, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (嘉義縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:21] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:21] "太保市" "朴子市" "布袋鎮" "大林鎮" ...
 $ v5114    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,  ...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (台南市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:40] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:40] "中西區" "東區" "南區" "北區" ...
 $ v5115    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (高雄市)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:41] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:41] "楠梓區" "左營區" "鼓山區" "三民區" ...
 $ v5116    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 95, 99, 99, 13, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (屏東縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:36] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:36] "屏東市" "潮州鎮" "東港鎮" "恆春鎮" ...
 $ v5117    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (臺東縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:19] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:19] "臺東市" "成功鎮" "關山鎮" "長濱鄉" ...
 $ v5118    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (花蓮縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:16] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:16] "花蓮市" "鳳林鎮" "玉里鎮" "新城鄉" ...
 $ v5119    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (宜蘭縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:15] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:15] "宜蘭市" "頭城鎮" "羅東鎮" "蘇澳鎮" ...
 $ v5120    : dbl+lbl [1:1081] 99, 99, 99, 99,  1, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (澎湖縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:9] 1 2 3 4 5 6 95 98 99
   .. ..- attr(*, "names")= chr [1:9] "馬公市" "湖西鄉" "白沙鄉" "西嶼鄉" ...
 $ v5121    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (金門縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:9] 1 2 3 4 5 6 95 98 99
   .. ..- attr(*, "names")= chr [1:9] "金城鎮" "金湖鎮" "金沙鎮" "金寧鄉" ...
 $ v5122    : dbl+lbl [1:1081] 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 9...
   ..@ label        : chr "Q5-1-1.哪一個鄉鎮市區? (連江縣)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:7] 1 2 3 4 95 98 99
   .. ..- attr(*, "names")= chr [1:7] "南竿鄉" "北竿鄉" "莒光鄉" "東引鄉" ...
 $ K52_birth: dbl+lbl [1:1081] 998, 998, 998, 998, 998, 998, 998, 998, 998, 998, 998...
   ..@ label        : chr "Q5-2.請問您是民國哪一年出生的?(說不出的改問:您今年幾歲?由訪員換算成出生年:即109-歲數=出生年次)"
   ..@ na_range     : num [1:2] 998 999
   ..@ format.spss  : chr "F40.0"
   ..@ display_width: int 9
   ..@ labels       : Named num 998
   .. ..- attr(*, "names")= chr "拒答"
 $ v53      : dbl+lbl [1:1081]  6,  6,  6,  5,  7,  6,  7,  6,  6,  3,  5,  6,  6,  ...
   ..@ label        : chr "Q5-3.請問您的最高學歷是什麼(讀到什麼學校)?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 5
   ..@ labels       : Named num [1:10] 1 2 3 4 5 6 7 95 98 99
   .. ..- attr(*, "names")= chr [1:10] "不識字及未入學" "小學" "國、初中" "高中、職" ...
 $ v54      : dbl+lbl [1:1081]  95, 103, 105, 106, 206, 210, 301, 302, 302, 302, 302...
   ..@ label        : chr "Q5-4.請問您的職業(客:頭路)是什麼?(非回答901-906者,跳問5-7題)"
   ..@ na_values    : num [1:3] 95 98 999
   ..@ format.spss  : chr "F3.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:42] 90 95 98 101 102 103 104 105 106 201 ...
   .. ..- attr(*, "names")= chr [1:42] "其他(請註明)" "拒答" "不知道" "民代" ...
 $ v55      : dbl+lbl [1:1081] 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999...
   ..@ label        : chr "Q5-5.請問您先生(或太太)的職業是什麼?(若已失業、退休者,請追問失業、退休前之職業)"
   ..@ na_values    : num [1:3] 95 98 999
   ..@ format.spss  : chr "F3.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:39] 90 95 98 101 102 103 104 105 106 201 ...
   .. ..- attr(*, "names")= chr [1:39] "其他(請註明)" "拒答" "不知道" "民代" ...
 $ v56      : dbl+lbl [1:1081] 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999...
   ..@ label        : chr "Q5-6.請問您以前(或退休前)的職業是什麼?"
   ..@ na_values    : num [1:3] 95 98 999
   ..@ format.spss  : chr "F3.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:37] 90 95 98 101 102 103 104 105 106 201 ...
   .. ..- attr(*, "names")= chr [1:37] "其他(請註明)" "拒答" "不知道" "民代" ...
 $ v57      : dbl+lbl [1:1081] 10,  1, 10,  8, 95,  1, 96, 10,  1, 10, 97,  5,  5,  ...
   ..@ label        : chr "Q5-7.在國民黨、民進黨、民眾黨以及時代力量這四個政黨中【選項隨機出現】,請問您比較支持哪一個政黨?"
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:20] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:20] "國民黨" "親民黨" "新黨" "無黨團結聯盟" ...
 $ v571     : dbl+lbl [1:1081] 10, 99, 10, 99, 95, 99, 10, 10, 99, 95, 10, 99, 99, 9...
   ..@ label        : chr "Q5-7-1.您比較偏向國民黨、偏向民進黨、偏向民眾黨還是時代力量,或是都不偏【選項隨機出現】?"
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:18] 1 2 3 4 5 6 7 8 9 10 ...
   .. ..- attr(*, "names")= chr [1:18] "國民黨" "親民黨" "新黨" "無黨團結聯盟" ...
 $ v58      : dbl+lbl [1:1081]  5,  5,  7,  5,  4,  5,  6,  5,  5,  3, 97,  4,  2,  ...
   ..@ label        : chr "Q5-8.關於台灣和大陸的關係,有下面幾種不同的看法,請問您比較偏向哪一種?"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 7
   ..@ labels       : Named num [1:13] 1 2 3 4 5 6 7 90 95 96 ...
   .. ..- attr(*, "names")= chr [1:13] "儘快統一" "儘快宣布獨立" "維持現狀,以後走向統一" "維持現狀,以後走向獨立" ...
 $ v6       : dbl+lbl [1:1081] 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2,...
   ..@ label        : chr "受訪者性別?(訪員自填)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 4
   ..@ labels       : Named num [1:3] 1 2 99
   .. ..- attr(*, "names")= chr [1:3] "男性" "女性" "遺漏值或跳答"
 $ v7       : dbl+lbl [1:1081] 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
   ..@ label        : chr "訪問使用語言(訪員自填)"
   ..@ na_range     : num [1:2] 95 99
   ..@ format.spss  : chr "F2.0"
   ..@ display_width: int 4
   ..@ labels       : Named num [1:7] 1 2 3 4 5 6 99
   .. ..- attr(*, "names")= chr [1:7] "國語" "閩南語" "客語" "國客語" ...
 $ REC_NO   : num [1:1081] 16667 24214 23472 7956 8192 ...
  ..- attr(*, "label")= chr "樣本編號"
  ..- attr(*, "format.spss")= chr "F8.0"
  ..- attr(*, "display_width")= int 10
 $ w9       : num [1:1081] 0.994 1.006 1.006 0.994 1.006 ...
  ..- attr(*, "format.spss")= chr "F8.2"
  ..- attr(*, "display_width")= int 10

4.1 基本清理函數

to_num <- function(x) {
  as.numeric(x)
}

clean_score <- function(x) {
  x <- to_num(x)
  x[x %in% c(90, 95, 96, 97, 98, 99, 998, 999)] <- NA
  x
}

freq3 <- function(x) {
  x <- to_num(x)
  out <- case_when(
    x %in% c(1, 2) ~ "Low",
    x == 3 ~ "Occasional",
    x == 4 ~ "Frequent",
    TRUE ~ NA_character_
  )
  factor(out, levels = c("Low", "Occasional", "Frequent"))
}

img3 <- function(x) {
  x <- to_num(x)
  out <- case_when(
    x %in% c(1, 2) ~ "Negative",
    x == 5 ~ "Neutral",
    x %in% c(3, 4) ~ "Positive",
    TRUE ~ NA_character_
  )
  factor(out, levels = c("Negative", "Neutral", "Positive"))
}

mean_na <- function(...) {
  m <- rowMeans(cbind(...), na.rm = TRUE)
  m[is.nan(m)] <- NA
  m
}

4.2 人口變數清理

## 性別
lead$sex_r <- rec(lead$v6,
                  rec = "1=1[Male]; 2=2[Female]; else=NA",
                  var.label = "Sex",
                  as.num = FALSE)

## 年齡與世代
lead$birth_year <- 1911 + to_num(lead$K52_birth)
lead$birth_year[to_num(lead$K52_birth) %in% c(95, 98, 998, 999)] <- NA

lead$age_r <- 2020 - lead$birth_year
set_label(lead$age_r) <- "Age"

lead$gen_r <- NA
lead$gen_r[lead$birth_year <= 1953] <- "G1_2"
lead$gen_r[lead$birth_year >= 1954 & lead$birth_year <= 1968] <- "G3"
lead$gen_r[lead$birth_year >= 1969 & lead$birth_year <= 1978] <- "G4"
lead$gen_r[lead$birth_year >= 1979 & lead$birth_year <= 1988] <- "G5"
lead$gen_r[lead$birth_year >= 1989] <- "G6"
lead$gen_r <- factor(lead$gen_r, levels = c("G1_2", "G3", "G4", "G5", "G6"))
set_label(lead$gen_r) <- "Pol. Gen."

## 教育程度
lead$edu_r <- rec(lead$v53,
                  rec = "1:3=1[JHS-]; 4=2[SHS]; 5:7=3[College+]; else=NA",
                  var.label = "Edu",
                  as.num = FALSE)

## 地區:將22縣市合併為大區
lead$region_r <- case_when(
  to_num(lead$v51) %in% c(1, 2, 3, 4, 5, 6, 19) ~ "North",
  to_num(lead$v51) %in% c(7, 8, 9, 10, 11) ~ "Central",
  to_num(lead$v51) %in% c(12, 13, 14, 15, 16) ~ "South",
  to_num(lead$v51) %in% c(17, 18) ~ "East",
  to_num(lead$v51) %in% c(20, 21, 22) ~ "Offshore",
  TRUE ~ NA_character_
)
lead$region_r <- factor(lead$region_r)
set_label(lead$region_r) <- "Region"

## 職業粗分
lead$job_r <- case_when(
  to_num(lead$v54) %in% 101:106 ~ "Manager_Owner",
  to_num(lead$v54) %in% 201:215 ~ "Professional",
  to_num(lead$v54) %in% 301:303 ~ "WhiteCollar",
  to_num(lead$v54) == 401 ~ "Service",
  to_num(lead$v54) == 501 ~ "Agri",
  to_num(lead$v54) %in% c(601, 602) ~ "Labor",
  to_num(lead$v54) == 701 ~ "Student",
  to_num(lead$v54) == 801 ~ "MilitaryPolice",
  to_num(lead$v54) %in% 901:906 ~ "NotWorking",
  to_num(lead$v54) == 907 ~ "Freelance",
  TRUE ~ NA_character_
)
lead$job_r <- factor(lead$job_r)
set_label(lead$job_r) <- "Job"

4.3 新聞來源與媒體形象清理

## Q4-1 主要總統新聞來源
lead$media_r <- rec(lead$v41,
                    rec = "1=1[TV]; 2=2[Newspaper]; 3=3[Online]; 92=4[NoNews]; else=NA",
                    var.label = "Main News Source",
                    as.num = FALSE)

## 將電視、報紙、網路三種跳題中的蔡/馬媒體形象合併
lead$tsai_img_num <- coalesce(
  clean_score(lead$v421),
  clean_score(lead$v431),
  clean_score(lead$v441)
)

lead$ma_img_num <- coalesce(
  clean_score(lead$v422),
  clean_score(lead$v432),
  clean_score(lead$v442)
)

lead$tsai_img_r <- img3(lead$tsai_img_num)
lead$ma_img_r <- img3(lead$ma_img_num)

set_label(lead$tsai_img_r) <- "Tsai News Image"
set_label(lead$ma_img_r) <- "Ma News Image"

## 建立蔡馬媒體形象組合
lead$image_gap_r <- case_when(
  lead$tsai_img_r == "Positive" & lead$ma_img_r == "Negative" ~ "TsaiPos_MaNeg",
  lead$tsai_img_r == "Positive" & lead$ma_img_r == "Neutral" ~ "TsaiPos_MaNeutral",
  lead$tsai_img_r == "Positive" & lead$ma_img_r == "Positive" ~ "BothPositive",
  lead$tsai_img_r == "Neutral" & lead$ma_img_r == "Neutral" ~ "BothNeutral",
  lead$tsai_img_r == "Negative" & lead$ma_img_r == "Positive" ~ "TsaiNeg_MaPos",
  lead$tsai_img_r == "Negative" & lead$ma_img_r == "Negative" ~ "BothNegative",
  TRUE ~ "MixedImage"
)

lead$image_gap_r <- factor(lead$image_gap_r)
set_label(lead$image_gap_r) <- "News Image Pattern"

4.4 理想領導類型:由 Q1 七題整理

lead$q1_character <- clean_score(lead$v11)
lead$q1_goal      <- clean_score(lead$v12)
lead$q1_morale    <- clean_score(lead$v13)
lead$q1_unity     <- clean_score(lead$v14)
lead$q1_loyalty   <- clean_score(lead$v15)
lead$q1_response  <- clean_score(lead$v16)
lead$q1_trust     <- clean_score(lead$v17)

ideal_scores <- data.frame(
  Moral_Trust = mean_na(lead$q1_character, lead$q1_trust),
  Policy_Response = mean_na(lead$q1_goal, lead$q1_response),
  Mobilize_Unity = mean_na(lead$q1_morale, lead$q1_unity),
  National_Loyalty = lead$q1_loyalty
)

ideal_mat <- as.matrix(ideal_scores)
row_max <- apply(ideal_mat, 1, function(z) {
  if (all(is.na(z))) NA_real_ else max(z, na.rm = TRUE)
})

ideal_mat2 <- ideal_mat
ideal_mat2[is.na(ideal_mat2)] <- -Inf

top_name <- colnames(ideal_mat2)[max.col(ideal_mat2, ties.method = "first")]
top_n <- rowSums(sweep(ideal_mat, 1, row_max, "=="), na.rm = TRUE)

lead$leader_ideal_r <- case_when(
  is.na(row_max) ~ NA_character_,
  top_n > 1 ~ "MixedIdeal",
  top_name == "Moral_Trust" ~ "MoralTrust",
  top_name == "Policy_Response" ~ "PolicyResponse",
  top_name == "Mobilize_Unity" ~ "MobilizeUnity",
  top_name == "National_Loyalty" ~ "NationalLoyalty",
  TRUE ~ NA_character_
)

lead$leader_ideal_r <- factor(lead$leader_ideal_r)
set_label(lead$leader_ideal_r) <- "Ideal Leadership Type"

4.5 蔡馬整體領導評價差距

lead$tsai_overall <- clean_score(lead$v281)
lead$ma_overall   <- clean_score(lead$v282)

lead$leader_gap <- lead$tsai_overall - lead$ma_overall

lead$leader_gap_r <- case_when(
  lead$leader_gap >= 2 ~ "TsaiHigher",
  lead$leader_gap <= -2 ~ "MaHigher",
  lead$leader_gap > -2 & lead$leader_gap < 2 ~ "Close",
  TRUE ~ NA_character_
)

lead$leader_gap_r <- factor(lead$leader_gap_r,
                            levels = c("MaHigher", "Close", "TsaiHigher"))
set_label(lead$leader_gap_r) <- "Overall Leadership Gap"

4.6 Q3 政治領導角色認知

lead$tsai_influence_r <- freq3(lead$v311)
set_label(lead$tsai_influence_r) <- "Tsai Influence Opinion"

lead$tsai_power_r <- freq3(lead$v321)
set_label(lead$tsai_power_r) <- "Tsai Maintain Power"

lead$tsai_harmony_r <- freq3(lead$v331)
set_label(lead$tsai_harmony_r) <- "Tsai Party Harmony"

lead$tsai_protect_r <- freq3(lead$v341)
set_label(lead$tsai_protect_r) <- "Tsai Protect People"

4.7 政黨傾向清理:整合 v57 與 v571

lead$party_raw <- ifelse(to_num(lead$v57) %in% c(1,2,3,4,5,6,7,8,11,12,13),
                         to_num(lead$v57),
                         to_num(lead$v571))

lead$party_r <- case_when(
  to_num(lead$v57) == 10 | lead$party_raw == 10 ~ "NoParty",
  to_num(lead$v57) == 96 | lead$party_raw == 96 ~ "Conditional",
  lead$party_raw == 1 ~ "KMT",
  lead$party_raw == 5 ~ "DPP",
  lead$party_raw == 7 ~ "NPP",
  lead$party_raw == 8 ~ "TPP",
  lead$party_raw %in% c(2,3,4,6,9,11,12,13,90,91) ~ "Other",
  TRUE ~ NA_character_
)

lead$party_r <- factor(lead$party_r)
set_label(lead$party_r) <- "Party ID"

4.8 統獨立場清理

lead$ui_r <- case_when(
  to_num(lead$v58) %in% c(1, 3) ~ "UnificationDirection",
  to_num(lead$v58) %in% c(2, 4, 7) ~ "IndependenceDirection",
  to_num(lead$v58) == 5 ~ "SQ_DecideLater",
  to_num(lead$v58) == 6 ~ "SQ_Permanent",
  TRUE ~ NA_character_
)

lead$ui_r <- factor(lead$ui_r)
set_label(lead$ui_r) <- "Unification-Independence Preference"

4.9 描述與檢查

frq(lead$media_r, weights = lead$w9)
Main News Source (xw) <categorical> 
# total N=1083 valid N=1083 mean=2.98 sd=10.20

Value |     Label |   N | Raw % | Valid % | Cum. %
--------------------------------------------------
    1 |        TV | 604 | 55.77 |   55.77 |  55.77
    2 | Newspaper |  35 |  3.23 |    3.23 |  59.00
    3 |    Online | 402 | 37.12 |   37.12 |  96.12
    4 |    NoNews |  30 |  2.77 |    2.77 |  98.89
   95 |        95 |   0 |  0.00 |    0.00 |  98.89
   96 |        96 |  12 |  1.11 |    1.11 | 100.00
 <NA> |      <NA> |   0 |  0.00 |    <NA> |   <NA>
frq(lead$leader_ideal_r, weights = lead$w9)
Ideal Leadership Type (xw) <categorical> 
# total N=1084 valid N=1084 mean=2.19 sd=1.42

Value           |   N | Raw % | Valid % | Cum. %
------------------------------------------------
MixedIdeal      | 598 | 55.17 |   55.17 |  55.17
MobilizeUnity   |  55 |  5.07 |    5.07 |  60.24
MoralTrust      |  92 |  8.49 |    8.49 |  68.73
NationalLoyalty | 303 | 27.95 |   27.95 |  96.68
PolicyResponse  |  36 |  3.32 |    3.32 | 100.00
<NA>            |   0 |  0.00 |    <NA> |   <NA>
frq(lead$image_gap_r, weights = lead$w9)
News Image Pattern (xw) <categorical> 
# total N=1083 valid N=1083 mean=4.13 sd=1.56

Value             |   N | Raw % | Valid % | Cum. %
--------------------------------------------------
BothNegative      |  31 |  2.86 |    2.86 |   2.86
BothNeutral       | 125 | 11.54 |   11.54 |  14.40
BothPositive      | 273 | 25.21 |   25.21 |  39.61
MixedImage        | 263 | 24.28 |   24.28 |  63.90
TsaiNeg_MaPos     |  75 |  6.93 |    6.93 |  70.82
TsaiPos_MaNeg     | 261 | 24.10 |   24.10 |  94.92
TsaiPos_MaNeutral |  55 |  5.08 |    5.08 | 100.00
<NA>              |   0 |  0.00 |    <NA> |   <NA>
frq(lead$leader_gap_r, weights = lead$w9)
Overall Leadership Gap (xw) <categorical> 
# total N=1074 valid N=1074 mean=2.33 sd=0.70

Value      |   N | Raw % | Valid % | Cum. %
-------------------------------------------
MaHigher   | 145 | 13.50 |   13.50 |  13.50
Close      | 430 | 40.04 |   40.04 |  53.54
TsaiHigher | 499 | 46.46 |   46.46 | 100.00
<NA>       |   0 |  0.00 |    <NA> |   <NA>
frq(lead$party_r, weights = lead$w9)
Party ID (xw) <categorical> 
# total N=1075 valid N=1075 mean=3.52 sd=1.52

Value       |   N | Raw % | Valid % | Cum. %
--------------------------------------------
Conditional |  37 |  3.44 |    3.44 |   3.44
DPP         | 305 | 28.37 |   28.37 |  31.81
KMT         | 195 | 18.14 |   18.14 |  49.95
NoParty     | 333 | 30.98 |   30.98 |  80.93
NPP         |  97 |  9.02 |    9.02 |  89.95
Other       |  21 |  1.95 |    1.95 |  91.91
TPP         |  87 |  8.09 |    8.09 | 100.00
<NA>        |   0 |  0.00 |    <NA> |   <NA>
frq(lead$ui_r, weights = lead$w9)
Unification-Independence Preference (xw) <categorical> 
# total N=1048 valid N=1048 mean=2.00 sd=0.93

Value                 |   N | Raw % | Valid % | Cum. %
------------------------------------------------------
IndependenceDirection | 393 | 37.50 |   37.50 |  37.50
SQ_DecideLater        | 317 | 30.25 |   30.25 |  67.75
SQ_Permanent          | 280 | 26.72 |   26.72 |  94.47
UnificationDirection  |  58 |  5.53 |    5.53 | 100.00
<NA>                  |   0 |  0.00 |    <NA> |   <NA>
plot_frq(lead$media_r, weight.by = lead$w9)

plot_frq(lead$leader_ideal_r, weight.by = lead$w9)

plot_frq(lead$image_gap_r, weight.by = lead$w9)

五. 電視新聞收視、政黨傾向與政治身份的 MCA 分析

## 建立輸出資料夾
if (!dir.exists("mca_outputs")) {
  dir.create("mca_outputs")
}

5.1 清理函數

num <- function(x) {
  as.numeric(haven::zap_labels(x))
}

score_clean <- function(x) {
  y <- num(x)
  y[y %in% c(90, 95, 96, 97, 98, 99, 998, 999)] <- NA
  y
}

img3_raw <- function(x) {
  y <- score_clean(x)
  case_when(
    y %in% c(1, 2) ~ "負面形象",
    y == 5 ~ "中立形象",
    y %in% c(3, 4) ~ "正面形象",
    TRUE ~ NA_character_
  )
}

5.2 篩選主要看電視新聞者

tv_base <- lead %>%
  mutate(
    v41_num = num(v41),
    v42_num = num(v42),
    v421_num = num(v421),
    v422_num = num(v422),
    v57_num = num(v57),
    v571_num = num(v571),
    v58_num = num(v58),
    v6_num = num(v6),
    v53_num = num(v53),
    v51_num = num(v51),
    birth_num = num(K52_birth),
    w9_num = num(w9),
    tsai_overall_num = score_clean(v281),
    ma_overall_num = score_clean(v282)
  ) %>%
  filter(v41_num == 1)

5.3 建立變數:主要收看電視台

tv_base$tv_station_r <- case_when(
  tv_base$v42_num == 4 ~ "主要看民視",
  tv_base$v42_num == 5 ~ "主要看TVBS",
  tv_base$v42_num == 6 ~ "主要看三立",
  tv_base$v42_num == 7 ~ "主要看東森",
  tv_base$v42_num == 8 ~ "主要看中天",
  tv_base$v42_num == 9 ~ "主要看年代",
  tv_base$v42_num == 17 ~ "主要看壹電視",
  tv_base$v42_num %in% c(1, 2, 3, 13) ~ "主要看無線或公共電視",
  tv_base$v42_num %in% c(18, 19, 20, 21, 91) ~ "多台都看",
  tv_base$v42_num %in% c(10, 11, 12, 14, 15, 16, 22, 90) ~ "其他電視台",
  TRUE ~ NA_character_
)

tv_base$tv_station_r <- factor(
  tv_base$tv_station_r,
  levels = c(
    "主要看民視",
    "主要看三立",
    "主要看中天",
    "主要看TVBS",
    "主要看東森",
    "主要看年代",
    "主要看壹電視",
    "主要看無線或公共電視",
    "多台都看",
    "其他電視台"
  )
)

5.4 建立政黨傾向變數

party_raw <- ifelse(
  tv_base$v57_num %in% c(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13),
  tv_base$v57_num,
  tv_base$v571_num
)

tv_base$party_r <- case_when(
  tv_base$v57_num == 10 | party_raw == 10 ~ "無明確政黨傾向",
  tv_base$v57_num == 96 | party_raw == 96 ~ "政黨支持看情況",
  party_raw == 1 ~ "支持國民黨",
  party_raw == 5 ~ "支持民進黨",
  party_raw == 7 ~ "支持時代力量",
  party_raw == 8 ~ "支持民眾黨",
  party_raw %in% c(2, 3, 4, 6, 9, 11, 12, 13, 90, 91) ~ "支持其他政黨或其他回答",
  TRUE ~ NA_character_
)

tv_base$party_r <- factor(
  tv_base$party_r,
  levels = c(
    "支持國民黨",
    "支持民進黨",
    "支持民眾黨",
    "支持時代力量",
    "無明確政黨傾向",
    "政黨支持看情況",
    "支持其他政黨或其他回答"
  )
)

## 進一步整理為較大的政治陣營,用於深度 MCA 與迴歸
tv_base$party_block_r <- case_when(
  tv_base$party_r == "支持國民黨" ~ "泛藍:國民黨",
  tv_base$party_r == "支持民進黨" ~ "泛綠:民進黨",
  tv_base$party_r %in% c("支持民眾黨", "支持時代力量") ~ "第三勢力",
  tv_base$party_r %in% c("無明確政黨傾向", "政黨支持看情況") ~ "無黨或態度流動",
  tv_base$party_r == "支持其他政黨或其他回答" ~ "其他政黨或其他回答",
  TRUE ~ NA_character_
)

tv_base$party_block_r <- factor(
  tv_base$party_block_r,
  levels = c(
    "泛藍:國民黨",
    "泛綠:民進黨",
    "第三勢力",
    "無黨或態度流動",
    "其他政黨或其他回答"
  )
)

5.5 建立政治身份變數:統獨、蔡馬媒體形象、領導評價差距

## 統獨立場
tv_base$ui_r <- case_when(
  tv_base$v58_num %in% c(1, 3) ~ "兩岸立場偏向統一",
  tv_base$v58_num %in% c(2, 4, 7) ~ "兩岸立場偏向獨立",
  tv_base$v58_num == 5 ~ "維持現狀以後看情況決定",
  tv_base$v58_num == 6 ~ "永遠維持現狀",
  TRUE ~ NA_character_
)

tv_base$ui_r <- factor(
  tv_base$ui_r,
  levels = c(
    "兩岸立場偏向統一",
    "兩岸立場偏向獨立",
    "維持現狀以後看情況決定",
    "永遠維持現狀"
  )
)

## 蔡英文與馬英九在主要電視台上的形象
tv_base$tsai_img_r <- img3_raw(tv_base$v421)
tv_base$ma_img_r <- img3_raw(tv_base$v422)

tv_base$image_pattern_r <- case_when(
  tv_base$tsai_img_r == "正面形象" & tv_base$ma_img_r == "負面形象" ~ "蔡正面、馬負面",
  tv_base$tsai_img_r == "負面形象" & tv_base$ma_img_r == "正面形象" ~ "蔡負面、馬正面",
  tv_base$tsai_img_r == "正面形象" & tv_base$ma_img_r == "正面形象" ~ "蔡馬皆正面",
  tv_base$tsai_img_r == "負面形象" & tv_base$ma_img_r == "負面形象" ~ "蔡馬皆負面",
  tv_base$tsai_img_r == "中立形象" & tv_base$ma_img_r == "中立形象" ~ "蔡馬皆中立",
  TRUE ~ "其他混合形象"
)

tv_base$image_pattern_r <- factor(
  tv_base$image_pattern_r,
  levels = c(
    "蔡正面、馬負面",
    "蔡負面、馬正面",
    "蔡馬皆正面",
    "蔡馬皆負面",
    "蔡馬皆中立",
    "其他混合形象"
  )
)

## 蔡英文與馬英九整體領導評價差距
tv_base$leader_gap_num <- tv_base$tsai_overall_num - tv_base$ma_overall_num

tv_base$leader_gap_r <- case_when(
  tv_base$leader_gap_num >= 2 ~ "蔡英文領導評價較高",
  tv_base$leader_gap_num <= -2 ~ "馬英九領導評價較高",
  tv_base$leader_gap_num > -2 & tv_base$leader_gap_num < 2 ~ "蔡馬領導評價接近",
  TRUE ~ NA_character_
)

tv_base$leader_gap_r <- factor(
  tv_base$leader_gap_r,
  levels = c(
    "馬英九領導評價較高",
    "蔡馬領導評價接近",
    "蔡英文領導評價較高"
  )
)

5.6 建立人口輔助變數:性別、世代、教育、地區

tv_base$sex_r <- case_when(
  tv_base$v6_num == 1 ~ "男性",
  tv_base$v6_num == 2 ~ "女性",
  TRUE ~ NA_character_
)

tv_base$sex_r <- factor(tv_base$sex_r, levels = c("男性", "女性"))

birth_year <- 1911 + tv_base$birth_num
birth_year[tv_base$birth_num %in% c(95, 98, 998, 999)] <- NA

tv_base$gen_r <- case_when(
  birth_year <= 1953 ~ "G1與G2:67歲以上",
  birth_year >= 1954 & birth_year <= 1968 ~ "G3:52至66歲",
  birth_year >= 1969 & birth_year <= 1978 ~ "G4:42至51歲",
  birth_year >= 1979 & birth_year <= 1988 ~ "G5:32至41歲",
  birth_year >= 1989 ~ "G6:20至31歲",
  TRUE ~ NA_character_
)

tv_base$gen_r <- factor(
  tv_base$gen_r,
  levels = c(
    "G1與G2:67歲以上",
    "G3:52至66歲",
    "G4:42至51歲",
    "G5:32至41歲",
    "G6:20至31歲"
  )
)

tv_base$edu_r <- case_when(
  tv_base$v53_num %in% 1:3 ~ "國中及以下",
  tv_base$v53_num == 4 ~ "高中職",
  tv_base$v53_num %in% 5:7 ~ "專科以上",
  TRUE ~ NA_character_
)

tv_base$edu_r <- factor(
  tv_base$edu_r,
  levels = c("國中及以下", "高中職", "專科以上")
)

tv_base$region_r <- case_when(
  tv_base$v51_num %in% c(1, 2, 3, 4, 5, 6, 19) ~ "北部",
  tv_base$v51_num %in% c(7, 8, 9, 10, 11) ~ "中部",
  tv_base$v51_num %in% c(12, 13, 14, 15, 16) ~ "南部",
  tv_base$v51_num %in% c(17, 18) ~ "東部",
  tv_base$v51_num %in% c(20, 21, 22) ~ "離島",
  TRUE ~ NA_character_
)

tv_base$region_r <- factor(
  tv_base$region_r,
  levels = c("北部", "中部", "南部", "東部", "離島")
)

5.7 描述統計與交叉表

## 主要變數分布
frq(tv_base$tv_station_r, weights = tv_base$w9_num)
xw <categorical> 
# total N=554 valid N=554 mean=4.36 sd=2.51

Value                |   N | Raw % | Valid % | Cum. %
-----------------------------------------------------
主要看民視           |  99 | 17.87 |   17.87 |  17.87
主要看三立           |  54 |  9.75 |    9.75 |  27.62
主要看中天           |  54 |  9.75 |    9.75 |  37.36
主要看TVBS           | 117 | 21.12 |   21.12 |  58.48
主要看東森           |  64 | 11.55 |   11.55 |  70.04
主要看年代           |  38 |  6.86 |    6.86 |  76.90
主要看壹電視         |  31 |  5.60 |    5.60 |  82.49
主要看無線或公共電視 |  65 | 11.73 |   11.73 |  94.22
多台都看             |  24 |  4.33 |    4.33 |  98.56
其他電視台           |   8 |  1.44 |    1.44 | 100.00
<NA>                 |   0 |  0.00 |    <NA> |   <NA>
frq(tv_base$party_r, weights = tv_base$w9_num)
xw <categorical> 
# total N=600 valid N=600 mean=3.09 sd=1.74

Value                  |   N | Raw % | Valid % | Cum. %
-------------------------------------------------------
支持國民黨             | 130 | 21.67 |   21.67 |  21.67
支持民進黨             | 180 | 30.00 |   30.00 |  51.67
支持民眾黨             |  44 |  7.33 |    7.33 |  59.00
支持時代力量           |  40 |  6.67 |    6.67 |  65.67
無明確政黨傾向         | 174 | 29.00 |   29.00 |  94.67
政黨支持看情況         |  19 |  3.17 |    3.17 |  97.83
支持其他政黨或其他回答 |  13 |  2.17 |    2.17 | 100.00
<NA>                   |   0 |  0.00 |    <NA> |   <NA>
frq(tv_base$party_block_r, weights = tv_base$w9_num)
xw <categorical> 
# total N=600 valid N=600 mean=2.63 sd=1.20

Value              |   N | Raw % | Valid % | Cum. %
---------------------------------------------------
泛藍:國民黨       | 130 | 21.67 |   21.67 |  21.67
泛綠:民進黨       | 180 | 30.00 |   30.00 |  51.67
第三勢力           |  84 | 14.00 |   14.00 |  65.67
無黨或態度流動     | 193 | 32.17 |   32.17 |  97.83
其他政黨或其他回答 |  13 |  2.17 |    2.17 | 100.00
<NA>               |   0 |  0.00 |    <NA> |   <NA>
frq(tv_base$ui_r, weights = tv_base$w9_num)
xw <categorical> 
# total N=584 valid N=584 mean=2.88 sd=0.94

Value                  |   N | Raw % | Valid % | Cum. %
-------------------------------------------------------
兩岸立場偏向統一       |  34 |  5.82 |    5.82 |   5.82
兩岸立場偏向獨立       | 195 | 33.39 |   33.39 |  39.21
維持現狀以後看情況決定 | 163 | 27.91 |   27.91 |  67.12
永遠維持現狀           | 192 | 32.88 |   32.88 | 100.00
<NA>                   |   0 |  0.00 |    <NA> |   <NA>
frq(tv_base$image_pattern_r, weights = tv_base$w9_num)
xw <categorical> 
# total N=604 valid N=604 mean=3.52 sd=1.92

Value          |   N | Raw % | Valid % | Cum. %
-----------------------------------------------
蔡正面、馬負面 | 138 | 22.85 |   22.85 |  22.85
蔡負面、馬正面 |  55 |  9.11 |    9.11 |  31.95
蔡馬皆正面     | 162 | 26.82 |   26.82 |  58.77
蔡馬皆負面     |  20 |  3.31 |    3.31 |  62.09
蔡馬皆中立     |  61 | 10.10 |   10.10 |  72.19
其他混合形象   | 168 | 27.81 |   27.81 | 100.00
<NA>           |   0 |  0.00 |    <NA> |   <NA>
frq(tv_base$leader_gap_r, weights = tv_base$w9_num)
xw <categorical> 
# total N=596 valid N=596 mean=2.33 sd=0.70

Value              |   N | Raw % | Valid % | Cum. %
---------------------------------------------------
馬英九領導評價較高 |  81 | 13.59 |   13.59 |  13.59
蔡馬領導評價接近   | 237 | 39.77 |   39.77 |  53.36
蔡英文領導評價較高 | 278 | 46.64 |   46.64 | 100.00
<NA>               |   0 |  0.00 |    <NA> |   <NA>
## 電視台 × 細政黨傾向
tab_xtab(
  tv_base$tv_station_r,
  tv_base$party_r,
  show.row.prc = TRUE,
  show.col.prc = TRUE,
  show.na = FALSE,
  show.legend = FALSE,
  show.exp = FALSE,
  show.cell.prc = FALSE,
  tdcol.col = "gray",
  tdcol.row = "brown"
)
tv_station_r party_r Total
支持國民黨 支持民進黨 支持民眾黨 支持時代力量 無明確政黨傾向 政黨支持看情況 支持其他政黨或其他回答
主要看民視 5
6.4 %
3.5 %
42
53.8 %
25.6 %
6
7.7 %
12.8 %
3
3.8 %
8.3 %
20
25.6 %
14.8 %
1
1.3 %
7.1 %
1
1.3 %
10 %
78
100 %
14.2 %
主要看三立 3
5.6 %
2.1 %
41
75.9 %
25 %
2
3.7 %
4.3 %
2
3.7 %
5.6 %
4
7.4 %
3 %
1
1.9 %
7.1 %
1
1.9 %
10 %
54
100 %
9.9 %
主要看中天 38
70.4 %
26.8 %
3
5.6 %
1.8 %
0
0 %
0 %
3
5.6 %
8.3 %
9
16.7 %
6.7 %
0
0 %
0 %
1
1.9 %
10 %
54
100 %
9.9 %
主要看TVBS 47
36.7 %
33.1 %
18
14.1 %
11 %
14
10.9 %
29.8 %
8
6.2 %
22.2 %
34
26.6 %
25.2 %
4
3.1 %
28.6 %
3
2.3 %
30 %
128
100 %
23.4 %
主要看東森 18
28.1 %
12.7 %
15
23.4 %
9.1 %
6
9.4 %
12.8 %
5
7.8 %
13.9 %
16
25 %
11.9 %
3
4.7 %
21.4 %
1
1.6 %
10 %
64
100 %
11.7 %
主要看年代 3
7.3 %
2.1 %
18
43.9 %
11 %
6
14.6 %
12.8 %
2
4.9 %
5.6 %
9
22 %
6.7 %
2
4.9 %
14.3 %
1
2.4 %
10 %
41
100 %
7.5 %
主要看壹電視 3
8.8 %
2.1 %
12
35.3 %
7.3 %
4
11.8 %
8.5 %
5
14.7 %
13.9 %
8
23.5 %
5.9 %
2
5.9 %
14.3 %
0
0 %
0 %
34
100 %
6.2 %
主要看無線或公共電視 20
33.3 %
14.1 %
7
11.7 %
4.3 %
5
8.3 %
10.6 %
4
6.7 %
11.1 %
22
36.7 %
16.3 %
0
0 %
0 %
2
3.3 %
20 %
60
100 %
10.9 %
多台都看 2
7.7 %
1.4 %
6
23.1 %
3.7 %
2
7.7 %
4.3 %
4
15.4 %
11.1 %
11
42.3 %
8.1 %
1
3.8 %
7.1 %
0
0 %
0 %
26
100 %
4.7 %
其他電視台 3
33.3 %
2.1 %
2
22.2 %
1.2 %
2
22.2 %
4.3 %
0
0 %
0 %
2
22.2 %
1.5 %
0
0 %
0 %
0
0 %
0 %
9
100 %
1.6 %
Total 142
25.9 %
100 %
164
29.9 %
100 %
47
8.6 %
100 %
36
6.6 %
100 %
135
24.6 %
100 %
14
2.6 %
100 %
10
1.8 %
100 %
548
100 %
100 %
χ2=212.401 · df=54 · Cramer's V=0.254 · Fisher's p=0.000
## 電視台 × 大政治陣營
tab_xtab(
  tv_base$tv_station_r,
  tv_base$party_block_r,
  show.row.prc = TRUE,
  show.col.prc = TRUE,
  show.na = FALSE,
  show.legend = FALSE,
  show.exp = FALSE,
  show.cell.prc = FALSE,
  tdcol.col = "gray",
  tdcol.row = "brown"
)
tv_station_r party_block_r Total
泛藍:國民黨 泛綠:民進黨 第三勢力 無黨或態度流動 其他政黨或其他回答
主要看民視 5
6.4 %
3.5 %
42
53.8 %
25.6 %
9
11.5 %
10.8 %
21
26.9 %
14.1 %
1
1.3 %
10 %
78
100 %
14.2 %
主要看三立 3
5.6 %
2.1 %
41
75.9 %
25 %
4
7.4 %
4.8 %
5
9.3 %
3.4 %
1
1.9 %
10 %
54
100 %
9.9 %
主要看中天 38
70.4 %
26.8 %
3
5.6 %
1.8 %
3
5.6 %
3.6 %
9
16.7 %
6 %
1
1.9 %
10 %
54
100 %
9.9 %
主要看TVBS 47
36.7 %
33.1 %
18
14.1 %
11 %
22
17.2 %
26.5 %
38
29.7 %
25.5 %
3
2.3 %
30 %
128
100 %
23.4 %
主要看東森 18
28.1 %
12.7 %
15
23.4 %
9.1 %
11
17.2 %
13.3 %
19
29.7 %
12.8 %
1
1.6 %
10 %
64
100 %
11.7 %
主要看年代 3
7.3 %
2.1 %
18
43.9 %
11 %
8
19.5 %
9.6 %
11
26.8 %
7.4 %
1
2.4 %
10 %
41
100 %
7.5 %
主要看壹電視 3
8.8 %
2.1 %
12
35.3 %
7.3 %
9
26.5 %
10.8 %
10
29.4 %
6.7 %
0
0 %
0 %
34
100 %
6.2 %
主要看無線或公共電視 20
33.3 %
14.1 %
7
11.7 %
4.3 %
9
15 %
10.8 %
22
36.7 %
14.8 %
2
3.3 %
20 %
60
100 %
10.9 %
多台都看 2
7.7 %
1.4 %
6
23.1 %
3.7 %
6
23.1 %
7.2 %
12
46.2 %
8.1 %
0
0 %
0 %
26
100 %
4.7 %
其他電視台 3
33.3 %
2.1 %
2
22.2 %
1.2 %
2
22.2 %
2.4 %
2
22.2 %
1.3 %
0
0 %
0 %
9
100 %
1.6 %
Total 142
25.9 %
100 %
164
29.9 %
100 %
83
15.1 %
100 %
149
27.2 %
100 %
10
1.8 %
100 %
548
100 %
100 %
χ2=195.422 · df=36 · Cramer's V=0.299 · Fisher's p=0.000

六. MCA 分析一:電視台與政黨傾向的基礎模型

6.1 建立基礎 MCA 資料

tv_mca_basic0 <- tv_base %>%
  select(
    w9_num,
    tv_station_r,
    party_r,
    ui_r,
    sex_r,
    gen_r,
    edu_r,
    region_r
  ) %>%
  na.omit() %>%
  as.data.frame()

mca_w_basic <- as.numeric(tv_mca_basic0$w9_num)

tv_mca_basic <- tv_mca_basic0 %>%
  select(-w9_num) %>%
  as.data.frame()

tv_mca_basic <- as.data.frame(
  lapply(tv_mca_basic, function(x) factor(as.character(x))),
  stringsAsFactors = TRUE
)

tv_mca_basic <- droplevels(tv_mca_basic)

## MCA 前檢查
sapply(tv_mca_basic, nlevels)
tv_station_r      party_r         ui_r        sex_r        gen_r        edu_r 
          10            7            4            2            5            3 
    region_r 
           5 
length(mca_w_basic)
[1] 519
nrow(tv_mca_basic)
[1] 519
if (length(mca_w_basic) != nrow(tv_mca_basic)) {
  stop("mca_w_basic 長度與 tv_mca_basic 列數不一致。")
}

bad_vars_basic <- names(sapply(tv_mca_basic, nlevels)[sapply(tv_mca_basic, nlevels) < 2])

if (length(bad_vars_basic) > 0) {
  stop(paste("基礎 MCA 有變數類別數不足:", paste(bad_vars_basic, collapse = ", ")))
}

6.2 執行基礎 MCA

## 主動變數:tv_station_r, party_r
## 輔助變數:ui_r, sex_r, gen_r, edu_r, region_r

sup_vars_basic <- c("ui_r", "sex_r", "gen_r", "edu_r", "region_r")
sup_idx_basic <- which(names(tv_mca_basic) %in% sup_vars_basic)

res.MCA.basic <- MCA(
  tv_mca_basic,
  ncp = 10,
  quali.sup = sup_idx_basic,
  row.w = mca_w_basic,
  graph = FALSE
)

res_basic <- res.MCA.basic

summary(res.MCA.basic)

Call:
MCA(X = tv_mca_basic, ncp = 10, quali.sup = sup_idx_basic, graph = FALSE,  
     row.w = mca_w_basic) 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
Variance               0.744   0.651   0.586   0.585   0.550   0.536   0.500
% of var.              9.914   8.675   7.807   7.802   7.329   7.142   6.667
Cumulative % of var.   9.914  18.588  26.395  34.197  41.525  48.667  55.334
                       Dim.8   Dim.9  Dim.10  Dim.11  Dim.12  Dim.13  Dim.14
Variance               0.500   0.500   0.464   0.450   0.415   0.414   0.349
% of var.              6.667   6.667   6.191   6.005   5.531   5.527   4.659
Cumulative % of var.  62.001  68.667  74.859  80.864  86.395  91.921  96.580
                      Dim.15
Variance               0.256
% of var.              3.420
Cumulative % of var. 100.000

Individuals (the 10 first)
               Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
1           | -0.297  0.028  0.006 |  1.656  0.978  0.187 |  1.101  0.481
2           | -1.189  0.532  0.405 | -0.601  0.155  0.103 | -0.440  0.092
3           |  1.021  0.093  0.309 |  0.008  0.000  0.000 |  0.168  0.003
4           |  0.004  0.000  0.000 | -1.137  0.599  0.217 |  0.705  0.256
5           |  0.926  0.144  0.142 | -0.390  0.029  0.025 | -0.154  0.005
6           |  0.333  0.018  0.034 |  0.682  0.086  0.142 | -0.652  0.087
7           |  0.485  0.022  0.044 |  0.298  0.009  0.016 | -1.292  0.198
8           |  0.333  0.033  0.034 |  0.682  0.157  0.142 | -0.652  0.160
9           |  1.173  0.305  0.250 | -0.376  0.036  0.026 | -0.472  0.063
10          | -0.566  0.024  0.039 |  0.867  0.066  0.092 | -0.322  0.010
              cos2  
1            0.083 |
2            0.055 |
3            0.008 |
4            0.084 |
5            0.004 |
6            0.130 |
7            0.309 |
8            0.130 |
9            0.040 |
10           0.013 |

Categories (the 10 first)
                         Dim.1     ctr    cos2  v.test     Dim.2     ctr
主要看TVBS           |   0.555   4.547   0.087   6.656 |   0.482   3.922
主要看三立           |  -1.198   9.947   0.165  -9.183 |  -1.365  14.743
主要看中天           |   1.577  16.619   0.274  11.845 |  -1.246  11.847
主要看民視           |  -0.982  11.295   0.203 -10.199 |  -0.370   1.836
主要看年代           |  -0.535   1.341   0.021  -3.310 |   1.323   9.365
主要看東森           |   0.003   0.000   0.000   0.026 |   0.520   2.379
主要看壹電視         |  -0.519   0.967   0.015  -2.787 |   0.901   3.336
主要看無線或公共電視 |   0.817   5.097   0.085   6.612 |  -0.137   0.164
多台都看             |  -0.244   0.150   0.002  -1.089 |   0.580   0.970
其他電視台           |  -0.193   0.038   0.001  -0.544 |   1.105   1.438
                        cos2  v.test     Dim.3     ctr    cos2  v.test  
主要看TVBS             0.065   5.783 |  -0.089   0.148   0.002  -1.066 |
主要看三立             0.214 -10.458 |   0.734   4.738   0.062   5.624 |
主要看中天             0.171  -9.355 |   0.674   3.858   0.050   5.065 |
主要看民視             0.029  -3.846 |  -0.829  10.231   0.145  -8.614 |
主要看年代             0.131   8.184 |   0.599   2.133   0.027   3.705 |
主要看東森             0.035   4.229 |   0.710   4.934   0.065   5.777 |
主要看壹電視           0.046   4.843 |   1.349   8.305   0.103   7.248 |
主要看無線或公共電視   0.002  -1.108 |  -1.067  11.030   0.146  -8.631 |
多台都看               0.013   2.589 |  -1.106   3.921   0.048  -4.939 |
其他電視台             0.019   3.117 |  -0.733   0.703   0.008  -2.068 |

Categorical variables (eta2)
               Dim.1 Dim.2 Dim.3  
tv_station_r | 0.744 0.651 0.586 |
party_r      | 0.744 0.651 0.586 |

Supplementary categories (the 10 first)
                          Dim.1   cos2 v.test    Dim.2   cos2 v.test    Dim.3
永遠維持現狀           |  0.141  0.010  2.285 | -0.008  0.000 -0.126 | -0.117
兩岸立場偏向統一       |  0.832  0.044  4.742 | -0.181  0.002 -1.031 | -0.057
兩岸立場偏向獨立       | -0.514  0.128 -8.093 |  0.002  0.000  0.031 |  0.038
維持現狀以後看情況決定 |  0.257  0.025  3.566 |  0.047  0.001  0.650 |  0.114
女性                   |  0.008  0.000  0.196 | -0.008  0.000 -0.191 |  0.020
男性                   | -0.009  0.000 -0.196 |  0.009  0.000  0.191 | -0.022
G1與G2:67歲以上       | -0.043  0.000 -0.480 | -0.198  0.009 -2.199 | -0.043
G3:52至66歲           | -0.131  0.011 -2.387 | -0.108  0.008 -1.975 |  0.051
G4:42至51歲           |  0.051  0.001  0.525 |  0.092  0.002  0.951 | -0.241
G5:32至41歲           |  0.232  0.010  2.304 |  0.157  0.005  1.562 |  0.100
                         cos2 v.test  
永遠維持現狀            0.007 -1.907 |
兩岸立場偏向統一        0.000 -0.327 |
兩岸立場偏向獨立        0.001  0.593 |
維持現狀以後看情況決定  0.005  1.577 |
女性                    0.000  0.477 |
男性                    0.000 -0.477 |
G1與G2:67歲以上        0.000 -0.476 |
G3:52至66歲            0.002  0.926 |
G4:42至51歲            0.012 -2.488 |
G5:32至41歲            0.002  0.998 |

Supplementary categorical variables (eta2)
              Dim.1 Dim.2 Dim.3  
ui_r        | 0.152 0.003 0.009 |
sex_r       | 0.000 0.000 0.000 |
gen_r       | 0.019 0.038 0.015 |
edu_r       | 0.025 0.045 0.008 |
region_r    | 0.014 0.011 0.022 |

6.3 基礎 MCA 圖表

`## ==================================================

p_scree_basic <- fviz_screeplot(
  res.MCA.basic,
  ncp = 10,
  addlabels = TRUE,
  barfill = "#2E86DE",
  barcolor = "#1B4F72",
  linecolor = "#E74C3C"
) +
  labs(
    title = "基礎 MCA 陡坡圖:電視台與政黨傾向",
    x = "維度",
    y = "解釋變異比例 (%)"
  ) +
  theme_minimal(base_size = 14)

p_scree_basic

ggsave(
  "mca_outputs/01_basic_screeplot.png",
  p_scree_basic,
  width = 10,
  height = 7,
  dpi = 300
)


p_mca_basic <- fviz_mca_var(
  res_basic,
  repel = TRUE,
  col.var = "contrib",
  gradient.cols = c("#0072B2", "#F0E442", "#D55E00"),
  labelsize = 4,
  pointsize = 3
) +
  labs(
    title = "基礎 MCA:電視台與政黨傾向的類別空間",
    color = "類別貢獻度"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(size = 17, face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = 11, hjust = 0.5),
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10)
  )

p_mca_basic

ggsave(
  "mca_outputs/02_basic_mca_var.png",
  p_mca_basic,
  width = 12,
  height = 9,
  dpi = 1500
)

在基礎 MCA 中,可以先看到一個常識的確認:電視台收視偏好與政黨傾向確實和網路上的藍綠標籤大致相符。三立、民視較靠近民進黨支持者,中天較靠近國民黨支持者,而TVBS則呈現較淺藍、較主流藍的狀態。這表示網路上對新聞台政治色彩的印象並不是完全空穴來風,而是在資料中可以看到對應的空間結構。

這張圖的縱軸和橫軸我會詮釋政治身分凝聚度和藍綠身分認同,縱軸的凝聚度由上到下表由低到高,而這張圖更有趣的地方不只在藍綠兩端,而是在中間與縱軸。當時剛成立不久的民眾黨,作為藍綠之外的第三選項,位置大致落在橫軸的中間,也就是藍綠政黨認同之間。這可以解讀為,民眾黨在當時吸引的可能不是高度穩定的藍營或綠營支持者,而是較多原本就位於藍綠之間、政黨認同較流動的中間選民。因此,民眾黨在縱軸上的位置也較接近政治身份濃度較低的一側,反映它作為新政黨,尚未形成像傳統藍綠陣營那樣穩定的政治身份吸附力。

相較之下,三立與中天的位置更像是高度政治身份化的媒體入口。它們不只是靠近某個政黨支持者,而是在圖上形成很強的陣營辨識度。這表示在選擇性接觸的背景下,部分閱聽人可能不是單純為了取得新聞而選擇電視台,而是在特定新聞台中尋找與自身政治立場相符的敘事環境。換言之,基礎MCA顯示的不是「媒體決定選民」,而是電視新聞台、政黨認同與政治身份之間已經形成穩定的共同出現結構。

p_contrib_basic_dim1 <- fviz_contrib(
  res.MCA.basic,
  choice = "var",
  axes = 1,
  top = 20,
  fill = "#2E86DE",
  color = "#1B4F72"
) +
  labs(
    title = "基礎 MCA Dim 1:貢獻度最高的類別",
    x = "變數類別",
    y = "貢獻度"
  ) +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

p_contrib_basic_dim1

ggsave(
  "mca_outputs/03_basic_dim1_contrib.png",
  p_contrib_basic_dim1,
  width = 12,
  height = 8,
  dpi = 1500
)


p_contrib_basic_dim2 <- fviz_contrib(
  res.MCA.basic,
  choice = "var",
  axes = 2,
  top = 20,
  fill = "#E67E22",
  color = "#A04000"
) +
  labs(
    title = "基礎 MCA Dim 2:貢獻度最高的類別",
    x = "變數類別",
    y = "貢獻度"
  ) +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

p_contrib_basic_dim2

ggsave(
  "mca_outputs/04_basic_dim2_contrib.png",
  p_contrib_basic_dim2,
  width = 12,
  height = 8,
  dpi = 1500
)

七. MCA 分析二:加入政治身份與領導形象的深度模型

7.1 建立深度 MCA 資料

tv_mca_deep0 <- tv_base %>%
  select(
    w9_num,
    tv_station_r,
    party_block_r,
    ui_r,
    image_pattern_r,
    leader_gap_r,
    sex_r,
    gen_r,
    edu_r,
    region_r
  ) %>%
  na.omit() %>%
  as.data.frame()

mca_w_deep <- as.numeric(tv_mca_deep0$w9_num)

tv_mca_deep <- tv_mca_deep0 %>%
  select(-w9_num) %>%
  as.data.frame()

tv_mca_deep <- as.data.frame(
  lapply(tv_mca_deep, function(x) factor(as.character(x))),
  stringsAsFactors = TRUE
)

tv_mca_deep <- droplevels(tv_mca_deep)

## MCA 前檢查
sapply(tv_mca_deep, nlevels)
   tv_station_r   party_block_r            ui_r image_pattern_r    leader_gap_r 
             10               5               4               6               3 
          sex_r           gen_r           edu_r        region_r 
              2               5               3               5 
length(mca_w_deep)
[1] 516
nrow(tv_mca_deep)
[1] 516
if (length(mca_w_deep) != nrow(tv_mca_deep)) {
  stop("mca_w_deep 長度與 tv_mca_deep 列數不一致。")
}

bad_vars_deep <- names(sapply(tv_mca_deep, nlevels)[sapply(tv_mca_deep, nlevels) < 2])

if (length(bad_vars_deep) > 0) {
  stop(paste("深度 MCA 有變數類別數不足:", paste(bad_vars_deep, collapse = ", ")))
}

7.2 執行深度 MCA

## 主動變數:
## tv_station_r, party_block_r, ui_r, image_pattern_r, leader_gap_r
##
## 輔助變數:
## sex_r, gen_r, edu_r, region_r

sup_vars_deep <- c("sex_r", "gen_r", "edu_r", "region_r")
sup_idx_deep <- which(names(tv_mca_deep) %in% sup_vars_deep)

res.MCA.deep <- MCA(
  tv_mca_deep,
  ncp = 10,
  quali.sup = sup_idx_deep,
  row.w = mca_w_deep,
  graph = FALSE
)

res_deep <- res.MCA.deep

summary(res.MCA.deep)

Call:
MCA(X = tv_mca_deep, ncp = 10, quali.sup = sup_idx_deep, graph = FALSE,  
     row.w = mca_w_deep) 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
Variance               0.526   0.336   0.277   0.255   0.235   0.230   0.227
% of var.             11.424   7.312   6.031   5.539   5.119   4.991   4.945
Cumulative % of var.  11.424  18.737  24.768  30.307  35.426  40.417  45.361
                       Dim.8   Dim.9  Dim.10  Dim.11  Dim.12  Dim.13  Dim.14
Variance               0.213   0.213   0.201   0.199   0.189   0.185   0.179
% of var.              4.637   4.623   4.361   4.323   4.117   4.018   3.894
Cumulative % of var.  49.998  54.621  58.982  63.305  67.422  71.440  75.335
                      Dim.15  Dim.16  Dim.17  Dim.18  Dim.19  Dim.20  Dim.21
Variance               0.165   0.151   0.148   0.137   0.134   0.122   0.113
% of var.              3.589   3.284   3.228   2.983   2.906   2.652   2.452
Cumulative % of var.  78.923  82.207  85.435  88.418  91.324  93.976  96.427
                      Dim.22  Dim.23
Variance               0.096   0.068
% of var.              2.088   1.485
Cumulative % of var.  98.515 100.000

Individuals (the 10 first)
               Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
1           |  0.062  0.002  0.001 | -0.664  0.307  0.073 |  0.453  0.174
2           | -1.241  0.828  0.573 |  0.565  0.269  0.119 | -0.039  0.002
3           |  1.308  0.219  0.259 |  0.804  0.129  0.098 | -0.398  0.038
4           |  0.389  0.088  0.041 | -0.212  0.041  0.012 | -1.058  1.228
5           |  0.778  0.145  0.136 |  0.586  0.129  0.077 |  0.965  0.424
6           |  1.003  0.232  0.155 |  0.426  0.065  0.028 |  0.142  0.009
7           |  0.989  0.131  0.175 |  0.364  0.028  0.024 |  0.313  0.025
8           |  0.222  0.021  0.006 | -0.548  0.198  0.038 |  0.754  0.454
9           |  1.127  0.402  0.214 |  0.061  0.002  0.001 |  0.314  0.059
10          | -0.407  0.018  0.049 | -0.204  0.007  0.012 |  0.200  0.008
              cos2  
1            0.034 |
2            0.001 |
3            0.024 |
4            0.302 |
5            0.210 |
6            0.003 |
7            0.017 |
8            0.072 |
9            0.017 |
10           0.012 |

Categories (the 10 first)
                        Dim.1    ctr   cos2 v.test    Dim.2    ctr   cos2
主要看TVBS           |  0.580  2.831  0.095  6.954 | -0.282  1.045  0.023
主要看三立           | -0.872  3.012  0.088 -6.688 |  0.659  2.687  0.050
主要看中天           |  1.257  6.033  0.176  9.446 |  1.328 10.524  0.197
主要看民視           | -0.970  6.163  0.196 -9.952 |  0.331  1.121  0.023
主要看年代           | -0.588  0.853  0.024 -3.484 |  0.059  0.014  0.000
主要看東森           |  0.099  0.043  0.001  0.803 | -0.857  5.057  0.096
主要看壹電視         | -0.437  0.392  0.011 -2.349 | -0.450  0.649  0.012
主要看無線或公共電視 |  0.598  1.558  0.046  4.838 | -0.542  2.004  0.038
多台都看             | -0.606  0.530  0.014 -2.708 | -0.463  0.484  0.008
其他電視台           |  0.530  0.165  0.004  1.494 |  0.189  0.033  0.001
                     v.test    Dim.3    ctr   cos2 v.test  
主要看TVBS           -3.380 | -0.139  0.308  0.005 -1.667 |
主要看三立            5.054 | -0.877  5.774  0.089 -6.728 |
主要看中天            9.981 |  0.055  0.022  0.000  0.412 |
主要看民視            3.397 |  0.296  1.090  0.018  3.041 |
主要看年代            0.352 |  0.088  0.037  0.001  0.524 |
主要看東森           -6.979 | -0.435  1.582  0.025 -3.545 |
主要看壹電視         -2.417 |  1.214  5.737  0.084  6.526 |
主要看無線或公共電視 -4.391 | -0.123  0.125  0.002 -0.996 |
多台都看             -2.071 |  0.632  1.094  0.016  2.826 |
其他電視台            0.533 |  2.246  5.625  0.079  6.334 |

Categorical variables (eta2)
                  Dim.1 Dim.2 Dim.3  
tv_station_r    | 0.567 0.397 0.297 |
party_block_r   | 0.647 0.258 0.389 |
ui_r            | 0.364 0.184 0.030 |
image_pattern_r | 0.421 0.387 0.601 |
leader_gap_r    | 0.629 0.456 0.070 |

Supplementary categories (the 10 first)
                    Dim.1   cos2 v.test    Dim.2   cos2 v.test    Dim.3   cos2
女性             |  0.009  0.000  0.216 | -0.054  0.003 -1.300 |  0.003  0.000
男性             | -0.010  0.000 -0.216 |  0.062  0.003  1.300 | -0.003  0.000
G1與G2:67歲以上 | -0.058  0.001 -0.640 |  0.221  0.012  2.418 |  0.077  0.001
G3:52至66歲     | -0.127  0.010 -2.293 |  0.161  0.017  2.905 |  0.124  0.010
G4:42至51歲     |  0.067  0.001  0.687 | -0.163  0.006 -1.681 |  0.029  0.000
G5:32至41歲     |  0.247  0.012  2.455 | -0.140  0.004 -1.389 | -0.176  0.006
G6:20至31歲     |  0.113  0.001  0.748 | -0.679  0.040 -4.498 | -0.494  0.021
高中職           |  0.088  0.004  1.360 |  0.104  0.005  1.605 | -0.124  0.007
國中及以下       | -0.238  0.034 -4.120 |  0.097  0.006  1.671 |  0.154  0.014
專科以上         |  0.194  0.017  2.933 | -0.223  0.022 -3.363 | -0.057  0.001
                 v.test  
女性              0.062 |
男性             -0.062 |
G1與G2:67歲以上  0.845 |
G3:52至66歲      2.234 |
G4:42至51歲      0.300 |
G5:32至41歲     -1.755 |
G6:20至31歲     -3.275 |
高中職           -1.903 |
國中及以下        2.660 |
專科以上         -0.862 |

Supplementary categorical variables (eta2)
              Dim.1 Dim.2 Dim.3  
sex_r       | 0.000 0.003 0.000 |
gen_r       | 0.019 0.064 0.032 |
edu_r       | 0.035 0.022 0.015 |
region_r    | 0.011 0.010 0.009 |

7.3 深度 MCA 圖表

p_scree_deep <- fviz_screeplot(
  res.MCA.deep,
  ncp = 10,
  addlabels = TRUE,
  barfill = "#2E86DE",
  barcolor = "#1B4F72",
  linecolor = "#E74C3C"
) +
  labs(
    title = "深度 MCA 陡坡圖:媒體、政黨、統獨與領導形象",
    x = "維度",
    y = "解釋變異比例 (%)"
  ) +
  theme_minimal(base_size = 14)

p_scree_deep

ggsave(
  "mca_outputs/05_deep_screeplot.png",
  p_scree_deep,
  width = 10,
  height = 7,
  dpi = 1500
)


p_mca_deep <- fviz_mca_var(
  res_deep,
  repel = TRUE,
  col.var = "contrib",
  gradient.cols = c("#3B4CC0", "#FFD92F", "#E7298A"),
  labelsize = 4,
  pointsize = 3
) +
  labs(
    title = "深度 MCA:電視台、政黨傾向與政治身份",
    color = "類別貢獻度"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(size = 17, face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = 11, hjust = 0.5),
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10)
  )

p_mca_deep

ggsave(
  "mca_outputs/06_deep_mca_var.png",
  p_mca_deep,
  width = 13,
  height = 10,
  dpi = 1500
)

對於這張深度MCA圖,我會詮釋橫軸為政治身分,縱軸為政治身分凝聚度。從深度MCA中我看到,東森作為主流媒體之一與其他媒體的不同在於他在縱軸上的位置明顯地低於其他媒體,東森的混合位置可能與新聞品牌型態有關。相較於三立、中天這種更容易被貼上陣營標籤的新聞台,東森同時具有一般新聞、談話節目與網路平台擴散的特性。《關鍵時刻》在2018年已經成為YouTube百萬訂閱節目,顯示東森的影響不只來自傳統電視頻道,也可能來自跨平台、話題化、娛樂化的政治資訊接觸。因此,東森受眾未必會被單一藍綠身份吸收,而可能包含泛藍、泛綠、第三勢力與無黨流動者。東森2018年也曾以Qsearch資料宣稱其Facebook粉絲頁在25–34歲用戶中互動表現突出。雖然這是東森自家報導,不能當作完全客觀證據,但可以當作補充線索:東森可能不只是傳統年長電視新聞受眾,而有較明顯的跨平台、較年輕或較流動的社群接觸。

再一個發現是,「蔡馬皆中立」與「蔡馬皆負面」在橫軸上的位置相近,我理解為這是一種低差異化的領導人評價區。也就是說,這些類別不一定明確站在蔡英文或馬英九任何一方,而是代表對兩位領導人的評價較不具有陣營辨識度。相較之下,當受訪者明確給出「蔡正面、馬負面」或「蔡負面、馬正面」的評價時,這種評價就更容易和藍綠陣營、統獨立場及特定新聞台連在一起。

這裡出現一個看似矛盾的現象:2018九合一選舉藍營大勝,但本資料中主要看電視新聞者的蔡馬相對評價卻偏向蔡英文。但若考慮調查時間,這個矛盾其實可以被重新理解。本研究的電話訪問時間是 2020 年 3 月 20 日至 3 月 23 日,已經是在2020總統大選之後。到了2019–2020,香港反送中與中國壓力讓總統層級的政治身份重新往蔡英文方向集中。2018九合一可以被理解為地方選舉層級的反執政與治理不滿;但 2020 總統大選則是在兩岸關係、國家身份與領導人選擇下重新排列政治認同。到了2020年3月,蔡英文已完成連任,且疫情初期政府防疫治理受到高度關注,因此蔡英文相對馬英九的評價優勢並不全然與九合一結果衝突。

因此,深度 MCA 的蔡馬評價軸提醒我們,地方選舉結果、總統層級認同與治理評價不能混為一談。2018 年藍營地方選舉勝利,並不等於選民在總統層級全面回到馬英九或泛藍領導形象;相反地,2020大選後的政治環境使蔡英文重新成為總統層級政治身份的核心符號。換言之,新聞台、政黨傾向、統獨立場與蔡馬評價共同構成的,不是靜態的藍綠版圖,而是會隨重大政治事件重新排列的政治身份空間。總地來看,即便是在反送中和抗中聲量日漸升高的情況下,社會風向逐漸導向民進黨或蔡英文,部分收視群呈現高度政治身份凝聚,可能反映選擇性接觸下,閱聽人傾向停留在與自身立場一致的資訊環境中。而這群人正是選擇性接觸這一論點最強的支持者

p_contrib_deep_dim1 <- fviz_contrib(
  res.MCA.deep,
  choice = "var",
  axes = 1,
  top = 25,
  fill = "#2E86DE",
  color = "#1B4F72"
) +
  labs(
    title = "深度 MCA Dim 1:貢獻度最高的類別",
    x = "變數類別",
    y = "貢獻度"
  ) +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

p_contrib_deep_dim1

ggsave(
  "mca_outputs/07_deep_dim1_contrib.png",
  p_contrib_deep_dim1,
  width = 13,
  height = 8,
  dpi = 1500
)


p_contrib_deep_dim2 <- fviz_contrib(
  res.MCA.deep,
  choice = "var",
  axes = 2,
  top = 25,
  fill = "#E67E22",
  color = "#A04000"
) +
  labs(
    title = "深度 MCA Dim 2:貢獻度最高的類別",
    x = "變數類別",
    y = "貢獻度"
  ) +
  theme_minimal(base_size = 14) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

p_contrib_deep_dim2

ggsave(
  "mca_outputs/08_deep_dim2_contrib.png",
  p_contrib_deep_dim2,
  width = 13,
  height = 8,
  dpi = 1500
)

八.文獻回顧

Stroud, N. J. (2011). Niche News: The Politics of News Choice. Oxford University Press.

Iyengar, S., & Hahn, K. S. (2009). Red media, blue media: Evidence of ideological selectivity in media use. Journal of Communication, 59(1), 19–39.

本研究將選擇性接觸作為理解電視新聞收視偏好與政治身份關係的理論基礎。選擇性接觸理論指出,民眾在面對多元媒體選擇時,往往傾向接觸與自身既有態度或政治立場相近的資訊來源。Iyengar 與 Hahn(2009)在研究中指出,新聞來源的政治形象會影響受眾的選擇;Stroud(2011)也進一步說明,在媒體選擇增加的環境中,受眾可能透過黨派性媒體來維持或強化既有政治認同。因此,本研究並不主張電視台單方面造成政黨傾向,而是將電視台視為政治身份與媒體選擇共同形成的觀察入口。

本研究的第一個發現是,網路上常見的藍綠媒體標籤在資料中確實有一定基礎。基礎 MCA 顯示,三立、民視與民進黨支持者較接近,中天與國民黨支持者較接近,TVBS 則呈現較淺藍、較主流藍的位置。這表示電視新聞台的收視偏好並非隨機分布,而是與政黨傾向形成明顯的空間關係。然而,本研究更重要的發現不只在於確認藍綠兩端,而是指出不同新聞台的政治身份濃度並不相同。

第二個發現是東森的位置。相較於三立與中天這類高度陣營化的新聞台,東森並未被藍綠橫軸明確吸收到任一端,而是在縱軸上呈現較低政治身份凝聚力的位置。交叉表也顯示,東森受眾同時包含泛藍、泛綠、第三勢力與無黨或態度流動者。這表示東森可能不是典型的陣營媒體,而更接近混合型政治資訊入口。這種位置可能與東森同時具有一般新聞、談話節目、社群平台擴散與話題型內容有關,但此一推論仍需要更多節目內容或受眾資料進一步驗證。

第三個發現來自深度 MCA。當統獨立場、蔡馬媒體形象與領導評價被納入分析後,電視台與政黨傾向的關係不再只是藍綠對應,而是形成更完整的政治身份空間。特別是「蔡馬皆中立」與「蔡馬皆負面」在橫軸上位置相近,顯示其較像是低差異化的領導人評價區;相對地,「蔡正面、馬負面」與「蔡負面、馬正面」則更容易與政黨陣營、統獨立場與特定新聞台連結。這也提供一個解釋 2018 九合一選舉與 2020 總統政治氛圍差異的角度:2018 藍營地方選舉勝利,未必代表選民在總統層級全面回到馬英九或泛藍領導形象;到了 2019–2020 年,香港反送中、中國壓力與總統大選重新組織了台灣的政治身份,使蔡英文重新成為總統層級政治認同的重要符號。