# 非対称分析
```{r}
library(ca)
library(FactoMineR)
library(factoextra)
library(ggplot2)
library(readr) # read_csvのために必要
# データの読み込み
data <- read_csv("data_PC_fixed.csv")
data_mat <- as.data.frame(data[,-1])
rownames(data_mat) <- data[[1]]
res.ca <- ca(data_mat, graph = TRUE)
# factoextra::fviz_ca_biplot()でグラフを作成
h <- fviz_ca_biplot(res.ca,
map = "rowprincipal",
repel = TRUE) +
labs(title = "Rowprincipal (Asymmetric Map)") +
theme_minimal(base_family="HiraKakuProN-W3") +
theme(plot.title = element_text(hjust = 0.5))
ggsave("rowp.png", h, width = 10, height = 7, dpi = 300)
```
# Greenacre's Symbiplot
```{r}
# symbiplot の描画
# map = "symbiplot" を指定することで、Greenacreの提唱するスケーリングになります
plot(res.ca, map = "symbiplot", main = "Greenacre's Symbiplot",arrows=c(FALSE,TRUE ))
# 保存先のファイルを作成
png("symbiplot_result.png", width = 800, height = 800, res = 100)
# グラフィックスパラメータでフォントを指定
# plot() の外で指定することで、タイトルやラベルすべてに適用されます
par(family = "HiraKakuProN-W3")
# 描画を実行
plot(res.ca, map = "symbiplot", main = "Greenacre's Symbiplot")
# デバイスを閉じる
dev.off()
```
```{r}
p <- fviz_ca_biplot(res.ca,
map = "symbiplot", # Greenacreの対称バイプロットを指定
repel = TRUE, # ラベルの重なりを自動回避
col.row = "blue",
col.col = "red") +
theme_minimal(base_family="HiraKakuProN-W3") +
labs(title = "Greenacre's Symbiplot (Label Repelled)")
# 2. 保存
ggsave("symbiplot_clean.png", plot = p, width = 8, height = 8, dpi = 300)
```
```{r}
# fviz_ca_biplot で矢印を表示する
# arrows 引数に c(行の表示, 列の表示) を指定します
p_arrow <- fviz_ca_biplot(res.ca,
map = "symbiplot", # 前述の対称バイプロットを指定
repel = TRUE, # ラベルの重なりを回避
arrows = c(FALSE, TRUE), # 行(市町村)は点、列(候補者)は矢印にする設定
col.col = "red", # 候補者の色
col.row = "blue" # 市町村の色
) +
theme_minimal(base_family="HiraKakuProN-W3") +
labs(title = "福岡県参院選2025:候補者・政党の支持ベクトル分析",
subtitle = "矢印の方向と長さが候補者・政党の支持構造の特徴を示す")
# グラフを表示
print(p_arrow)
# 保存
ggsave("symbiplot_20260115.png", plot = p_arrow, width = 8, height = 8, dpi = 300)
```
```{r}
# fviz_ca_biplot で矢印を表示する
# arrows 引数に c(行の表示, 列の表示) を指定します
p_arrow <- fviz_ca_biplot(res.ca,
map = "symbiplot", # 前述の対称バイプロットを指定
repel = TRUE, # ラベルの重なりを回避
arrows = c(TRUE, FALSE), # 行(市町村)は点、列(候補者)は矢印にする設定
col.col = "red", # 候補者の色
col.row = "blue" # 市町村の色
) +
theme_minimal(base_family="HiraKakuProN-W3") +
labs(title = "福岡県参院選2025:候補者・政党の支持ベクトル分析",
subtitle = "")
# グラフを表示
print(p_arrow)
# 保存
ggsave("symbiplot_20260115a.png", plot = p_arrow, width = 8, height = 8, dpi = 300)
```
```{r}
# ベクトルの定義
a <- c(3, 1)
b <- c(1, 2)
# 内積の計算 (dot product)
# %*% は行列の掛け算ですが、ベクトル同士なら内積になります
dot_product <- as.numeric(a %*% b)
# 可視化用のデータフレーム作成
df <- data.frame(
x = c(0, 0),
y = c(0, 0),
xend = c(a[1], b[1]),
yend = c(a[2], b[2]),
label = c("ベクトル a", "ベクトル b")
)
# グラフ作成
ggplot(df) +
geom_segment(aes(x = x, y = y, xend = xend, yend = yend, color = label),
arrow = arrow(length = unit(0.3, "cm")), size = 1) +
annotate("text", x = 1.5, y = 2.5,
label = paste("内積の値 =", dot_product), size = 5) +
xlim(0, 4) + ylim(0, 4) +
labs(title = "2つのベクトルの内積", color = "ベクトル") +
theme_minimal(base_family="HiraKakuProN-W3") +
coord_fixed()
```