3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PLSをSPSS ModelerのR拡張ノードで使用する

Last updated at Posted at 2023-06-22

SPSS Modelerの拡張モデルノードを使って、PLS(Partial Least Squares Regression;部分的最小二乗回帰)を使ってモデリングとスコアリングを行いました。

  • テスト環境
    Modeler 18.4
    Windows 11 64bit
    R 4.0.5
    pls 2.8

  • サンプルストリーム

1. 事前準備

1.1. SPSS ModelerのR拡張ノードを利用可能にする。

R拡張ノードのセットアップができていない場合には以下の手順でセットアップします。

SPSS Modelerの拡張ノードでRを利用する

1.2. Rにplsを導入する

Rのコンソールを開き以下のコマンドでplsを導入します。CRANのミラーサイトはJapanなど適当なものを選択します。Program Filesに導入する場合には管理者権限でRを起動します。

install.packages('pls',dependencies = TRUE,lib="C:/Program Files/R/R-4.0.5/library")

image.png

2. ストリームの作成

入力

Demosフォルダにある$CLEO_DEMOS/property_values_train.savを使います。

image.png

説明変数と目的変数のみを「フィルター」ノードで選択します。
image.png

モデリング

「拡張のモデル」ノードを接続し、シンタックスとしてRを選び、「Rモデル作成シンタックス」と「Rモデルスコアリングシンタックス」に以下のコードを入力します。
image.png

Rモデル作成シンタックス
YFieldName<-'taxable_value'

library("pls")

#PLSモデルの作成
f = as.formula(paste0(YFieldName,' ~ .' ))
modelerModel <- plsr(formula = f,  data=modelerData, validation = "CV", scale=TRUE)

summary(modelerModel)
Rモデルスコアリングシンタックス
YFieldName<-'$P-taxable_value'

library("pls")

#主成分数の決定.
ncomp<-selectNcomp(modelerModel, method="onesigma")
print(paste("ncomp",ncomp))

#スコアリング.
result <- predict(modelerModel, newdata=modelerData, ncomp=ncomp, type="response")

#予測列の追加
modelerData <- cbind(modelerData, result)
#modelerData

#予測列の定義
var1 <- c(fieldName=YFieldName, fieldLabel="", fieldStorage="real", fieldMeasure="", fieldFormat="", fieldRole="")
modelerDataModel <- data.frame(modelerDataModel, var1)

「実行」すると、モデルナゲットが生成されます。

スコアリング

モデルナゲットに「精度分析」ノードを接続して実行するとスコアリング結果が出ます。「$P-taxable_value」に予測結果が入っています。
image.png

精度分析

モデルナゲットに「精度分析」ノードを接続して精度も確認してみます。
「フィールド名の形式(たとえば'$-<対象フィールド>'))」にチェックを付けて実行します。
image.png

以下のように精度の指標が表示されます。

image.png

3.スクリプトの開設

モデリングスクリプトの解説

まず目的変数名を設定しています。利用したいデータに合わせて修正してください。

YFieldName<-'taxable_value'

次に目的変数と説明変数を指定して、PLSのモデルを作っています。
modelerDataには「フィルターノード」の出力結果がdataframeとして入っています。

library("pls")
f = as.formula(paste0(YFieldName,' ~ .' ))
modelerModel <- plsr(formula = f,  data=modelerData, validation = "CV", scale=TRUE)

最後にモデルの情報を出力しています。

summary(modelerModel)

この出力結果はモデルナゲットの「テキスト出力」タブにでています。
image.png

スコアリングスクリプトの解説

まず予測結果変数名を設定しています。利用したいデータに合わせて修正してください。
「$P-」のような形式にすると精度分析ノードで利用できます。

YFieldName<-'$P-taxable_value'

selectNcompをつかってどの主成分数までを使うかを決定しています。

library("pls")
#主成分数の決定.
ncomp<-selectNcomp(modelerModel, method="onesigma")
print(paste("ncomp",ncomp))

selectNcompで得た主成分数でスコアリングしています。

#スコアリング.
result <- predict(modelerModel, newdata=modelerData, ncomp=ncomp, type="response")

予測結果列をcbindで連結しています。
また、予測結果列の列の定義も追加してmodelerDataModelに入れています。modelerDataやmodelerDataModelの利用方法はこちらのマニュアルに記述があります。

#予測列の追加
modelerData <- cbind(modelerData, result)

#予測列の定義
var1 <- c(fieldName=YFieldName, fieldLabel="", fieldStorage="real", fieldMeasure="", fieldFormat="", fieldRole="")
modelerDataModel <- data.frame(modelerDataModel, var1)

参考

pls-manual

偏最小二乗回帰(PLS回帰)分析 | KOTA's Lab.

部分的最小二乗回帰を R で実行する方法 - 統計ER

モデル作成シンタックス - IBM Documentation

SPSS ModelerのR拡張ノード関連記事へのリンク - Qiita

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?