# install.packages(c("readxl", "dplyr", "tidyr", "stringr", "forcats",
#                    "ggplot2", "scales", "knitr", "FactoMineR", "factoextra",
#                    "foreign"))
packages <- c(
  "readxl", "dplyr", "tidyr", "stringr", "forcats",
  "ggplot2", "scales", "knitr", "FactoMineR", "factoextra", "foreign"
)

missing_packages <- packages[!vapply(packages, requireNamespace, logical(1), quietly = TRUE)]
if (length(missing_packages) > 0) {
  stop("請先安裝缺少的套件:", paste(missing_packages, collapse = ", "), call. = FALSE)
}

invisible(lapply(packages, library, character.only = TRUE))

knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE,
  fig.width = 9,
  fig.height = 6
)

1 研究目的

本報告探索「個人價值取向」與「網紅反推薦態度」之間的對應關係。分析重點不是預測,而是透過 MCA 觀察哪些價值輪廓較靠近「希望網紅停止推銷」「覺得推銷干擾」「覺得推銷不舒服」等反推薦態度。

本次設定:

  1. 主動變數:五個個人價值與網路話題好奇變數。
  2. 補充變數:網紅推薦接受、網紅推銷反感、理性消費與人口背景。
  3. 分析對象:有回答網紅推薦態度題組者;P7 題跳答者不納入 MCA。

2 載入資料與問卷標籤

raw_data <- readxl::read_excel("20260113/data.xlsx")

sav_raw <- foreign::read.spss(
  "20260113/data.sav",
  to.data.frame = FALSE,
  use.value.labels = FALSE,
  reencode = "UTF-8"
)

question_labels <- attr(sav_raw, "variable.labels")
codebook <- tibble(
  variable_code = names(question_labels),
  question_label = unname(question_labels)
)

target_codes <- c(
  "vn2", "vn4", "vn6", "vn8", "vn22",
  "vp7_1", "vp7_3", "vp7_4", "vp7_5", "vp7_6",
  "sel_gen", "agegp", "edugp", "vo5"
)

codebook %>%
  filter(variable_code %in% target_codes) %>%
  kable(caption = "本次分析使用變數與 ques2 題目")
本次分析使用變數與 ques2 題目
variable_code question_label
vp7_1 P7_1 請問您同不同意,您會想要購買網紅所推薦的產品?
vp7_3 P7_3 請問您同不同意,當您看到網紅正在推銷產品時,您希望他們能夠停止推銷呢?
vp7_4 P7_4 請問您同不同意,當您在觀看網紅內容的時候,他們突然推薦產品,對您來說是一種干擾呢?
vp7_5 P7_5 請問您同不同意,當您在觀看網紅內容的時候,他們突然推薦產品,您會有不舒服的感覺?
vp7_6 P7_6 請問您同不同意,當網紅向您推銷產品,您還是會保持理性消費呢?
vn2 N2 重視財富,想要擁有許多錢和昂貴的東西。
vn4 N4 重視追求快樂,寵愛自己。
vn6 N6 成功很重要,想要讓別人知道自己的成就。
vn8 N8 重視舉止合宜,別人認為不好的事您不會去做。舉止合宜指的是「行為符合社會的要求」。
vn22 N22 知道別人在網路上討論什麼,您也會感興趣。
vo5 O5 請問您個人平均每個月所有的(稅前)收入差不多有多少?(包括:薪資、年終獎金、年節分紅、加班費、執行業務收入、自營收入、投資利息、房租、退休金、政府津貼給付等)
sel_gen 中選者性別
agegp 受訪者年齡分類
edugp 受訪者教育程度分類(6分類)

3 資料清理與變數標籤

to_num <- function(x) suppressWarnings(as.numeric(as.character(x)))

clean_missing <- function(x, miss = c(
  95, 96, 97, 98, 99,
  996, 997, 998, 999,
  9996, 9997, 9998, 9999
)) {
  x <- to_num(x)
  x[x %in% miss] <- NA_real_
  x
}

value_like_factor <- function(x) {
  x <- to_num(x)
  case_when(
    x %in% c(1, 2) ~ "不像我",
    x == 3 ~ "有點像",
    x == 4 ~ "很像我",
    x %in% c(96, 97, 98, 99) ~ NA_character_,
    TRUE ~ NA_character_
  ) %>%
    factor(levels = c("不像我", "有點像", "很像我"))
}

agree_factor <- function(x) {
  x <- to_num(x)
  case_when(
    x %in% c(1, 2) ~ "不同意",
    x == 3 ~ "普通",
    x %in% c(4, 5) ~ "同意",
    x %in% c(96, 97, 98, 99) ~ NA_character_,
    TRUE ~ NA_character_
  ) %>%
    factor(levels = c("不同意", "普通", "同意"))
}

age_group_factor <- function(x) {
  factor(
    clean_missing(x),
    levels = 1:6,
    labels = c("18-19歲", "20-29歲", "30-39歲", "40-49歲", "50-59歲", "60歲以上")
  )
}

education_factor <- function(x) {
  factor(
    clean_missing(x),
    levels = 1:6,
    labels = c("小學以下", "國初中", "高中職", "專科", "大學", "研究所"),
    ordered = TRUE
  )
}

income_group <- function(x) {
  x <- clean_missing(x)
  case_when(
    is.na(x) ~ NA_character_,
    x <= 1 ~ "未滿1萬",
    x <= 3 ~ "1-2萬",
    x <= 5 ~ "2-4萬",
    x <= 7 ~ "4-6萬",
    x <= 11 ~ "6-10萬",
    x >= 12 ~ "10萬以上"
  ) %>%
    factor(levels = c("未滿1萬", "1-2萬", "2-4萬", "4-6萬", "6-10萬", "10萬以上"))
}

missing_as_level <- function(x, missing_label = "未回答") {
  x <- as.character(x)
  x[is.na(x) | x == ""] <- missing_label
  factor(x)
}
analysis_data <- raw_data %>%
  transmute(
    財富重視 = value_like_factor(vn2),
    享樂重視 = value_like_factor(vn4),
    成就重視 = value_like_factor(vn6),
    守規重視 = value_like_factor(vn8),
    話題好奇 = agree_factor(vn22),

    購買意願 = agree_factor(vp7_1),
    停止推銷 = agree_factor(vp7_3),
    推銷干擾 = agree_factor(vp7_4),
    推銷不適 = agree_factor(vp7_5),
    理性消費 = agree_factor(vp7_6),

    性別 = factor(sel_gen, levels = c(1, 2), labels = c("男性", "女性")),
    年齡 = age_group_factor(agegp),
    教育 = education_factor(edugp),
    收入 = income_group(vo5)
  ) %>%
  mutate(
    反感題有效數 = rowSums(!is.na(across(c(停止推銷, 推銷干擾, 推銷不適)))),
    反感同意數 = rowSums(across(c(停止推銷, 推銷干擾, 推銷不適), ~ .x == "同意"), na.rm = TRUE),
    反感普通數 = rowSums(across(c(停止推銷, 推銷干擾, 推銷不適), ~ .x == "普通"), na.rm = TRUE),
    網紅反感 = case_when(
      反感題有效數 < 2 ~ NA_character_,
      反感同意數 >= 2 ~ "高反感",
      反感同意數 == 1 | 反感普通數 >= 2 ~ "中反感",
      TRUE ~ "低反感"
    ) %>%
      factor(levels = c("低反感", "中反感", "高反感"))
  )

analysis_variable_labels <- tibble::tribble(
  ~variable, ~question, ~short_label, ~role,
  "vn2", "N2 重視財富,想要擁有許多錢和昂貴的東西。", "財富重視", "主動變數",
  "vn4", "N4 重視追求快樂,寵愛自己。", "享樂重視", "主動變數",
  "vn6", "N6 成功很重要,想要讓別人知道自己的成就。", "成就重視", "主動變數",
  "vn8", "N8 重視舉止合宜,別人認為不好的事您不會去做。", "守規重視", "主動變數",
  "vn22", "N22 知道別人在網路上討論什麼,您也會感興趣。", "話題好奇", "主動變數",
  "vp7_1", "P7_1 會想要購買網紅所推薦的產品。", "購買意願", "補充變數",
  "vp7_3", "P7_3 希望正在推銷產品的網紅停止推銷。", "停止推銷", "補充變數",
  "vp7_4", "P7_4 網紅突然推薦產品是一種干擾。", "推銷干擾", "補充變數",
  "vp7_5", "P7_5 網紅突然推薦產品會有不舒服的感覺。", "推銷不適", "補充變數",
  "vp7_6", "P7_6 網紅推銷產品時仍會保持理性消費。", "理性消費", "補充變數"
)

analysis_variable_labels %>%
  kable(caption = "變數標籤與分析角色")
變數標籤與分析角色
variable question short_label role
vn2 N2 重視財富,想要擁有許多錢和昂貴的東西。 財富重視 主動變數
vn4 N4 重視追求快樂,寵愛自己。 享樂重視 主動變數
vn6 N6 成功很重要,想要讓別人知道自己的成就。 成就重視 主動變數
vn8 N8 重視舉止合宜,別人認為不好的事您不會去做。 守規重視 主動變數
vn22 N22 知道別人在網路上討論什麼,您也會感興趣。 話題好奇 主動變數
vp7_1 P7_1 會想要購買網紅所推薦的產品。 購買意願 補充變數
vp7_3 P7_3 希望正在推銷產品的網紅停止推銷。 停止推銷 補充變數
vp7_4 P7_4 網紅突然推薦產品是一種干擾。 推銷干擾 補充變數
vp7_5 P7_5 網紅突然推薦產品會有不舒服的感覺。 推銷不適 補充變數
vp7_6 P7_6 網紅推銷產品時仍會保持理性消費。 理性消費 補充變數

4 基本資料探索

analysis_vars <- c(
  "財富重視", "享樂重視", "成就重視", "守規重視", "話題好奇",
  "購買意願", "停止推銷", "推銷干擾", "推銷不適", "理性消費", "網紅反感"
)

missing_summary <- analysis_data %>%
  summarise(across(all_of(analysis_vars), ~ sum(is.na(.x)))) %>%
  pivot_longer(everything(), names_to = "variable", values_to = "missing_n") %>%
  mutate(missing_rate = missing_n / nrow(analysis_data))

missing_summary %>%
  kable(digits = 3, caption = "主要分析變數缺失數與缺失率")
主要分析變數缺失數與缺失率
variable missing_n missing_rate
財富重視 18 0.009
享樂重視 17 0.008
成就重視 29 0.014
守規重視 19 0.009
話題好奇 30 0.015
購買意願 1172 0.581
停止推銷 1172 0.581
推銷干擾 1171 0.581
推銷不適 1171 0.581
理性消費 1172 0.581
網紅反感 1171 0.581
analysis_data %>%
  select(all_of(analysis_vars)) %>%
  pivot_longer(everything(), names_to = "variable", values_to = "category") %>%
  filter(!is.na(category)) %>%
  count(variable, category) %>%
  group_by(variable) %>%
  mutate(rate = n / sum(n)) %>%
  ungroup() %>%
  ggplot(aes(x = category, y = rate, fill = variable)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = scales::percent(rate, accuracy = 0.1)), vjust = -0.2, size = 3) +
  facet_wrap(~ variable, scales = "free_x") +
  scale_y_continuous(labels = scales::percent_format()) +
  theme_minimal(base_size = 12) +
  theme(axis.text.x = element_text(angle = 35, hjust = 1)) +
  labs(title = "主要變數類別分布", x = NULL, y = "比例")

analysis_data %>%
  select(網紅反感, 財富重視, 享樂重視, 成就重視, 守規重視, 話題好奇) %>%
  filter(if_all(everything(), ~ !is.na(.x))) %>%
  pivot_longer(-網紅反感, names_to = "value_dimension", values_to = "category") %>%
  filter(!is.na(category)) %>%
  count(value_dimension, category, 網紅反感) %>%
  group_by(value_dimension, category) %>%
  mutate(rate = n / sum(n)) %>%
  ungroup() %>%
  ggplot(aes(x = category, y = rate, fill = 網紅反感)) +
  geom_col(position = "fill") +
  facet_wrap(~ value_dimension, scales = "free_x") +
  scale_y_continuous(labels = scales::percent_format()) +
  theme_minimal(base_size = 12) +
  theme(axis.text.x = element_text(angle = 35, hjust = 1)) +
  labs(title = "個人價值類別中的網紅反感程度", x = NULL, y = "比例", fill = "反感程度")

5 MCA:個人價值與網紅反推薦態度

MCA 的主動變數放入五個價值向度,使座標空間由「財富、享樂、成就、守規、話題好奇」形成。網紅反推薦態度作為補充變數,用來觀察反感與購買意願靠近哪些價值輪廓。

active_vars <- c("財富重視", "享樂重視", "成就重視", "守規重視", "話題好奇")

supplementary_vars <- c(
  "購買意願", "停止推銷", "推銷干擾", "推銷不適", "理性消費",
  "網紅反感", "性別", "年齡", "教育", "收入"
)

mca_data <- analysis_data %>%
  select(all_of(c(active_vars, supplementary_vars))) %>%
  filter(if_all(everything(), ~ !is.na(.x))) %>%
  mutate(across(everything(), droplevels))

valid_vars <- names(mca_data)[vapply(mca_data, function(x) nlevels(droplevels(x)) >= 2, logical(1))]
dropped_vars <- setdiff(names(mca_data), valid_vars)

mca_data <- mca_data %>%
  select(all_of(valid_vars)) %>%
  mutate(across(everything(), droplevels))

active_vars_kept <- intersect(active_vars, names(mca_data))
supplementary_vars_kept <- intersect(supplementary_vars, names(mca_data))
supplementary_index <- match(supplementary_vars_kept, names(mca_data))

tibble(
  active_variables = paste(active_vars_kept, collapse = ", "),
  supplementary_variables = paste(supplementary_vars_kept, collapse = ", "),
  dropped_variables = ifelse(length(dropped_vars) == 0, "無", paste(dropped_vars, collapse = ", ")),
  original_n = nrow(analysis_data),
  mca_n = nrow(mca_data)
) %>%
  kable(caption = "MCA 實際納入資料")
MCA 實際納入資料
active_variables supplementary_variables dropped_variables original_n mca_n
財富重視, 享樂重視, 成就重視, 守規重視, 話題好奇 購買意願, 停止推銷, 推銷干擾, 推銷不適, 理性消費, 網紅反感, 性別, 年齡, 教育, 收入 2016 835
res_mca <- FactoMineR::MCA(
  mca_data,
  quali.sup = supplementary_index,
  graph = FALSE
)

res_mca$eig %>%
  as.data.frame() %>%
  head(10) %>%
  kable(digits = 3, caption = "MCA 前 10 軸特徵值與解釋變異")
MCA 前 10 軸特徵值與解釋變異
eigenvalue percentage of variance cumulative percentage of variance
dim 1 0.322 16.097 16.097
dim 2 0.286 14.296 30.393
dim 3 0.201 10.069 40.462
dim 4 0.194 9.723 50.185
dim 5 0.185 9.245 59.430
dim 6 0.180 8.976 68.406
dim 7 0.171 8.562 76.968
dim 8 0.163 8.171 85.140
dim 9 0.155 7.753 92.893
dim 10 0.142 7.107 100.000
summary(res_mca, ncp = 3, nbelements = 10)
## 
## Call:
## FactoMineR::MCA(X = mca_data, quali.sup = supplementary_index,  
##      graph = FALSE) 
## 
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
## Variance               0.322   0.286   0.201   0.194   0.185   0.180   0.171
## % of var.             16.097  14.296  10.069   9.723   9.245   8.976   8.562
## Cumulative % of var.  16.097  30.393  40.462  50.185  59.430  68.406  76.968
##                        Dim.8   Dim.9  Dim.10
## Variance               0.163   0.155   0.142
## % of var.              8.171   7.753   7.107
## Cumulative % of var.  85.140  92.893 100.000
## 
## Individuals (the 10 first)
##             Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr   cos2  
## 1        | -0.331  0.041  0.108 | -0.141  0.008  0.020 |  0.412  0.101  0.167 |
## 2        | -0.587  0.128  0.228 |  0.266  0.030  0.047 |  0.086  0.004  0.005 |
## 3        |  1.300  0.629  0.409 |  0.733  0.225  0.130 |  0.076  0.003  0.001 |
## 4        |  0.874  0.284  0.197 |  0.460  0.089  0.054 |  0.357  0.076  0.033 |
## 5        | -0.335  0.042  0.072 |  0.323  0.044  0.067 |  0.785  0.367  0.396 |
## 6        |  0.773  0.222  0.173 |  0.916  0.351  0.243 | -0.503  0.150  0.073 |
## 7        | -0.719  0.192  0.237 |  0.745  0.233  0.255 |  0.020  0.000  0.000 |
## 8        |  0.596  0.132  0.114 |  0.661  0.183  0.140 |  0.095  0.005  0.003 |
## 9        |  0.140  0.007  0.004 |  1.011  0.428  0.216 |  0.320  0.061  0.022 |
## 10       |  0.059  0.001  0.002 |  0.929  0.361  0.369 | -0.608  0.220  0.158 |
## 
## Categories (the 10 first)
##                     Dim.1     ctr    cos2  v.test     Dim.2     ctr    cos2
## 財富重視_不像我 |  -0.446   6.213   0.201 -12.955 |   0.448   7.068   0.203
## 財富重視_有點像 |   0.045   0.045   0.001   0.977 |  -0.766  15.001   0.338
## 財富重視_很像我 |   1.579  20.403   0.378  17.762 |   0.413   1.573   0.026
## 享樂重視_不像我 |  -0.676   5.331   0.106  -9.388 |   0.817   8.775   0.154
## 享樂重視_有點像 |  -0.300   2.822   0.092  -8.752 |  -0.465   7.639   0.221
## 享樂重視_很像我 |   0.909  15.721   0.365  17.446 |   0.265   1.510   0.031
## 成就重視_不像我 |  -0.405   6.263   0.262 -14.789 |   0.288   3.575   0.133
## 成就重視_有點像 |   0.343   2.299   0.054   6.712 |  -0.783  13.511   0.282
## 成就重視_很像我 |   2.032  17.820   0.308  16.034 |   0.997   4.834   0.074
## 守規重視_不像我 |  -0.287   1.092   0.022  -4.317 |   0.721   7.748   0.141
##                  v.test     Dim.3     ctr    cos2  v.test  
## 財富重視_不像我  13.021 |  -0.191   1.823   0.037  -5.551 |
## 財富重視_有點像 -16.786 |   0.247   2.206   0.035   5.403 |
## 財富重視_很像我   4.648 |   0.046   0.027   0.000   0.514 |
## 享樂重視_不像我  11.351 |   0.072   0.097   0.001   1.002 |
## 享樂重視_有點像 -13.570 |   0.221   2.454   0.050   6.455 |
## 享樂重視_很像我   5.096 |  -0.409   5.087   0.074  -7.849 |
## 成就重視_不像我  10.530 |   0.018   0.021   0.001   0.670 |
## 成就重視_有點像 -15.335 |  -0.189   1.112   0.016  -3.693 |
## 成就重視_很像我   7.870 |   0.693   3.310   0.036   5.466 |
## 守規重視_不像我  10.836 |   0.885  16.581   0.212  13.303 |
## 
## Categorical variables (eta2)
##            Dim.1 Dim.2 Dim.3  
## 財富重視 | 0.429 0.338 0.041 |
## 享樂重視 | 0.384 0.256 0.077 |
## 成就重視 | 0.425 0.313 0.045 |
## 守規重視 | 0.197 0.287 0.328 |
## 話題好奇 | 0.174 0.235 0.516 |
## 
## Supplementary categories (the 10 first)
##                    Dim.1   cos2 v.test    Dim.2   cos2 v.test    Dim.3   cos2
## 購買意願_不同意 | -0.153  0.018 -3.829 |  0.166  0.021  4.163 | -0.052  0.002
## 購買意願_普通   |  0.042  0.001  1.031 | -0.135  0.013 -3.337 | -0.013  0.000
## 購買意願_同意   |  0.326  0.018  3.909 | -0.097  0.002 -1.160 |  0.190  0.006
## 停止推銷_不同意 |  0.006  0.000  0.122 |  0.104  0.005  1.980 |  0.199  0.017
## 停止推銷_普通   | -0.001  0.000 -0.032 | -0.090  0.006 -2.232 | -0.127  0.012
## 停止推銷_同意   | -0.005  0.000 -0.091 |  0.025  0.000  0.436 | -0.023  0.000
## 推銷干擾_不同意 |  0.001  0.000  0.012 |  0.050  0.001  0.761 |  0.171  0.008
## 推銷干擾_普通   | -0.026  0.000 -0.506 | -0.125  0.007 -2.428 |  0.004  0.000
## 推銷干擾_同意   |  0.017  0.000  0.460 |  0.060  0.003  1.622 | -0.082  0.006
## 推銷不適_不同意 |  0.008  0.000  0.164 |  0.084  0.004  1.739 |  0.148  0.011
##                 v.test  
## 購買意願_不同意 -1.311 |
## 購買意願_普通   -0.321 |
## 購買意願_同意    2.279 |
## 停止推銷_不同意  3.790 |
## 停止推銷_普通   -3.171 |
## 停止推銷_同意   -0.396 |
## 推銷干擾_不同意  2.608 |
## 推銷干擾_普通    0.068 |
## 推銷干擾_同意   -2.220 |
## 推銷不適_不同意  3.076 |
## 
## Supplementary categorical variables (eta2)
##            Dim.1 Dim.2 Dim.3  
## 購買意願 | 0.026 0.021 0.007 |
## 停止推銷 | 0.000 0.007 0.019 |
## 推銷干擾 | 0.000 0.007 0.010 |
## 推銷不適 | 0.001 0.007 0.011 |
## 理性消費 | 0.003 0.009 0.003 |
## 網紅反感 | 0.001 0.005 0.015 |
## 性別     | 0.000 0.007 0.002 |
## 年齡     | 0.030 0.035 0.024 |
## 教育     | 0.010 0.020 0.011 |
## 收入     | 0.004 0.002 0.004 |
dimdesc(res_mca, axes = 1:2)
## $`Dim 1`
## 
## Link between the variable and the categorical variable (1-way anova)
## =============================================
##                  R2       p.value
## 財富重視 0.42917034 5.089974e-102
## 成就重視 0.42466720 1.337703e-100
## 享樂重視 0.38429605  2.391818e-88
## 守規重視 0.19744123  1.829645e-40
## 話題好奇 0.17413073  2.723351e-35
## 購買意願 0.02640089  1.466057e-05
## 年齡     0.03024955  1.110419e-04
## 
## Link between variable and the categories of the categorical variables
## ================================================================
##                             Estimate      p.value
## 財富重視=財富重視_很像我  0.67316856 4.886831e-88
## 享樂重視=享樂重視_很像我  0.52813566 3.387734e-84
## 成就重視=成就重視_很像我  0.78040282 1.077221e-68
## 守規重視=守規重視_很像我  0.37359626 1.023501e-41
## 話題好奇=話題好奇_同意    0.33984158 4.679210e-33
## 年齡=18-19歲              0.17263672 1.924345e-05
## 購買意願=購買意願_同意    0.14425863 8.728325e-05
## 年齡=50-59歲             -0.11028975 4.305550e-02
## 教育=國初中              -0.18062085 2.814287e-02
## 年齡=30-39歲             -0.05103839 7.784683e-03
## 購買意願=購買意願_不同意 -0.12736299 1.216275e-04
## 守規重視=守規重視_不像我 -0.18980296 1.444299e-05
## 話題好奇=話題好奇_普通   -0.06551634 4.142470e-09
## 成就重視=成就重視_有點像 -0.17814859 1.050590e-11
## 話題好奇=話題好奇_不同意 -0.27432523 2.855600e-14
## 守規重視=守規重視_有點像 -0.18379330 2.612127e-16
## 享樂重視=享樂重視_有點像 -0.15746523 3.383251e-19
## 享樂重視=享樂重視_不像我 -0.37067042 5.266693e-22
## 財富重視=財富重視_不像我 -0.47573564 1.400076e-42
## 成就重視=成就重視_不像我 -0.60225422 5.202484e-57
## 
## $`Dim 2`
## 
## Link between the variable and the categorical variable (1-way anova)
## =============================================
##                   R2      p.value
## 財富重視 0.337984159 3.028634e-75
## 成就重視 0.313361085 1.199555e-68
## 守規重視 0.286542957 1.002344e-61
## 享樂重視 0.256234419 3.291607e-54
## 話題好奇 0.235444860 3.148227e-49
## 年齡     0.034693051 2.002853e-05
## 購買意願 0.020934340 1.505624e-04
## 教育     0.020477598 4.165299e-03
## 性別     0.006982867 1.572263e-02
## 理性消費 0.009436089 1.936960e-02
## 
## Link between variable and the categories of the categorical variables
## ================================================================
##                             Estimate      p.value
## 話題好奇=話題好奇_不同意  0.46649489 2.170353e-49
## 財富重視=財富重視_不像我  0.22269501 4.708414e-43
## 享樂重視=享樂重視_不像我  0.32672090 3.089417e-32
## 守規重視=守規重視_不像我  0.28208350 2.621518e-29
## 成就重視=成就重視_不像我  0.06452082 1.181299e-27
## 成就重視=成就重視_很像我  0.44376113 1.104382e-15
## 守規重視=守規重視_很像我  0.09858643 3.397617e-12
## 享樂重視=享樂重視_很像我  0.03186268 2.878260e-07
## 財富重視=財富重視_很像我  0.20397412 2.949576e-06
## 購買意願=購買意願_不同意  0.10053990 2.905940e-05
## 年齡=50-59歲              0.14830909 2.844211e-04
## 年齡=60歲以上             0.36932506 9.918133e-04
## 教育=小學以下             0.47026634 1.712143e-03
## 性別=女性                 0.04468220 1.572263e-02
## 理性消費=理性消費_不同意  0.18345331 2.880042e-02
## 停止推銷=停止推銷_不同意  0.04850916 4.769558e-02
## 網紅反感=中反感          -0.04990065 4.462021e-02
## 停止推銷=停止推銷_普通   -0.05486949 2.549948e-02
## 推銷不適=推銷不適_普通   -0.05981492 1.622617e-02
## 性別=男性                -0.04468220 1.572263e-02
## 推銷干擾=推銷干擾_普通   -0.06408313 1.510838e-02
## 年齡=18-19歲             -0.19337094 4.949573e-03
## 話題好奇=話題好奇_同意   -0.19268305 2.219449e-03
## 購買意願=購買意願_普通   -0.06043970 8.231009e-04
## 話題好奇=話題好奇_普通   -0.27381184 2.499789e-13
## 享樂重視=享樂重視_有點像 -0.35858358 4.373005e-47
## 守規重視=守規重視_有點像 -0.38066993 1.774967e-59
## 成就重視=成就重視_有點像 -0.50828195 6.312838e-62
## 財富重視=財富重視_有點像 -0.42666912 1.266923e-76

6 MCA 判讀依據

本報告依據三個資訊判讀 MCA:

  1. 主動類別貢獻度:判斷 Dim1 / Dim2 主要由哪些價值類別形成。
  2. 類別座標位置:判斷類別彼此接近或對立的關係。
  3. 補充變數位置:觀察「高反感」「停止推銷」「推銷干擾」「推銷不適」靠近哪些價值輪廓。
active_stats <- tibble(
  category = rownames(res_mca$var$coord),
  dim1_coord = res_mca$var$coord[, 1],
  dim2_coord = res_mca$var$coord[, 2],
  dim1_contrib = res_mca$var$contrib[, 1],
  dim2_contrib = res_mca$var$contrib[, 2],
  dim1_cos2 = res_mca$var$cos2[, 1],
  dim2_cos2 = res_mca$var$cos2[, 2]
)

supp_stats <- tibble(
  category = rownames(res_mca$quali.sup$coord),
  dim1_coord = res_mca$quali.sup$coord[, 1],
  dim2_coord = res_mca$quali.sup$coord[, 2],
  dim1_cos2 = res_mca$quali.sup$cos2[, 1],
  dim2_cos2 = res_mca$quali.sup$cos2[, 2]
)

active_stats %>%
  arrange(desc(dim1_contrib)) %>%
  slice_head(n = 12) %>%
  kable(digits = 3, caption = "Dim1 貢獻度最高的主動類別")
Dim1 貢獻度最高的主動類別
category dim1_coord dim2_coord dim1_contrib dim2_contrib dim1_cos2 dim2_cos2
財富重視_很像我 1.579 0.413 20.403 1.573 0.378 0.026
成就重視_很像我 2.032 0.997 17.820 4.834 0.308 0.074
享樂重視_很像我 0.909 0.265 15.721 1.510 0.365 0.031
守規重視_很像我 0.706 0.378 8.784 2.832 0.197 0.057
成就重視_不像我 -0.405 0.288 6.263 3.575 0.262 0.133
財富重視_不像我 -0.446 0.448 6.213 7.068 0.201 0.203
話題好奇_同意 0.487 -0.129 5.900 0.469 0.158 0.011
享樂重視_不像我 -0.676 0.817 5.331 8.775 0.106 0.154
話題好奇_不同意 -0.595 1.103 3.505 13.562 0.067 0.231
享樂重視_有點像 -0.300 -0.465 2.822 7.639 0.092 0.221
守規重視_有點像 -0.277 -0.519 2.390 9.464 0.077 0.272
成就重視_有點像 0.343 -0.783 2.299 13.511 0.054 0.282
active_stats %>%
  arrange(desc(dim2_contrib)) %>%
  slice_head(n = 12) %>%
  kable(digits = 3, caption = "Dim2 貢獻度最高的主動類別")
Dim2 貢獻度最高的主動類別
category dim1_coord dim2_coord dim1_contrib dim2_contrib dim1_cos2 dim2_cos2
財富重視_有點像 0.045 -0.766 0.045 15.001 0.001 0.338
話題好奇_不同意 -0.595 1.103 3.505 13.562 0.067 0.231
成就重視_有點像 0.343 -0.783 2.299 13.511 0.054 0.282
守規重視_有點像 -0.277 -0.519 2.390 9.464 0.077 0.272
享樂重視_不像我 -0.676 0.817 5.331 8.775 0.106 0.154
守規重視_不像我 -0.287 0.721 1.092 7.748 0.022 0.141
享樂重視_有點像 -0.300 -0.465 2.822 7.639 0.092 0.221
財富重視_不像我 -0.446 0.448 6.213 7.068 0.201 0.203
成就重視_很像我 2.032 0.997 17.820 4.834 0.308 0.074
成就重視_不像我 -0.405 0.288 6.263 3.575 0.262 0.133
守規重視_很像我 0.706 0.378 8.784 2.832 0.197 0.057
話題好奇_普通 -0.227 -0.281 1.413 2.438 0.041 0.062
supp_stats %>%
  filter(str_detect(category, "購買意願|停止推銷|推銷干擾|推銷不適|理性消費|網紅反感")) %>%
  arrange(desc(dim1_cos2 + dim2_cos2)) %>%
  kable(digits = 3, caption = "網紅推薦態度補充類別位置")
網紅推薦態度補充類別位置
category dim1_coord dim2_coord dim1_cos2 dim2_cos2
購買意願_不同意 -0.153 0.166 0.018 0.021
購買意願_同意 0.326 -0.097 0.018 0.002
購買意願_普通 0.042 -0.135 0.001 0.013
推銷不適_普通 -0.039 -0.103 0.001 0.007
推銷干擾_普通 -0.026 -0.125 0.000 0.007
理性消費_普通 -0.165 -0.207 0.003 0.004
理性消費_不同意 0.117 0.414 0.000 0.006
停止推銷_普通 -0.001 -0.090 0.000 0.006
停止推銷_不同意 0.006 0.104 0.000 0.005
推銷不適_不同意 0.008 0.084 0.000 0.004
推銷干擾_同意 0.017 0.060 0.000 0.003
推銷不適_同意 0.048 0.046 0.001 0.001
理性消費_同意 0.013 0.006 0.001 0.000
推銷干擾_不同意 0.001 0.050 0.000 0.001
停止推銷_同意 -0.005 0.025 0.000 0.000
factoextra::fviz_screeplot(res_mca, addlabels = TRUE, ylim = c(0, 40)) +
  labs(title = "MCA 特徵值與解釋變異")

anti_pattern <- "購買意願|停止推銷|推銷干擾|推銷不適|理性消費|網紅反感"

value_plot_data <- bind_rows(
  active_stats %>%
    arrange(desc(dim1_contrib + dim2_contrib)) %>%
    slice_head(n = 15) %>%
    transmute(
      category,
      dim1_coord,
      dim2_coord,
      type = "個人價值"
    ),
  supp_stats %>%
    filter(str_detect(category, anti_pattern)) %>%
    transmute(
      category,
      dim1_coord,
      dim2_coord,
      type = "反推薦態度"
    )
)

ggplot(value_plot_data, aes(x = dim1_coord, y = dim2_coord, label = category, color = type)) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "grey55") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "grey55") +
  geom_point(size = 2.8) +
  geom_text(check_overlap = TRUE, vjust = -0.6, size = 3.2) +
  scale_color_manual(values = c("個人價值" = "#4C78A8", "反推薦態度" = "#D64B2A")) +
  theme_minimal(base_size = 12) +
  labs(
    title = "圖1 價值主導 MCA:個人價值與反推薦態度對照",
    subtitle = "個人價值為主動變數;反推薦態度為補充變數投影",
    x = paste0("Dim 1 (", round(res_mca$eig[1, 2], 2), "%)"),
    y = paste0("Dim 2 (", round(res_mca$eig[2, 2], 2), "%)"),
    color = "類別角色"
  )

supp_stats %>%
  filter(str_detect(category, anti_pattern)) %>%
  mutate(total_cos2 = dim1_cos2 + dim2_cos2) %>%
  arrange(desc(total_cos2)) %>%
  slice_head(n = 20) %>%
  ggplot(aes(x = dim1_coord, y = dim2_coord, label = category)) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "grey55") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "grey55") +
  geom_point(color = "#2E7D32", size = 2.6) +
  geom_text(check_overlap = TRUE, vjust = -0.6, size = 3.3, color = "#2E7D32") +
  theme_minimal(base_size = 12) +
  labs(
    title = "MCA 補充類別圖:網紅推薦態度位置",
    x = paste0("Dim 1 (", round(res_mca$eig[1, 2], 2), "%)"),
    y = paste0("Dim 2 (", round(res_mca$eig[2, 2], 2), "%)")
  )

7 反推薦主導 MCA 圖

本段改由「網紅反推薦態度」建構 MCA 空間,再把個人價值作為補充變數投影。這張圖用來回答:反推薦態度內部是否形成穩定結構,以及高反感、購買意願、理性消費之間是否同向或相反。

anti_active_vars <- c("購買意願", "停止推銷", "推銷干擾", "推銷不適", "理性消費", "網紅反感")
value_supp_vars <- c("財富重視", "享樂重視", "成就重視", "守規重視", "話題好奇", "性別", "年齡", "教育", "收入")

anti_mca_data <- analysis_data %>%
  select(all_of(c(anti_active_vars, value_supp_vars))) %>%
  filter(if_all(everything(), ~ !is.na(.x))) %>%
  mutate(across(everything(), droplevels))

anti_valid_vars <- names(anti_mca_data)[
  vapply(anti_mca_data, function(x) nlevels(droplevels(x)) >= 2, logical(1))
]
anti_dropped_vars <- setdiff(names(anti_mca_data), anti_valid_vars)

anti_mca_data <- anti_mca_data %>%
  select(all_of(anti_valid_vars)) %>%
  mutate(across(everything(), droplevels))

anti_active_kept <- intersect(anti_active_vars, names(anti_mca_data))
value_supp_kept <- intersect(value_supp_vars, names(anti_mca_data))
anti_supp_index <- match(value_supp_kept, names(anti_mca_data))

tibble(
  active_variables = paste(anti_active_kept, collapse = ", "),
  supplementary_variables = paste(value_supp_kept, collapse = ", "),
  dropped_variables = ifelse(length(anti_dropped_vars) == 0, "無", paste(anti_dropped_vars, collapse = ", ")),
  original_n = nrow(analysis_data),
  mca_n = nrow(anti_mca_data)
) %>%
  kable(caption = "反推薦主導 MCA 納入資料")
反推薦主導 MCA 納入資料
active_variables supplementary_variables dropped_variables original_n mca_n
購買意願, 停止推銷, 推銷干擾, 推銷不適, 理性消費, 網紅反感 財富重視, 享樂重視, 成就重視, 守規重視, 話題好奇, 性別, 年齡, 教育, 收入 2016 835
res_mca_anti <- FactoMineR::MCA(
  anti_mca_data,
  quali.sup = anti_supp_index,
  graph = FALSE
)

anti_active_stats <- tibble(
  category = rownames(res_mca_anti$var$coord),
  dim1_coord = res_mca_anti$var$coord[, 1],
  dim2_coord = res_mca_anti$var$coord[, 2],
  dim1_contrib = res_mca_anti$var$contrib[, 1],
  dim2_contrib = res_mca_anti$var$contrib[, 2],
  dim1_cos2 = res_mca_anti$var$cos2[, 1],
  dim2_cos2 = res_mca_anti$var$cos2[, 2]
)

anti_supp_stats <- tibble(
  category = rownames(res_mca_anti$quali.sup$coord),
  dim1_coord = res_mca_anti$quali.sup$coord[, 1],
  dim2_coord = res_mca_anti$quali.sup$coord[, 2],
  dim1_cos2 = res_mca_anti$quali.sup$cos2[, 1],
  dim2_cos2 = res_mca_anti$quali.sup$cos2[, 2]
)

anti_plot_data <- bind_rows(
  anti_active_stats %>%
    transmute(
      category,
      dim1_coord,
      dim2_coord,
      type = "反推薦態度"
    ),
  anti_supp_stats %>%
    filter(str_detect(category, "財富重視|享樂重視|成就重視|守規重視|話題好奇")) %>%
    mutate(total_cos2 = dim1_cos2 + dim2_cos2) %>%
    arrange(desc(total_cos2)) %>%
    slice_head(n = 12) %>%
    transmute(
      category,
      dim1_coord,
      dim2_coord,
      type = "個人價值"
    )
)

ggplot(anti_plot_data, aes(x = dim1_coord, y = dim2_coord, label = category, color = type)) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "grey55") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "grey55") +
  geom_point(size = 2.8) +
  geom_text(check_overlap = TRUE, vjust = -0.6, size = 3.2) +
  scale_color_manual(values = c("反推薦態度" = "#D64B2A", "個人價值" = "#4C78A8")) +
  theme_minimal(base_size = 12) +
  labs(
    title = "圖2 反推薦主導 MCA:反推薦態度內部結構",
    subtitle = "反推薦態度為主動變數;個人價值為補充變數投影",
    x = paste0("Dim 1 (", round(res_mca_anti$eig[1, 2], 2), "%)"),
    y = paste0("Dim 2 (", round(res_mca_anti$eig[2, 2], 2), "%)"),
    color = "類別角色"
  )

anti_active_stats %>%
  arrange(desc(dim1_contrib + dim2_contrib)) %>%
  slice_head(n = 15) %>%
  kable(digits = 3, caption = "反推薦主導 MCA:高貢獻主動類別")
反推薦主導 MCA:高貢獻主動類別
category dim1_coord dim2_coord dim1_contrib dim2_contrib dim1_cos2 dim2_cos2
低反感 1.480 0.809 16.740 6.334 0.690 0.206
高反感 -1.120 0.776 13.094 7.957 0.609 0.292
推銷干擾_不同意 1.408 0.804 13.796 5.693 0.553 0.180
中反感 0.027 -1.032 0.010 18.665 0.001 0.815
推銷不適_同意 -1.102 0.776 10.265 6.448 0.437 0.217
推銷不適_不同意 1.078 0.471 12.664 3.061 0.602 0.115
推銷干擾_普通 0.246 -1.062 0.599 14.203 0.027 0.510
停止推銷_同意 -1.065 0.645 9.761 4.530 0.419 0.153
推銷不適_普通 -0.194 -0.930 0.471 13.761 0.024 0.562
停止推銷_不同意 1.020 0.475 10.094 2.777 0.454 0.099
推銷干擾_同意 -0.815 0.331 9.969 2.078 0.590 0.097
停止推銷_普通 -0.054 -0.747 0.040 9.608 0.002 0.414
理性消費_普通 0.257 -0.728 0.189 1.923 0.006 0.052
購買意願_同意 0.533 0.265 1.335 0.418 0.049 0.012
購買意願_普通 0.021 -0.288 0.006 1.421 0.000 0.061

8 全變數 MCA 圖

下圖將本次分析中的所有變數都作為主動變數納入 MCA。為了避免跳答或未回答類別主導座標,本段會先排除任一納入變數為缺失的樣本,再進行 MCA。

all_mca_vars <- c(active_vars, supplementary_vars)

all_mca_data <- analysis_data %>%
  select(all_of(all_mca_vars)) %>%
  filter(if_all(everything(), ~ !is.na(.x))) %>%
  mutate(across(everything(), droplevels))

all_valid_vars <- names(all_mca_data)[
  vapply(all_mca_data, function(x) nlevels(droplevels(x)) >= 2, logical(1))
]
all_dropped_vars <- setdiff(names(all_mca_data), all_valid_vars)

all_mca_data <- all_mca_data %>%
  select(all_of(all_valid_vars)) %>%
  mutate(across(everything(), droplevels))

tibble(
  included_variables = paste(names(all_mca_data), collapse = ", "),
  dropped_variables = ifelse(length(all_dropped_vars) == 0, "無", paste(all_dropped_vars, collapse = ", ")),
  original_n = nrow(analysis_data),
  complete_case_n = nrow(all_mca_data)
) %>%
  kable(caption = "全變數 MCA 納入資料")
全變數 MCA 納入資料
included_variables dropped_variables original_n complete_case_n
財富重視, 享樂重視, 成就重視, 守規重視, 話題好奇, 購買意願, 停止推銷, 推銷干擾, 推銷不適, 理性消費, 網紅反感, 性別, 年齡, 教育, 收入 2016 835
res_mca_all <- FactoMineR::MCA(
  all_mca_data,
  graph = FALSE
)

all_active_stats <- tibble(
  category = rownames(res_mca_all$var$coord),
  dim1_coord = res_mca_all$var$coord[, 1],
  dim2_coord = res_mca_all$var$coord[, 2],
  dim1_contrib = res_mca_all$var$contrib[, 1],
  dim2_contrib = res_mca_all$var$contrib[, 2]
)

all_plot_data <- bind_rows(
  all_active_stats %>%
    arrange(desc(dim1_contrib + dim2_contrib)) %>%
    slice_head(n = 25),
  all_active_stats %>%
    filter(str_detect(category, anti_pattern))
) %>%
  distinct(category, .keep_all = TRUE) %>%
  mutate(type = if_else(str_detect(category, anti_pattern), "反推薦態度", "其他變數"))

ggplot(all_plot_data, aes(x = dim1_coord, y = dim2_coord, label = category, color = type)) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "grey55") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "grey55") +
  geom_point(size = 2.8) +
  geom_text(check_overlap = TRUE, vjust = -0.6, size = 3.1) +
  scale_color_manual(values = c("反推薦態度" = "#D64B2A", "其他變數" = "#4C78A8")) +
  theme_minimal(base_size = 12) +
  labs(
    title = "圖3 全變數 MCA:排除跳答與未回答",
    x = paste0("Dim 1 (", round(res_mca_all$eig[1, 2], 2), "%)"),
    y = paste0("Dim 2 (", round(res_mca_all$eig[2, 2], 2), "%)"),
    color = "類別角色"
  )

9 解讀輔助表

active_stats %>%
  mutate(axis_side = case_when(
    dim1_coord > 0 ~ "Dim1 右側",
    dim1_coord < 0 ~ "Dim1 左側",
    TRUE ~ "Dim1 中間"
  )) %>%
  arrange(desc(abs(dim1_coord) * dim1_contrib)) %>%
  slice_head(n = 12) %>%
  kable(digits = 3, caption = "Dim1 主要判讀依據")
Dim1 主要判讀依據
category dim1_coord dim2_coord dim1_contrib dim2_contrib dim1_cos2 dim2_cos2 axis_side
成就重視_很像我 2.032 0.997 17.820 4.834 0.308 0.074 Dim1 右側
財富重視_很像我 1.579 0.413 20.403 1.573 0.378 0.026 Dim1 右側
享樂重視_很像我 0.909 0.265 15.721 1.510 0.365 0.031 Dim1 右側
守規重視_很像我 0.706 0.378 8.784 2.832 0.197 0.057 Dim1 右側
享樂重視_不像我 -0.676 0.817 5.331 8.775 0.106 0.154 Dim1 左側
話題好奇_同意 0.487 -0.129 5.900 0.469 0.158 0.011 Dim1 右側
財富重視_不像我 -0.446 0.448 6.213 7.068 0.201 0.203 Dim1 左側
成就重視_不像我 -0.405 0.288 6.263 3.575 0.262 0.133 Dim1 左側
話題好奇_不同意 -0.595 1.103 3.505 13.562 0.067 0.231 Dim1 左側
享樂重視_有點像 -0.300 -0.465 2.822 7.639 0.092 0.221 Dim1 左側
成就重視_有點像 0.343 -0.783 2.299 13.511 0.054 0.282 Dim1 右側
守規重視_有點像 -0.277 -0.519 2.390 9.464 0.077 0.272 Dim1 左側
active_stats %>%
  mutate(axis_side = case_when(
    dim2_coord > 0 ~ "Dim2 上方",
    dim2_coord < 0 ~ "Dim2 下方",
    TRUE ~ "Dim2 中間"
  )) %>%
  arrange(desc(abs(dim2_coord) * dim2_contrib)) %>%
  slice_head(n = 12) %>%
  kable(digits = 3, caption = "Dim2 主要判讀依據")
Dim2 主要判讀依據
category dim1_coord dim2_coord dim1_contrib dim2_contrib dim1_cos2 dim2_cos2 axis_side
話題好奇_不同意 -0.595 1.103 3.505 13.562 0.067 0.231 Dim2 上方
財富重視_有點像 0.045 -0.766 0.045 15.001 0.001 0.338 Dim2 下方
成就重視_有點像 0.343 -0.783 2.299 13.511 0.054 0.282 Dim2 下方
享樂重視_不像我 -0.676 0.817 5.331 8.775 0.106 0.154 Dim2 上方
守規重視_不像我 -0.287 0.721 1.092 7.748 0.022 0.141 Dim2 上方
守規重視_有點像 -0.277 -0.519 2.390 9.464 0.077 0.272 Dim2 下方
成就重視_很像我 2.032 0.997 17.820 4.834 0.308 0.074 Dim2 上方
享樂重視_有點像 -0.300 -0.465 2.822 7.639 0.092 0.221 Dim2 下方
財富重視_不像我 -0.446 0.448 6.213 7.068 0.201 0.203 Dim2 上方
守規重視_很像我 0.706 0.378 8.784 2.832 0.197 0.057 Dim2 上方
成就重視_不像我 -0.405 0.288 6.263 3.575 0.262 0.133 Dim2 上方
話題好奇_普通 -0.227 -0.281 1.413 2.438 0.041 0.062 Dim2 下方
supp_stats %>%
  filter(str_detect(category, "網紅反感|停止推銷|推銷干擾|推銷不適|購買意願|理性消費")) %>%
  mutate(total_cos2 = dim1_cos2 + dim2_cos2) %>%
  arrange(desc(total_cos2)) %>%
  kable(digits = 3, caption = "網紅態度補充變數判讀依據")
網紅態度補充變數判讀依據
category dim1_coord dim2_coord dim1_cos2 dim2_cos2 total_cos2
購買意願_不同意 -0.153 0.166 0.018 0.021 0.038
購買意願_同意 0.326 -0.097 0.018 0.002 0.020
購買意願_普通 0.042 -0.135 0.001 0.013 0.015
推銷不適_普通 -0.039 -0.103 0.001 0.007 0.008
推銷干擾_普通 -0.026 -0.125 0.000 0.007 0.007
理性消費_普通 -0.165 -0.207 0.003 0.004 0.007
理性消費_不同意 0.117 0.414 0.000 0.006 0.006
停止推銷_普通 -0.001 -0.090 0.000 0.006 0.006
停止推銷_不同意 0.006 0.104 0.000 0.005 0.005
推銷不適_不同意 0.008 0.084 0.000 0.004 0.004
推銷干擾_同意 0.017 0.060 0.000 0.003 0.003
推銷不適_同意 0.048 0.046 0.001 0.001 0.002
理性消費_同意 0.013 0.006 0.001 0.000 0.001
推銷干擾_不同意 0.001 0.050 0.000 0.001 0.001
停止推銷_同意 -0.005 0.025 0.000 0.000 0.000

10 初步結論撰寫位置

完成渲染後,請依據上方三組表格與 MCA 圖進行結論撰寫。建議依序回答:

  1. Dim1 主要區分哪一種價值取向?
  2. Dim2 主要區分哪一種價值取向?
  3. 高反感是否靠近特定價值類別?
  4. 購買意願與高反感是否位於相反方向?
  5. 若要做商業溝通,哪一群人適合降低推銷感,哪一群人適合商品利益導向溝通?

11 輸出

output_dir <- "influencer_anti_value_mca_outputs"
dir.create(output_dir, showWarnings = FALSE)

write.csv(
  analysis_data,
  file.path(output_dir, "cleaned_influencer_anti_value_data.csv"),
  row.names = FALSE,
  fileEncoding = "UTF-8"
)

write.csv(
  active_stats,
  file.path(output_dir, "mca_active_category_stats.csv"),
  row.names = FALSE,
  fileEncoding = "UTF-8"
)

write.csv(
  supp_stats,
  file.path(output_dir, "mca_supplementary_category_stats.csv"),
  row.names = FALSE,
  fileEncoding = "UTF-8"
)