
の続きです。前回はlm()関数で重回帰分析をしました。
今回は、PCA(Principal Component Analysis), 主成分分析をしてみたいと思います。
prcomp()関数を使います。

prefは都道府県名なので除外しています。siryoとkakoはNAがあるので除外しています。
scale. = TRUE で各変数を標準化しています。
summary()関数で結果をみてみます。

第1主成分、PC1で0.67、第2主成分、PC2も入れると0.77の寄与率なので、10個の変数をこの2つで77%は代替できるということですね。

pca_results$xで主成分スコアが取り出せますので、bind_cols()関数でもとのデータフレームと結合しています。


北海道だけ飛びぬけてはずれていますね。北海道を除いてもう一度散布図を描きます。


見やすい散布図になりましたね。
主成分軸(固有ベクトル)をみてみます。

PC1, PC2だけでグラフを描いてみます。


pca_results$rotationで主成分軸(固有ベクトル)が取り出せます。
こうし見ると、joutoが大きいところがPC1が大きく、kounyuが大きいところがPC2が大きいですね。
今回は以上です。
はじめから読むには、
です。
今回のコードは以下になります。
# 主成分分析
#
# prcomp()で実行
pca_results <- df_raw |> select(-pref, -siryo, -kako) |>
prcomp(scale. = TRUE)
#
# summary()
summary(pca_results)
#
# 主成分スコアをもとのデータフレームに結合
df_raw <- df_raw |>
bind_cols(pca_results$x)
glimpse(df_raw)
#
# PC1とPC2の散布図
df_raw |>
ggplot(aes(x = PC1, y = PC2)) +
geom_text(aes(label = pref))
#
# 北海道を除いてPC1とPC2の散布図
df_raw |> filter(pref != "北海道") |>
ggplot(aes(x = PC1, y = PC2)) +
geom_text(aes(label = pref))
#
# 主成分軸(固有ベクトル)
pca_results$rotation
#
# PC1, PC2のグラフ, データフレーム作成
rotation <- pca_results$rotation |> as_tibble() |>
mutate(variables = rownames(pca_results$rotation)) |>
relocate(variables)
rotation
#
# PC1, PC2のグラフ, グラフの描画
rotation |>
ggplot(aes(x = PC1, y = PC2)) +
geom_text(aes(label = variables))
#
(冒頭の画像は Bing Image Creator で生成しました。プロンプトは Close up of purple flowers, landscape of long river under the sky, photo です。)