#研究動機 前陣子看了meta前員工寫的the careless people談到在臉輸內部的員工在演算法發現了一種機制是有憂鬱傾向的人會買更多東西,因此工程師利用演算法偵測到這群人後推波更多購物內容給他們來增進銷量。讓我好奇想知道是否除了在身心健康之外人本身的價值觀會影像到他們對於消費集和看待廣告視角不同。
本研究資料來自問卷調查,主要蒐集受訪者對網紅推薦、購買意願、理性消費態度、個人價值觀,以及人口與心理狀態變數之回應。問卷題項包含反推薦態度、價值認同程度、年齡、學歷、收入、快樂程度、焦慮不安、睡眠困擾與經濟滿意度等變數。 在資料處理上,首先排除跳答與未回答樣本,避免無效資料影響分析結果。接著將問卷中的 Likert scale 題項轉換為類別變數,例如「同意」、「普通」、「不同意」,或「很像我」、「有點像」、「不像我」等類別。由於多重對應分析(MCA)適合用來分析多個類別變數之間的關聯,因此本研究以 MCA 檢視不同態度類別之間的相對位置與群聚關係。
分析語法上,主要透過資料整理與視覺化。資料清理階段可使用 dplyr 進行變數篩選、遺漏值處理與類別重新編碼;MCA 分析則使用 FactoMineR 套件中的 MCA() 函數執行,並搭配 factoextra 或 ggplot2 繪製變數類別圖。分析時分別設定不同的主動變數與補充變數,以比較「個人價值主導」、「反推薦態度主導」與「全變數納入」三種 MCA 結果。
packages <- c(
"readxl", "dplyr", "tidyr", "stringr", "tibble",
"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
)
本報告探索「個人價值取向」與「網紅反推薦態度」之間的對應關係。分析重點不是預測,而是透過 MCA 觀察哪些價值輪廓較靠近「希望網紅停止推銷」「覺得推銷干擾」「覺得推銷不舒服」等反推薦態度。
本次設定:
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",
"vn28", "vn32", "vn14", "vn37", "vp5_1",
"vp7_1", "vp7_3", "vp7_4", "vp7_5", "vp7_6",
"sel_gen", "agegp", "edugp", "vo5"
)
codebook %>%
filter(variable_code %in% target_codes) %>%
kable(caption = "分析使用變數與問卷題目")
| 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 重視舉止合宜,別人認為不好的事您不會去做。舉止合宜指的是「行為符合社會的要求」。 |
| vn14 | N14 若人生可以重來一次,您會想要換一個跟現在不一樣的人生。 |
| vn22 | N22 知道別人在網路上討論什麼,您也會感興趣。 |
| vn28 | N28 整體而言,您覺得目前的日子過得快不快樂? |
| vn32 | N32 整體來說,您對您目前的經濟狀況滿不滿意? |
| vo5 | O5 請問您個人平均每個月所有的(稅前)收入差不多有多少?(包括:薪資、年終獎金、年節分紅、加班費、執行業務收入、自營收入、投資利息、房租、退休金、政府津貼給付等) |
| vn37 | N37 有緊張、焦慮或不安的狀況? |
| vp5_1 | P5_1 過去7天有幾天入睡困難、睡不安穩或睡眠過多? |
| sel_gen | 中選者性別 |
| agegp | 受訪者年齡分類 |
| edugp | 受訪者教育程度分類(6分類) |
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("不同意", "普通", "同意"))
}
wellbeing_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("低", "中", "高"))
}
zero_to_ten_factor <- function(x) {
x <- to_num(x)
case_when(
x >= 0 & x <= 4 ~ "低",
x >= 5 & x <= 7 ~ "中",
x >= 8 & x <= 10 ~ "高",
x %in% c(90, 96, 97, 98, 99, 996, 999) ~ NA_character_,
TRUE ~ NA_character_
) %>%
factor(levels = c("低", "中", "高"))
}
symptom_days_factor <- function(x) {
x <- to_num(x)
case_when(
x == 0 ~ "0天",
x %in% 1:2 ~ "1-2天",
x %in% 3:7 ~ "3天以上",
x %in% c(96, 97, 98, 99) ~ NA_character_,
TRUE ~ NA_character_
) %>%
factor(levels = c("0天", "1-2天", "3天以上"))
}
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萬以上"))
}
mca_var_stats <- function(res) {
tibble(
category = rownames(res$var$coord),
dim1_coord = res$var$coord[, 1],
dim2_coord = res$var$coord[, 2],
dim1_contrib = res$var$contrib[, 1],
dim2_contrib = res$var$contrib[, 2],
dim1_cos2 = res$var$cos2[, 1],
dim2_cos2 = res$var$cos2[, 2]
)
}
mca_supp_stats <- function(res) {
tibble(
category = rownames(res$quali.sup$coord),
dim1_coord = res$quali.sup$coord[, 1],
dim2_coord = res$quali.sup$coord[, 2],
dim1_cos2 = res$quali.sup$cos2[, 1],
dim2_cos2 = res$quali.sup$cos2[, 2]
)
}
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),
快樂程度 = wellbeing_factor(vn28),
經濟滿意 = zero_to_ten_factor(vn32),
人生後悔 = agree_factor(vn14),
焦慮不安 = symptom_days_factor(vn37),
睡眠困擾 = symptom_days_factor(vp5_1),
性別 = 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 網紅推銷產品時仍會保持理性消費。", "理性消費", "補充變數",
"vn28", "N28 整體而言,您覺得目前的日子過得快不快樂?", "快樂程度", "補充變數",
"vn32", "N32 整體來說,您對您目前的經濟狀況滿不滿意?", "經濟滿意", "補充變數",
"vn14", "N14 若人生可以重來一次,您會想要換一個跟現在不一樣的人生。", "人生後悔", "補充變數",
"vn37", "N37 有緊張、焦慮或不安的狀況?", "焦慮不安", "補充變數",
"vp5_1", "P5_1 過去7天有幾天入睡困難、睡不安穩或睡眠過多?", "睡眠困擾", "補充變數"
)
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 網紅推銷產品時仍會保持理性消費。 | 理性消費 | 補充變數 |
| vn28 | N28 整體而言,您覺得目前的日子過得快不快樂? | 快樂程度 | 補充變數 |
| vn32 | N32 整體來說,您對您目前的經濟狀況滿不滿意? | 經濟滿意 | 補充變數 |
| vn14 | N14 若人生可以重來一次,您會想要換一個跟現在不一樣的人生。 | 人生後悔 | 補充變數 |
| vn37 | N37 有緊張、焦慮或不安的狀況? | 焦慮不安 | 補充變數 |
| vp5_1 | P5_1 過去7天有幾天入睡困難、睡不安穩或睡眠過多? | 睡眠困擾 | 補充變數 |
本報告不同分析段落的樣本處理方式如下:
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 |
| 快樂程度 | 1 | 0.000 |
| 經濟滿意 | 13 | 0.006 |
| 人生後悔 | 26 | 0.013 |
| 焦慮不安 | 11 | 0.005 |
| 睡眠困擾 | 9 | 0.004 |
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 = "反感程度")
#兩兩變數關聯分析
cramers_v <- function(tab) {
chi <- suppressWarnings(chisq.test(tab, correct = FALSE))
n <- sum(tab)
min_dim <- min(nrow(tab) - 1, ncol(tab) - 1)
if (n == 0 || min_dim <= 0) return(NA_real_)
sqrt(as.numeric(chi$statistic) / (n * min_dim))
}
pairwise_assoc <- function(data, vars) {
combn(vars, 2, simplify = FALSE) %>%
lapply(function(pair) {
pair_data <- data %>%
select(all_of(pair)) %>%
filter(if_all(everything(), ~ !is.na(.x))) %>%
mutate(across(everything(), droplevels))
if (nrow(pair_data) == 0 || nlevels(pair_data[[1]]) < 2 || nlevels(pair_data[[2]]) < 2) {
return(tibble(variable_1 = pair[1], variable_2 = pair[2], cramers_v = NA_real_))
}
tab <- table(pair_data[[1]], pair_data[[2]])
tibble(variable_1 = pair[1], variable_2 = pair[2], cramers_v = cramers_v(tab))
}) %>%
bind_rows()
}
pairwise_vars <- c(analysis_vars, "性別", "年齡", "教育", "收入")
anti_component_vars <- c("停止推銷", "推銷干擾", "推銷不適")
pairwise_results <- pairwise_assoc(analysis_data, pairwise_vars) %>%
filter(
!(variable_1 == "網紅反感" & variable_2 %in% anti_component_vars),
!(variable_2 == "網紅反感" & variable_1 %in% anti_component_vars)
)
pairwise_matrix <- matrix(
NA_real_,
nrow = length(pairwise_vars),
ncol = length(pairwise_vars),
dimnames = list(pairwise_vars, pairwise_vars)
)
for (i in seq_len(nrow(pairwise_results))) {
v1 <- pairwise_results$variable_1[i]
v2 <- pairwise_results$variable_2[i]
pairwise_matrix[v1, v2] <- pairwise_results$cramers_v[i]
pairwise_matrix[v2, v1] <- pairwise_results$cramers_v[i]
}
diag(pairwise_matrix) <- 1
pairwise_heatmap_data <- as.data.frame(as.table(pairwise_matrix)) %>%
rename(variable_1 = Var1, variable_2 = Var2, cramers_v = Freq) %>%
mutate(
variable_1 = factor(variable_1, levels = rev(pairwise_vars)),
variable_2 = factor(variable_2, levels = pairwise_vars)
)
ggplot(pairwise_heatmap_data, aes(x = variable_2, y = variable_1, fill = cramers_v)) +
geom_tile(color = "white", linewidth = 0.25) +
geom_text(aes(label = ifelse(is.na(cramers_v), "", round(cramers_v, 2))), size = 2.7) +
scale_fill_gradient(
low = "#F7FBFF",
high = "#08519C",
na.value = "grey90",
limits = c(0, 1),
name = "Cramer's V"
) +
coord_fixed() +
theme_minimal(base_size = 12) +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid = element_blank()
) +
labs(
title = "主要分析變數兩兩關聯熱圖",
subtitle = "顏色越深代表 Cramer's V 越高,類別變數關聯越強",
x = NULL,
y = NULL
)
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))]
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 = ", "),
original_n = nrow(analysis_data),
mca_n = nrow(mca_data)
) %>%
kable(caption = "MCA 清理後資料")
| active_variables | supplementary_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 軸特徵值與解釋變異")
| eigenvalue | percentage of variance | cumulative percentage of variance | |
|---|---|---|---|
| dim 1 | 0.322 | 16.099 | 16.099 |
| dim 2 | 0.286 | 14.296 | 30.395 |
| dim 3 | 0.201 | 10.068 | 40.463 |
| dim 4 | 0.194 | 9.723 | 50.186 |
| dim 5 | 0.184 | 9.223 | 59.409 |
| dim 6 | 0.180 | 9.005 | 68.414 |
| dim 7 | 0.171 | 8.564 | 76.977 |
| dim 8 | 0.163 | 8.172 | 85.149 |
| dim 9 | 0.155 | 7.741 | 92.890 |
| dim 10 | 0.142 | 7.110 | 100.000 |
anti_pattern <- "購買意願|理性消費|低反感|中反感|高反感"
value_wellbeing_pattern <- "財富重視|享樂重視|成就重視|守規重視|話題好奇|快樂程度|經濟滿意|人生後悔|焦慮不安|睡眠困擾"
本報告依據三個資訊判讀 MCA:
active_stats <- mca_var_stats(res_mca)
supp_stats <- mca_supp_stats(res_mca)
active_stats %>%
arrange(desc(dim1_contrib)) %>%
slice_head(n = 5) %>%
kable(digits = 3, caption = "Dim1 貢獻度最高的前五個主動類別")
| category | dim1_coord | dim2_coord | dim1_contrib | dim2_contrib | dim1_cos2 | dim2_cos2 |
|---|---|---|---|---|---|---|
| 財富重視_很像我 | 1.578 | 0.416 | 20.384 | 1.593 | 0.378 | 0.026 |
| 成就重視_很像我 | 2.031 | 1.002 | 17.790 | 4.878 | 0.308 | 0.075 |
| 享樂重視_很像我 | 0.908 | 0.267 | 15.702 | 1.526 | 0.365 | 0.031 |
| 守規重視_很像我 | 0.706 | 0.377 | 8.775 | 2.820 | 0.197 | 0.056 |
| 成就重視_不像我 | -0.405 | 0.289 | 6.284 | 3.586 | 0.263 | 0.133 |
active_stats %>%
arrange(desc(dim2_contrib)) %>%
slice_head(n = 5) %>%
kable(digits = 3, caption = "Dim2 貢獻度最高的前五個主動類別")
| category | dim1_coord | dim2_coord | dim1_contrib | dim2_contrib | dim1_cos2 | dim2_cos2 |
|---|---|---|---|---|---|---|
| 財富重視_有點像 | 0.046 | -0.768 | 0.049 | 15.082 | 0.001 | 0.340 |
| 成就重視_有點像 | 0.345 | -0.785 | 2.322 | 13.576 | 0.055 | 0.283 |
| 話題好奇_不同意 | -0.596 | 1.099 | 3.515 | 13.454 | 0.067 | 0.229 |
| 守規重視_有點像 | -0.276 | -0.517 | 2.385 | 9.389 | 0.077 | 0.270 |
| 享樂重視_不像我 | -0.679 | 0.812 | 5.413 | 8.718 | 0.107 | 0.154 |
supp_stats %>%
filter(str_detect(category, anti_pattern)) %>%
arrange(desc(dim1_cos2 + dim2_cos2)) %>%
slice_head(n = 5) %>%
kable(digits = 3, caption = "網紅推薦態度補充類別位置前五個類別")
| category | dim1_coord | dim2_coord | dim1_cos2 | dim2_cos2 |
|---|---|---|---|---|
| 購買意願_不同意 | -0.154 | 0.167 | 0.018 | 0.021 |
| 購買意願_同意 | 0.326 | -0.096 | 0.018 | 0.002 |
| 購買意願_普通 | 0.042 | -0.136 | 0.001 | 0.014 |
| 理性消費_普通 | -0.165 | -0.209 | 0.003 | 0.004 |
| 中反感 | -0.043 | -0.081 | 0.001 | 0.005 |
factoextra::fviz_screeplot(res_mca, addlabels = TRUE, ylim = c(0, 40)) +
labs(title = "MCA 特徵值與解釋變異")
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 = FALSE, vjust = -0.6, size = 3.2,show.legend = FALSE) +
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 = FALSE, vjust = -0.6, size = 3.3, color = "#2E7D32",show.legend = FALSE) +
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), "%)")
)
從圖 1 可以發現,多數反推薦態度類別集中在原點附近,表示個人價值與反推薦態度之間的對應關係不算明顯。代表受訪者是否重視成就、財富、享樂或守規,並不能直接推論其對網紅推薦的反感程度或購買意願。 因此反推薦態度可能不是單純由個人價值觀決定,更可能受到其他因素影響。
在圖 1 中,「理性消費_不同意」位於上方偏右,並與「成就重視_很像我」、「財富重視_很像我」位於相同方向。這顯示重視成就或財富的人,不一定代表其消費行為更理性;部分樣本反而可能呈現較低的理性消費傾向。 不過,由於「理性消費_不同意」並沒有非常貼近某一個價值點,因此此結果應視為方向性觀察,而不能解讀為明確因果關係。 由此稍微推論「不認為自己會理性消費」的受眾,在整體態度結構中具有較高辨識度,值得後續進一步分析。
從圖 1 補充圖可以看出,「購買意願_同意」位於最右側,且距離原點較遠,代表此類別具有明顯辨識度。這表示在反推薦態度中,最能區分受眾的關鍵。 同時,「購買意願_不同意」與「理性消費_普通」位於較左側,與右側的「購買意願_同意」形成對比。因此,Dim 1 可理解為「購買意願是否容易受到推薦影響」的區分軸。這說明網紅推薦的行銷效果,關鍵在於是否能轉化為消費者購買意願。
本段改由「網紅反推薦態度」建構 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_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 = ", "),
original_n = nrow(analysis_data),
mca_n = nrow(anti_mca_data)
) %>%
kable(caption = "反推薦主導 MCA 納入資料")
| active_variables | supplementary_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 <- mca_var_stats(res_mca_anti)
anti_supp_stats <- mca_supp_stats(res_mca_anti)
anti_plot_data <- bind_rows(
anti_active_stats %>%
transmute(
category,
dim1_coord,
dim2_coord,
type = "反推薦態度"
),
anti_supp_stats %>%
filter(str_detect(category, value_wellbeing_pattern)) %>%
mutate(total_cos2 = dim1_cos2 + dim2_cos2) %>%
arrange(desc(total_cos2)) %>%
slice_head(n = 18) %>%
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,show.legend = FALSE) +
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 = 5) %>%
kable(digits = 3, caption = "反推薦主導 MCA:高貢獻前五個主動類別")
| category | dim1_coord | dim2_coord | dim1_contrib | dim2_contrib | dim1_cos2 | dim2_cos2 |
|---|---|---|---|---|---|---|
| 購買意願_同意 | 0.733 | 1.585 | 6.194 | 32.073 | 0.093 | 0.434 |
| 低反感 | 0.490 | 1.251 | 4.487 | 32.318 | 0.075 | 0.489 |
| 理性消費_普通 | 1.685 | -0.827 | 19.963 | 5.331 | 0.280 | 0.068 |
| 中反感 | 0.401 | -0.652 | 5.469 | 15.988 | 0.123 | 0.326 |
| 購買意願_普通 | 0.516 | -0.576 | 8.835 | 12.185 | 0.196 | 0.244 |
圖 2「反推薦主導 MCA」顯示,反推薦態度本身具有明確的內部結構。其中,「低反感」與「購買意願_同意」位於相近位置,表示對網紅推薦反感程度較低的人,較可能因網紅推薦而提高購買意願。 相反地,「高反感」與「購買意願_不同意」位於左側相近區域,顯示越反感網紅推薦的人,越不容易受到推薦影響而產生購買意願。顯示出對網紅的反感程度會直接影響網紅推薦是否能轉換成購買行為。
在圖 2 中,「中反感」與「購買意願_普通」位置接近,表示中度反感者並非完全排斥網紅推薦,但也不會直接被推薦說服。他們的態度較接近觀望型,可能仍會根據內容品質、資訊透明度、產品實用性與推薦可信度來判斷是否購買。 因此,中反感者是最值得經營的一群。品牌若能降低業配感、提高資訊透明度,並提供更具實用性的內容,就有機會將這群人從觀望者轉化為潛在消費者。
在圖 2「反推薦主導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_mca_data <- all_mca_data %>%
select(all_of(all_valid_vars)) %>%
mutate(across(everything(), droplevels))
tibble(
included_variables = paste(names(all_mca_data), collapse = ", "),
complete_case_n = nrow(all_mca_data)
) %>%
kable(caption = "主模型變數 MCA 納入資料")
| included_variables | complete_case_n |
|---|---|
| 財富重視, 享樂重視, 成就重視, 守規重視, 話題好奇, 購買意願, 理性消費, 網紅反感, 快樂程度, 經濟滿意, 人生後悔, 焦慮不安, 睡眠困擾, 性別, 年齡, 教育, 收入 | 835 |
res_mca_all <- FactoMineR::MCA(
all_mca_data,
graph = FALSE
)
all_active_stats <- mca_var_stats(res_mca_all)
all_plot_data <- all_active_stats %>%
mutate(type = if_else(str_detect(category, anti_pattern), "反推薦態度", "其他變數"))
all_label_data <- bind_rows(
all_plot_data %>%
arrange(desc(dim1_contrib + dim2_contrib)) %>%
slice_head(n = 25),
all_plot_data %>%
filter(str_detect(category, anti_pattern))
) %>%
distinct(category, .keep_all = TRUE)
category_lookup <- bind_rows(lapply(names(all_mca_data), function(variable_name) {
levels_now <- levels(all_mca_data[[variable_name]])
tibble(
variable = variable_name,
level = levels_now,
category = paste(variable_name, levels_now, sep = "_")
)
}))
plain_category_lookup <- category_lookup %>%
count(level, name = "level_n") %>%
filter(level_n == 1) %>%
select(level) %>%
left_join(category_lookup, by = "level") %>%
transmute(variable, level, category = level)
category_lookup <- bind_rows(category_lookup, plain_category_lookup) %>%
distinct(category, .keep_all = TRUE)
ggplot(all_plot_data, aes(x = dim1_coord, y = dim2_coord, color = type)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "grey55") +
geom_vline(xintercept = 0, linetype = "dashed", color = "grey55") +
geom_point(size = 2.4, alpha = 0.75) +
geom_text(
data = all_label_data,
aes(label = category),
check_overlap = TRUE,
vjust = -0.6,
size = 3.1,
show.legend = FALSE
) +
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 = "類別角色"
)
variable_meaning <- tibble::tribble(
~variable, ~full_meaning,
"財富重視", "N2 重視財富,想要擁有許多錢和昂貴的東西。",
"享樂重視", "N4 重視追求快樂,寵愛自己。",
"成就重視", "N6 成功很重要,想要讓別人知道自己的成就。",
"守規重視", "N8 重視舉止合宜,別人認為不好的事不會去做。",
"話題好奇", "N22 知道別人在網路上討論什麼,也會感興趣。",
"購買意願", "P7_1 會想要購買網紅所推薦的產品。",
"停止推銷", "P7_3 看到網紅正在推銷產品時,希望他們停止推銷。",
"推銷干擾", "P7_4 觀看網紅內容時突然推薦產品,覺得是一種干擾。",
"推銷不適", "P7_5 觀看網紅內容時突然推薦產品,會有不舒服的感覺。",
"理性消費", "P7_6 網紅推銷產品時,仍會保持理性消費。",
"網紅反感", "由停止推銷、推銷干擾、推銷不適三題整理出的反感程度指標。",
"快樂程度", "N28 整體而言,覺得目前日子過得快不快樂。",
"經濟滿意", "N32 整體來說,對目前經濟狀況滿不滿意。",
"人生後悔", "N14 若人生可以重來一次,是否想換一個不一樣的人生。",
"焦慮不安", "N37 有緊張、焦慮或不安的狀況。",
"睡眠困擾", "P5_1 過去7天入睡困難、睡不安穩或睡眠過多。",
"性別", "受訪者性別。",
"年齡", "受訪者年齡組。",
"教育", "受訪者教育程度。",
"收入", "受訪者收入組。"
)
all_label_data %>%
left_join(category_lookup, by = "category") %>%
left_join(variable_meaning, by = "variable") %>%
transmute(
圖上標籤 = category,
變數 = variable,
類別 = level,
完整說明 = full_meaning
) %>%
arrange(變數, 類別) %>%
kable(caption = "圖3 標示點縮寫說明表")
| 圖上標籤 | 變數 | 類別 | 完整說明 |
|---|---|---|---|
| 人生後悔_不同意 | 人生後悔 | 不同意 | N14 若人生可以重來一次,是否想換一個不一樣的人生。 |
| 人生後悔_同意 | 人生後悔 | 同意 | N14 若人生可以重來一次,是否想換一個不一樣的人生。 |
| 人生後悔_普通 | 人生後悔 | 普通 | N14 若人生可以重來一次,是否想換一個不一樣的人生。 |
| 18-19歲 | 年齡 | 18-19歲 | 受訪者年齡組。 |
| 40-49歲 | 年齡 | 40-49歲 | 受訪者年齡組。 |
| 50-59歲 | 年齡 | 50-59歲 | 受訪者年齡組。 |
| 60歲以上 | 年齡 | 60歲以上 | 受訪者年齡組。 |
| 快樂程度_中 | 快樂程度 | 中 | N28 整體而言,覺得目前日子過得快不快樂。 |
| 快樂程度_低 | 快樂程度 | 低 | N28 整體而言,覺得目前日子過得快不快樂。 |
| 快樂程度_高 | 快樂程度 | 高 | N28 整體而言,覺得目前日子過得快不快樂。 |
| 10萬以上 | 收入 | 10萬以上 | 受訪者收入組。 |
| 6-10萬 | 收入 | 6-10萬 | 受訪者收入組。 |
| 國初中 | 教育 | 國初中 | 受訪者教育程度。 |
| 大學 | 教育 | 大學 | 受訪者教育程度。 |
| 研究所 | 教育 | 研究所 | 受訪者教育程度。 |
| 高中職 | 教育 | 高中職 | 受訪者教育程度。 |
| 焦慮不安_0天 | 焦慮不安 | 0天 | N37 有緊張、焦慮或不安的狀況。 |
| 焦慮不安_3天以上 | 焦慮不安 | 3天以上 | N37 有緊張、焦慮或不安的狀況。 |
| 理性消費_不同意 | 理性消費 | 不同意 | P7_6 網紅推銷產品時,仍會保持理性消費。 |
| 理性消費_同意 | 理性消費 | 同意 | P7_6 網紅推銷產品時,仍會保持理性消費。 |
| 理性消費_普通 | 理性消費 | 普通 | P7_6 網紅推銷產品時,仍會保持理性消費。 |
| 睡眠困擾_3天以上 | 睡眠困擾 | 3天以上 | P5_1 過去7天入睡困難、睡不安穩或睡眠過多。 |
| 經濟滿意_低 | 經濟滿意 | 低 | N32 整體來說,對目前經濟狀況滿不滿意。 |
| 經濟滿意_高 | 經濟滿意 | 高 | N32 整體來說,對目前經濟狀況滿不滿意。 |
| 中反感 | 網紅反感 | 中反感 | 由停止推銷、推銷干擾、推銷不適三題整理出的反感程度指標。 |
| 低反感 | 網紅反感 | 低反感 | 由停止推銷、推銷干擾、推銷不適三題整理出的反感程度指標。 |
| 高反感 | 網紅反感 | 高反感 | 由停止推銷、推銷干擾、推銷不適三題整理出的反感程度指標。 |
| 話題好奇_不同意 | 話題好奇 | 不同意 | N22 知道別人在網路上討論什麼,也會感興趣。 |
| 話題好奇_同意 | 話題好奇 | 同意 | N22 知道別人在網路上討論什麼,也會感興趣。 |
| 購買意願_不同意 | 購買意願 | 不同意 | P7_1 會想要購買網紅所推薦的產品。 |
| 購買意願_同意 | 購買意願 | 同意 | P7_1 會想要購買網紅所推薦的產品。 |
| 購買意願_普通 | 購買意願 | 普通 | P7_1 會想要購買網紅所推薦的產品。 |
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.2, alpha = 0.65) +
geom_text(check_overlap = FALSE, vjust = -0.45, size = 2.4, show.legend = FALSE) +
scale_color_manual(values = c("反推薦態度" = "#D64B2A", "其他變數" = "#4C78A8")) +
theme_minimal(base_size = 12) +
labs(
title = "圖3-補充 主模型變數 MCA:所有類別皆標示文字",
subtitle = "此版本用來檢查主模型所有點位置,但不建議作為主要報告圖",
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 = "類別角色"
)
圖 3「全變數 MCA」加入年齡、學歷、收入、快樂程度、焦慮、睡眠困擾與經濟滿意度等變數後,可以觀察到部分群聚現象。例如高年齡族群、較低學歷者與「理性消費_不同意」、「話題好奇_不同意」位置較接近;低快樂、低經濟滿意與焦慮、睡眠困擾也出現在相近區域。 然而,圖 3 的 Dim 1 解釋力僅 5.45%,Dim 2 解釋力僅 5.13%,整體解釋力偏低。人口與心理變數可以提供受眾輪廓參考。
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 = 5) %>%
kable(digits = 3, caption = "Dim1 主要判讀依據前五個類別")
| category | dim1_coord | dim2_coord | dim1_contrib | dim2_contrib | dim1_cos2 | dim2_cos2 | axis_side |
|---|---|---|---|---|---|---|---|
| 成就重視_很像我 | 2.031 | 1.002 | 17.790 | 4.878 | 0.308 | 0.075 | Dim1 右側 |
| 財富重視_很像我 | 1.578 | 0.416 | 20.384 | 1.593 | 0.378 | 0.026 | Dim1 右側 |
| 享樂重視_很像我 | 0.908 | 0.267 | 15.702 | 1.526 | 0.365 | 0.031 | Dim1 右側 |
| 守規重視_很像我 | 0.706 | 0.377 | 8.775 | 2.820 | 0.197 | 0.056 | Dim1 右側 |
| 享樂重視_不像我 | -0.679 | 0.812 | 5.413 | 8.718 | 0.107 | 0.154 | 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 = 5) %>%
kable(digits = 3, caption = "Dim2 主要判讀依據前五個類別")
| category | dim1_coord | dim2_coord | dim1_contrib | dim2_contrib | dim1_cos2 | dim2_cos2 | axis_side |
|---|---|---|---|---|---|---|---|
| 話題好奇_不同意 | -0.596 | 1.099 | 3.515 | 13.454 | 0.067 | 0.229 | Dim2 上方 |
| 財富重視_有點像 | 0.046 | -0.768 | 0.049 | 15.082 | 0.001 | 0.340 | Dim2 下方 |
| 成就重視_有點像 | 0.345 | -0.785 | 2.322 | 13.576 | 0.055 | 0.283 | Dim2 下方 |
| 享樂重視_不像我 | -0.679 | 0.812 | 5.413 | 8.718 | 0.107 | 0.154 | Dim2 上方 |
| 守規重視_不像我 | -0.288 | 0.717 | 1.095 | 7.667 | 0.022 | 0.139 | Dim2 上方 |
supp_stats %>%
filter(str_detect(category, anti_pattern)) %>%
mutate(total_cos2 = dim1_cos2 + dim2_cos2) %>%
arrange(desc(total_cos2)) %>%
slice_head(n = 5) %>%
kable(digits = 3, caption = "網紅態度補充變數判讀依據前五個類別")
| category | dim1_coord | dim2_coord | dim1_cos2 | dim2_cos2 | total_cos2 |
|---|---|---|---|---|---|
| 購買意願_不同意 | -0.154 | 0.167 | 0.018 | 0.021 | 0.039 |
| 購買意願_同意 | 0.326 | -0.096 | 0.018 | 0.002 | 0.020 |
| 購買意願_普通 | 0.042 | -0.136 | 0.001 | 0.014 | 0.015 |
| 理性消費_普通 | -0.165 | -0.209 | 0.003 | 0.004 | 0.007 |
| 中反感 | -0.043 | -0.081 | 0.001 | 0.005 | 0.006 |
綜合三組 MCA 結果可以發現,個人價值與人口心理變數對反推薦態度的解釋力有限;相較之下,反推薦態度本身,尤其是「反感程度」與「購買意願是否受推薦影響」,才是區分消費者的重要因素。低反感者較容易被網紅推薦帶動購買意願,高反感者則較不容易被說服,而中反感者則可能透過高透明度、低業配感與高實用性的內容被轉化。 因此,建議品牌在規劃網紅行銷時應更重視消費者對推薦內容的信任程度、反感來源與購買決策心理。尤其針對中反感族群,品牌可透過降低商業痕跡、強化真實體驗、提供具體產品資訊與使用情境,提升推薦內容的說服力與轉換可能性。
研究關於業配反感和認為網紅推薦具有影響消費判斷的力量,因此產生較強的防衛與排斥態度的發現,以 Friestad and Wright(1994)的說服知識模型作為理論基礎。該模型指出,消費者在面對廣告、銷售或其他說服情境時,會運用自身累積的說服知識來辨識說服者的目的與策略,並進一步採取相應的應對行為。換言之,當消費者察覺網紅推薦具有商業目的或影響意圖時,可能不再單純將內容視為產品資訊,而會將其解讀為一種說服嘗試,進而產生懷疑、防衛或排斥反應。
Edwards, Li, and Lee(2002)從心理抗拒理論出發,指出當消費者在互動環境中被迫接觸廣告,並感受到廣告干擾其原本目標或限制其控制感時,容易形成廣告侵入性感知,進而導致 irritation 與 ad avoidance。此觀點有助於補充本研究 MCA 結果:當「理性消費_不同意」與排斥推銷類別位於相近方向時,表示部分受訪者對網紅推薦的反感,可能不只是因為辨識出業配內容,更是因為他們感受到自身消費自主性受到干擾,因此產生較強的防衛與排斥態度。