SPSS Statisticsによる非線形回帰分析

# はじめに
4次元の多項式の非線形回帰を行います。

## 実行動画（3分20秒）

<iframe width="560" height="315" src="https://www.youtube.com/embed/dVxt2TWrrDE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


■テスト環境
Windows 11
SPSS Statistics 29.0.1 Standard Edition

# データの入力
テストデータを読み込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9eaccb32-f45a-4192-1d74-ae80a82b83a0.png)

以下のようにxとyのデータが読み込めました。

# データの可視化
「グラフ」＿「図表ビルダー」を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/023fcd85-c018-6f72-ea3e-327e180ad99a.png)

以下はOKで進んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/40b19ec1-ae87-8678-d62f-48379e86784a.png)

「散布図/ドット」を選び、散布図を選んでキャンバスにドラッグアンドドロップします。
変数「x」をｘ軸に、変数「y」をy軸に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/92e5a988-82ed-23b3-b084-8f9feaa3b436.png)

以下のようなデータです。4次関数が想像されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/60069548-10e6-6af1-64d0-045274031b57.png)

# 非線形回帰分析
メニューから「分析」_「回帰」_「非線形」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b919b5ba-d264-89b1-ac83-4b338944de28.png)

以下のような4次関数の多項式を想定します。
```math
\alpha+\beta1x+\beta2x^{2}+\beta3x^{3}+\beta4x^{4}
```
「従属変数」に「y」を設定します。
「モデル式」に以下を設定します
```
a+b1*x+b2*x**2+b3*x**3+b4*x**4
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/12595d5e-519f-5a41-bd3d-3a6efb8bbae7.png)

「パラメーター」ボタンを押して、推定したいパラメーターとその初期値を定義します。ここでは初期値は全て0で始めています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/24e6391f-ddd0-1bfc-29d5-99e154492bcd.png)


「保存」ボタンをクリックし、「予測値」と「残差」を出力するように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fc45ab63-d62a-3eda-0886-3ead9cf1bea5.png)

「OK」で分析を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ac79b070-b78b-14dc-201d-d9d2b04eb890.png)

「パラメータ推定値」をみると各パラメーターの推定値がでています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/610f7551-4be6-f249-8439-be0760826085.png)

「分散分析表」の下部にはR2乗値がでています。ここでは「0.972」ですのでかなり当てはまりがよい結果でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e8bf7484-b17e-559f-dba5-ce5d70c5badb.png)

# 結果の可視化
「グラフ」＿「図表ビルダー」を起動します。

「Predicted Values」をy軸に追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bfe786f1-ce61-cd82-5ea4-f3b3b5c9698a.png)

前回の散布図の設定が残っていますので、予測結果も重ねて表示してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/27670708-e5c9-6ca5-f0ff-749af3aa0f1e.png)

確かによくフィットできているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/704253a3-c8f6-765f-ac21-a70492d0177d.png)

次に今度は残差「Residuals」と予測値「Predicted Values」の関係を確認します。
変数「Predicted Values」をｘ軸に、変数「Residuals」をy軸に設定してグラフを表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/49881b18-b6d2-4a00-cf69-e48c909357e9.png)

残差は予測値から大体独立しているかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/043b40da-61e2-c2cc-46da-c945ef655adf.png)

# サンプル
#### サンプルデータ
 https://github.com/hkwd/240418spssstatssample/raw/master/240418nonlinear/4d.sav

#### サンプルSYNTAX
```syntax
DATASET ACTIVATE データセット6.
* 非線型回帰分析.
MODEL PROGRAM  a=0 b1=0 b2=0 b3=0 b4=0.
COMPUTE  PRED_=a+b1*x+b2*x**2+b3*x**3+b4*x**4.
NLR y
  /OUTFILE='C:\Users\503615~1\AppData\Local\Temp\spss20516\SPSSFNLR.TMP'
  /PRED PRED_
  /SAVE PRED RESID
  /CRITERIA SSCONVERGENCE 1E-8 PCON 1E-8.
```
# 参考

#### 非線型回帰 - IBM Documentation 
https://www.ibm.com/docs/ja/spss-statistics/29.0.0?topic=edition-nonlinear-regression

#### 【機械学習入門】実験データの解析に役立つ非線形回帰分析を利用してみよう
https://qiita.com/kwi0303/items/283eea5211f9ca4c2a05

こちらの記事で作成されていたデータを流用させていただきました。