SPSS Modelerで相関行列を見たいという話があり、以前以下の記事も書いています。
SPSS Modelerで相関行列を見たい - Qiita
https://qiita.com/kawada2017/items/a77f14bd0c4351d055a6
しかしながら、いずれも結果を加工したり、エクスポートしたりはできませんでした。
そこで今回は拡張ノードをつかってRで実装してみました。これにより結果を加工したり、エクスポートしたりということも可能になります。
Essentials for R のセットアップ
この方法は拡張ノードでRを利用しますので設定が必要です。設定が終わっていない方は以下を参考にしてください。
SPSS Modelerの拡張ノードでRを利用する - Qiita
https://qiita.com/kawada2017/items/0bb68e0b577e02bb8c6a
#拡張の変換ノードにRのコードを入力
以下のように拡張の変換ノードでR言語を選択し、Rシンタックスに以下のコードを入力します。
#相関行列取得
cormat =cor(modelerData)
modelerData<-cbind(data.frame(COLNM=rownames(cormat)),cormat)
#modelerData
#メタデータ設定
modelerDataModel<-data.frame(X1=c(fieldName='COLNAME',fieldLabel="",fieldStorage="string",fieldMeasure="",fieldFormat="",fieldRole=""))
for (x in colnames(cormat) ){
newVar <- c(fieldName=x,fieldLabel="",fieldStorage="real",fieldMeasure="",fieldFormat="",fieldRole="")
modelerDataModel <- cbind(modelerDataModel,newVar)
}
#modelerDataModel
これで相関行列を作りたい数値型の列のみの以下のようなデータをフィルターノードでつくって、この拡張変換ノードを通します。
すると以下のような相関行列が返ります。
変換ノードにしたのでエクスポートも可能です。
また、加工も可能です。例えば、以下のようなことを行えば相関係数が0.3以下のデータをNULLに置き換えます。
コード解説
簡単にコードも解説しておきます。
#相関行列取得
cormat =cor(modelerData)
上でこのノードに入るデータで相関行列を作っています。
ですので、文字列型のデータなどが混じっているとエラーになります。
modelerData<-cbind(data.frame(COLNM=rownames(cormat)),cormat)
上で、行名に入っている列名を一列目につけて返しています。以下の赤で囲った部分です。
#メタデータ設定
modelerDataModel<-data.frame(X1=c(fieldName='COLNAME',fieldLabel="",fieldStorage="string",fieldMeasure="",fieldFormat="",fieldRole=""))
上でこの列のメタデータを設定しています。以下の赤で囲った部分です。
for (x in colnames(cormat) ){
newVar <- c(fieldName=x,fieldLabel="",fieldStorage="real",fieldMeasure="",fieldFormat="",fieldRole="")
modelerDataModel <- cbind(modelerDataModel,newVar)
}
上で相関ととった列名のメタデータを設定しています。以下の赤で囲った部分です。
サンプルのストリームファイルは以下で公開しています。
テスト環境
Modeler18.2.1
Windows 10 64bit