連続変数とバイナリ変数の組み合わせに基づくPCAおよびコンポーネントスコア


13

混合型変数(連続およびバイナリ)で構成されるデータセットにPCAを適用したい。手順を説明するために、以下のRに最小限の再現可能な例を貼り付けます。

# Generate synthetic dataset
set.seed(12345)
n <- 100
x1 <- rnorm(n)
x2 <- runif(n, -2, 2)
x3 <- x1 + x2 + rnorm(n)
x4 <- rbinom(n, 1, 0.5)
x5 <- rbinom(n, 1, 0.6)
data <- data.frame(x1, x2, x3, x4, x5)

# Correlation matrix with appropriate coefficients
# Pearson product-moment: 2 continuous variables
# Point-biserial: 1 continuous and 1 binary variable
# Phi: 2 binary variables
# For testing purposes use hetcor function
library(polycor)
C <- as.matrix(hetcor(data=data))

# Run PCA
pca <- princomp(covmat=C)
L <- loadings(pca)

ここで、コンポーネントスコア(つまり、コンポーネントの負荷によって重み付けされた生の変数)を計算する方法を考えます。データセットが連続変数で構成されている場合、コンポーネントスコアは、単純に(スケーリングされた)生データとローディングマトリックス(上記の例ではL)に格納された固有ベクトルを乗算することによって取得されます。どんなポインタも大歓迎です。


1
私はあなたの質問を理解しているかどうかわかりません。バイナリ変数ではなぜこれが違うのでしょうか?

@Insanodag:データマトリックスに負荷マトリックスを掛けることができますか?
アンドレ

回答:


9

私はInsanodagが正しいと思います。Jollifeの主成分分析を引用します。

p

データ行列と負荷行列を乗算すると、望ましい結果が得られます。ただし、princomp()機能に問題があるため、prcomp()代わりに使用しました。

関数の戻り値の1つprcomp()x、を使用してアクティブ化されretx=TRUEます。このxは、Rドキュメンテーションに記載されているように、データ行列と負荷行列の乗算です。

    rotation: the matrix of variable
              loadings (i.e., a matrix whose columns
              contain the eigenvectors).  The function princomp returns
              this in the element loadings’.

           x: if retx is true the value of the rotated data (the centred
              (and scaled if requested) data multiplied by the rotation
              matrix) is returned.  Hence, cov(x)’ is the diagonal matrix
              diag(sdev^2)’.  For the formula method, napredict()’ is
              applied to handle the treatment of values omitted by the
              na.action’.

これが有用かどうか、またはさらに修正が必要かどうかを教えてください。

-

IT Jollife。主成分分析。スプリンガー。第2版​​。2002. pp 339-343。


@dees_stats:ご回答ありがとうございます。私はprcomp()を試し、すべての変数を.numeric()として提供しました。結果はもっともらしい。Jollifeのページ番号を教えてください。
アンドレー

@Andrej答えを編集しました。引用はセクション
13.1、339
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.