« 福祉レジームの相違が、福祉国家の類型を決めている。 | Main | 対応分析のひながた »

September 02, 2025

Geminiは便利だ。

以下のスクリプトを解説してください。
pca_loadings <- sweep(pca_rotation, 2, pca_result$sdev, FUN = "*")
===============

はい、承知いたしました。このRのスクリプトは、主成分分析の結果から「固有ベクトル(負荷量)」を「主成分負荷量(相関係数)」に変換するためのものです。

スクリプト全体

pca_loadings <- sweep(pca_rotation, 2, pca_result$sdev, FUN = "*")

各要素の解説

1. sweep() 関数

この関数は、配列(行列やデータフレーム)の各行または各列に対して、特定の値をまとめて演算する際に非常に便利です。

sweep(x, MARGIN, STATS, FUN) の形式で使われます。

  • x: 演算を行う対象の配列(この場合は pca_rotation

  • MARGIN: 演算を適用する方向。

    • 1: 行ごと

    • 2: 列ごと(今回のケース)

  • STATS: 演算に用いる値のベクトル(この場合は pca_result$sdev

  • FUN: 適用する演算の関数(この場合は "*"、つまり乗算)

2. pca_rotation

これは prcomp() の出力である $rotation に格納されている行列で、**固有ベクトル(Eigenvector)**を表します。この行列の各列が各主成分(PC1, PC2, ...)に対応し、各行が元の変数(v1, v2, v3, ...)に対応します。

3. pca_result$sdev

これは prcomp() の出力である $sdev に格納されているベクトルで、各主成分の標準偏差(Standard Deviation)を表します。主成分分析においては、この標準偏差の二乗が**固有値(Eigenvalue)**に相当します。

4. *(乗算)

FUN = "*" は、sweep() が行う演算が乗算であることを指定しています。

スクリプトの動作

このスクリプトは、数学的に以下の計算を実行しています。

  1. pca_result$sdev(各主成分の標準偏差)は、sweep() 関数の STATS 引数として使われます。

  2. MARGIN = 2 なので、pca_rotation 行列の各列に対して、pca_result$sdev の対応する要素を掛け合わせる演算が行われます。

  3. 具体的には、

    • pca_rotation の **PC1の列(固有ベクトル)**の各要素に、pca_result$sdevPC1の標準偏差を掛けます。

    • pca_rotation の **PC2の列(固有ベクトル)**の各要素に、pca_result$sdevPC2の標準偏差を掛けます。

    • ...という操作を、すべての主成分に対して行います。

なぜこの計算が必要か?

主成分負荷量は「各変数と主成分との相関係数」であり、これは固有ベクトルに固有値の平方根を掛けたものに等しくなります。

  • prcomp()$sdev は、まさに固有値の平方根です。

  • prcomp()$rotation は、固有ベクトルです。

したがって、sweep() 関数を使って prcomp()$rotation(固有ベクトル)の各列に、$sdev(固有値の平方根)を掛け合わせることで、数学的に正確な**主成分負荷量(相関係数)**を計算しているのです。

この結果として得られる pca_loadings は、各変数が各主成分とどれだけ強く関連しているかを、からの範囲の相関係数として示してくれます。

|

« 福祉レジームの相違が、福祉国家の類型を決めている。 | Main | 対応分析のひながた »

e. 統計」カテゴリの記事

f. 統計言語R」カテゴリの記事