No.04028 マルチコリニアリティの回避  【UMA】 2007/07/31(Tue) 16:51

RPC(Regression on Principal Components)について教えて下さい

RPCの過程で,目的変数と主成分得点で重回帰分析を行いますが,この際,目的変数の「何」を分析に用いるのでしょうか?

計算過程は以下の通りです(ツールは主成分分析はR,重回帰分析はExcelを使います)
1:説明変数の相関係数行列を作成する
2:これに対して,Rのprcomp(scale=TRUE)関数を用いて
  固有値($sdevの自乗?)
  固有ベクトル($rotation)
  主成分得点($x)
 を算出する
3:主成分は固有値が1以上のものを計算対象として選出する
4:目的変数と主成分得点でExcelのLINEST関数を用いて偏回帰係数を算出する
5:偏回帰係数と固有ベクトルの積和から目的の回帰係数を求める

この4:で用いる目的変数とは,目的変数の元データそのものでしょうか?
それとも目的変数と説明変数の相関係数等の,何らかの計算を行った値なのでしょうか?
また,元データの個数と説明変数の個数が一致していない場合,どう調整するのでしょうか?

No.04029 Re: マルチコリニアリティの回避  【青木繁伸】 2007/07/31(Tue) 17:11

> ツールは主成分分析はR,重回帰分析はExcelを使います

どちらも R を使えば良いと思いますが
それはともかく

> 4:で用いる目的変数とは,目的変数の元データそのものでしょうか

そうです

> 元データの個数と説明変数の個数が一致していない場合,どう調整するのでしょうか

どういうことでしょうか?
欠損値があるということですか?
そもそも,データが対応していないとか(まさかね)

No.04034 Re: マルチコリニアリティの回避  【UMA】 2007/08/01(Wed) 10:13

迅速な対応有難うございます

>> 元データの個数と説明変数の個数が一致していない場合,どう調整するのでしょうか
>どういうことでしょうか?

申し訳ありません ExcelのLINEST関数の条件の"x(説明変数)とy(目的変数)が同次元である事"を"同数である事"と勘違いしてました 先程確認しました

>どちらも R を使えば良いと思いますが
・・・実は元々,主成分回帰分析をやるはめになったのは,多重共線形性を除く方法として,「相関係数行列を精査し,相関の高い組合せをピックアップ。必要に応じて偏相関係数を算出し,説明変数を絞っていく」という手法で求めたものを,上司が拒否したからでして・・
理由はというと恐らく『私(の能力)を信用してないから』のようで・・
さらに『フリーソフトなんて信用出来ない 有名製品以外は仕事では使えない』という人で,最終的に私の算出した結果と,商用ソフトを使った結果とが一致する事を求められています(商用ソフトのライセンス料は『そっちで何とかしろ』と言われましたが・・・)
それでExcelでデフォルト対応していない主成分分析のみRを用い,重回帰分析はExcelで,という変則手法でやっております

ま あこの上司,最初に重回帰分析の報告をした際,『こんなの方程式解いて係数求めただけ』『(単)寄与率を計算しろ』『私の知ってる多変量解析とは違う』と 言った人で,でもよく聞くと統計については"以前,商用ソフトの使用説明を一度聞いただけ"(本人はソフトを使った事はない)で,多変量解析とか寄与率と かの単語は知ってる程度の知識しかないようです 今回もしつこく「説明変数の(単)寄与率の算出」を求められています この「説明変数の(単)寄与率の算 出」ですが,"単回帰分析の合成"という手法があるようですが,これだと説明変数の数が多いと計算が大変な事になりそうなので,もっと計算量の少なくなる 手法をご存知ではありませんか?

No.04035 Re: マルチコリニアリティの回避  【UMA】 2007/08/01(Wed) 12:08

連続投稿失礼 やっぱりExcelが動かない

えっと確認なんですが,変数11個(目的1+説明10)のデータ20組あるとします
説明変数に対し主成分分析を行って主成分3つを選出した時,
主成分得点は10行3列になります(各列は異なる変数pc1,pc2,pc3であり無相関)
一方,元データから目的変数を取り出すと20行1列になります
ExcelのLINEST関数のいう"目的変数と説明変数が同次元"とは,上記の例で,
「行の数」が同じという事でしょうか?(と言うか行の数を一致させないと動かない)

私はこれまで,上記の目的変数等は,「20個の要素を持つ1次元配列」と考えていたんですが,
違うのかなぁ? それともExcelがおかしいのか?

No.04036 Re: マルチコリニアリティの回避  【青木繁伸】 2007/08/01(Wed) 13:03

> 主成分得点は10行3列になります

それ,主成分得点と違うでしょ?

princomp を使った?それとも prcomp ?

返されるオブジェクトのどれを使ってます?

あぶない,あぶない

No.04044 Re: マルチコリニアリティの回避  【UMA】 2007/08/01(Wed) 18:52

>> 主成分得点は10行3列になります
>それ,主成分得点と違うでしょ?

え〜?
使ったのは上述の通りprcompです(オプションはscale=Trueのみを指定)
その上で結果を代数ansに入力したとして,
ans$xで表示させた値を主成分得点と解釈して使用してます
(実はこの辺曖昧でして,helpを読むとsdevは標準偏差,rotationは固有ベクトルと
はっきり書いてあるのですが,xはよく解らなかったのです)
ひょっとして$xって主成分得点係数ですか?
だとするとこれと元データ(の説明変数の部分)の積和が各サンプルの主成分得点?
ここでの元データの標準化は必要なの?

No.04046 Re: マルチコリニアリティの回避  【青木繁伸】 2007/08/01(Wed) 21:24

10説明変数+目的変数 のデータ行列は,20×11行列ですよね
そのうちの10説明変数(20×10行列)をprcompするんですよね
その *$x は確かに主成分得点で,3つの主成分を取ったとすれば20×3の主成分得点行列ができるはずで,なんで10×3行になるのかわけがわかりませんね。
> data <- matrix(rnorm(200), 20) # 20×10のデータ行列
> dim(data)
[1] 20 10
> ans <- prcomp(data, scale=TRUE) # 主成分分析
> pca.score <- ans$x[,1:3] # 第3主成分までの主成分得点
> dim(pca.score)
[1] 20 3 # 当たり前ですが 20×3 行列になっていますが

> ここでの元データの標準化は必要なの?

説明変数の測定次元(メートルだとかグラムだとか,要するに測定単位)が同じなら,標準化しない解と標準化する解があるが,測定次元の違うデータを分析するときには,標準化しない解は「無意味」というか「解釈できない解」でしょうね。

No.04049 Re: マルチコリニアリティの回避  【UMA】 2007/08/02(Thu) 10:55

幸甚なるご対応,有難うございます

"標準化の必要な"主成分分析が初めてなもので,随分迷いました
>そのうちの10説明変数(20×10行列)をprcompするんですよね
固有値,固有ベクトルを求める際は(既に作成してあった)相関係数行列を用いました
(これの$xをとると10x3の行列になります)

この段階から主成分得点を出すには,元データを標準化して,これと固有ベクトルの
積和を算出する,ということになるんでしょうか?
そうなら最初からデータを標準化してprcomp使った方が速かったか・・

それと,主成分得点と目的変数とで偏回帰係数を求める際に,目的変数データを標準化しておく
必要がありますか?

No.04051 Re: マルチコリニアリティの回避  【青木繁伸】 2007/08/02(Thu) 11:06

> 固有値,固有ベクトルを求める際は(既に作成してあった)相関係数行列を用いました
> (これの$xをとると10x3の行列になります)

それじゃだめですね

> 最初からデータを標準化してprcomp使った方が速かったか・・

その通り
しかし,データを標準化する必要は全くない,scale.=TRUE にするだけでよい

> 主成分得点と目的変数とで偏回帰係数を求める際に,目的変数データを標準化しておく
必要がありますか?

ないでしょう?

No.04052 Re: マルチコリニアリティの回避  【青木繁伸】 2007/08/02(Thu) 12:33

補足

> 測定次元の違うデータを分析するときには,標準化しない解は「無意味」というか「解釈できない解」でしょうね

予測が目的の場合には標準化しない方がよい

No.04053 Re: マルチコリニアリティの回避  【UMA】 2007/08/02(Thu) 14:16

>しかし,データを標準化する必要は全くない,scale.=TRUE にするだけでよい

ギャ〜 御指摘戴いて,今Rのhelp読み直して気が付きました
『scale』ではなく『scale.』か〜
centerで平均0に,scaleで分散1にするはずなのに,と思ってましたけど,
scale.かよ 何だよ"."って
でもerrorは出なかったから,別の引数計算をやってたって事かな

有難うございました もう一度やり直してみます

No.04054 Re: マルチコリニアリティの回避  【青木繁伸】 2007/08/02(Thu) 14:28

> 『scale』ではなく『scale.』か〜

R では,引数の指定時に,他の引数と区別できる限り,短縮形で指定することができます
scale. = TRUE でも sc = TRUE でも同じことです

● 「統計学関連なんでもあり」の過去ログ--- 040 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る