# 非対称分析


```{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()
```