2016-09-17 6 views
1

私はいくつかの相関行列を持っており、それらが統計的に等しいかどうかをテストしたいと思います。このために、私はpsychパッケージからcortest.mat機能を使用しますが、次のエラーを取得しています:計算上の特異性cortest .mat関数のエラー

Error in solve.default(R1) : system is computationally singular: reciprocal condition number = 4.96434e-18

も乱数を用いて、すなわち、同じエラーが生じる:

Random<-cor(matrix(rnorm(400, 0, .25), nrow=(20), ncol=(20))) 
cortest.mat(Random,Random,n1=400, n2=400) 

このパッケージが行われたので、相関行列を比較するために、私が間違っていることを理解していません。

パッケージ:事前に http://www.personality-project.org/r/html/cortest.mat.html

感謝。

答えて

0

あなたはのは、小さいサイズで、新しい相関行列を生成してみましょうあなたはpsych

#The code below results in a sample and population matrix for x and y 
y <- sim.congeneric(loads =c(.20,.19,.18,.17,.16,.15,.14,.13,.12,.11,.10, 
     .9,.8,.7,.6,.5,.4,.3,.2,.1),N=1000,short=FALSE) 
x <- sim.congeneric(loads =c(.20,.19,.18,.17,.16,.15,.14,.13,.12,.11,.10, 
     .9,.8,.7,.6,.5,.4,.3,.2,.1),N=1000,short=FALSE) 

#To show the class 
class(x) 
[1] "psych" "sim" 
class(y) 
[1] "psych" "sim" 

#Now you can run the test 
cortest.mat(x$r,y$r,n1=1000,n2=1000) #here we extract the sample matrix using '$r' and run the test 

Tests of correlation matrices 
Call:cortest.mat(R1 = x$r, R2 = y$r, n1 = 1000, n2 = 1000) 
Chi Square value 403.47 with df = 380 with probability < 0.2 

からsim.congeneric機能を実現できるクラスpsychsimの要素を、含まれているオブジェクトであるためにあなたの行列を必要とするので、検査することができる:sim.congenericは、2つの行列のサンプルのためのオンと人口のための他のあるオブジェクトを作成

sim.congeneric(loads =c(.5,.4,.3,.2,.1),N=1000,short=FALSE) 

Call: NULL 

$model (Population correlation matrix) 
    V1 V2 V3 V4 V5 
V1 1.00 0.20 0.15 0.10 0.05 
V2 0.20 1.00 0.12 0.08 0.04 
V3 0.15 0.12 1.00 0.06 0.03 
V4 0.10 0.08 0.06 1.00 0.02 
V5 0.05 0.04 0.03 0.02 1.00 

$r (Sample correlation matrix for sample size = 1000) 
    V1 V2 V3  V4  V5 
V1 1.00 0.151 0.124 0.1471 0.0303 
V2 0.15 1.000 0.137 0.1083 0.0507 
V3 0.12 0.137 1.000 0.0894 0.0159 
V4 0.15 0.108 0.089 1.0000 0.0018 
V5 0.03 0.051 0.016 0.0018 1.0000 

留意されたい。 - 私たちは、サンプルMATRを使用しましたテストの氷(明らかに)。

+0

ありがとうございます!私はそれを得たと思う。 2つの詳細を尋ねてもいいです:1)正常な集計行列を "phych" "sim"クラスに入れ替える方法はありますか?2)cortest.matの代わりにcorttestを実行するだけです。結果は同じであるべきですか? – NKGon

+0

@NKGon '' corttest''はデフォルトで '' cortest.jennrich''や '' cortest.mat''とは対照的に '' cortest.normal''メソッドを使うので、同じ結果を得るべきではありません。私はちょうど '' corttest''を使ってコードを実行しました。私は大幅に異なる結果を得ました。もう一度あなたの結果を確認してください。 '' corttest''はsteigerテストを使用します。 –

+0

変換が進むまでは、自分の答えの横にあるマークをチェックして(あなたの元の質問が解決したと思われる場合)、私の解決策を受け入れて、それに関する新しい質問を開きます。短い答えははいですが、それを行うためのコメントに利用可能なスペースではありませんが、基本的には、マトリックスの代わりに生のデータを提供することができます。 –