Rで何かをしたり、読書をするブログ

政府統計の総合窓口のデータや、OECDやUCIやのデータを使って、Rの練習をしています。ときどき、読書記録も載せています。

都道府県別の農家1戸当たりの米の年間供給量等のデータの分析4 - Rのprcomp()関数で主成分分析(PCA: Principal Component Analysis)

www.crosshyou.info

の続きです。前回は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が大きいですね。

今回は以上です。

はじめから読むには、

www.crosshyou.info

です。

今回のコードは以下になります。

# 主成分分析
#
# 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 です。)