8

データ行列 d があるとしましょう

pc = prcomp(d)

# pc1 and pc2 are the principal components  
pc1 = pc$rotation[,1] 
pc2 = pc$rotation[,2]

では、これは線形回帰モデルに適合するはずですよね?

r = lm(y ~ pc1+pc2)

しかし、私はこのエラーが発生します:

Errormodel.frame.default(formula = y ~ pc1+pc2, drop.unused.levels = TRUE) : 
   unequal dimensions('pc1')

これを自動的に行うパッケージがあると思いますが、これも機能するはずですか?

4

1 に答える 1

18

回答: pc$rotation は必要ありません。これは回転行列であり、回転された値 (スコア) の行列ではありません。

いくつかのデータを作成します。

x1 = runif(100)
x2 = runif(100)
y = rnorm(2+3*x1+4*x2)
d = cbind(x1,x2)

pc = prcomp(d)
dim(pc$rotation)
## [1] 2 2

おっとっと。「x」コンポーネントが必要です。?prcomp から:

x: 'retx' が true の場合、回転されたデータ (中央に配置された (および要求された場合はスケーリングされた) データに 'rotation' マトリックスを掛けたもの) の値が返されます。

dim(pc$x)
## [1] 100   2
lm(y~pc$x[,1]+pc$x[,2])
## 
## Call:
## lm(formula = y ~ pc$x[, 1] + pc$x[, 2])

## Coefficients:
## (Intercept)    pc$x[, 1]    pc$x[, 2]  
##     0.04942      0.14272     -0.13557  
于 2009-11-26T23:03:55.697 に答える