皆さん、こんにちは。デール・ヒューマンです。ウィスコンシン州ミルウォーキーにあるGEヘルスケアでエンジニアとして働いています。今日はモデルの作成について少しお話しします。ブートストラッピングを用いて、モデルから得られる結果の変動がどの程度になるかを評価する方法、そしてもう少し深く掘り下げたい場合は、モンテカルロシミュレーションを用いて、入力値の変動に基づいてシステムに期待される変動をさらに評価する方法です。色々なことが起こりますね。それでは始めましょう。まずは、簡単に動機を説明したいと思います。
これはすべて、新製品開発や研究開発のような状況において、小規模なサンプルサイズから始めるという状況に帰着します。いくつかのテストを行い、それらのテストや測定結果から、今後の進め方やシステムの動作予測を決定しようとするのです。これは、ブートストラッピングやモンテカルロシミュレーションなどのツールを適用するのに非常に適しています。JMPでどのように行うのか見てみましょう。
まず、非常にシンプルなシステムについて考えてみましょう。例えば、クランプシステムがあるとします。ここにドライバーがあります。これは、あるアセンブリで締め付けるために使われています。このネジを締める際に測定するために、アセンブリにロードセルを挿入します。アセンブリにどれくらいの力が加えられているでしょうか?これは、ごく一般的な機械的な応用例です。ネジに加えられたトルクを測定し、そのトルクから測定された力を得ることで、このシステムがどのように将来動作するかをモデル化し、関係性を構築できるかどうかを把握したいのです。
サンプルデータテーブルがあるので、ここで開きます。ご覧のとおり、いくつかのテスト、この場合は9つのテストを行い、ねじ駆動部にトルクを加えて力を測定しました。力と加えられたトルクの関係を理解したいのです。このケースではモデルを作成しましょう。応答変数が1つ、X因子が1つ、入力変数がトルク1つだけなので、「Y by X」プラットフォームを使用することができます。
分析メニューを開き、「Y×Xの近似」を選択します。測定された力を応答として、加えられたトルクを入力としてダイアログに入力します。JMPは、変数が2つしかないため、二変量分析を実行すると表示します。「OK」をクリックします。JMPと同様に、データの散布図というチャートが作成されます。加えられたトルクと測定された力の関係を視覚的に確認できます。ご覧の通り、何らかの関係があるようです。トルクを増加させると、測定された力も増加する傾向があります。納得できます。
また、トルクがどんどん大きくなるにつれて、この辺りで少しプラトー状態になり始めているように見えます。このシステムでは、おそらく想像できるでしょう。ある時点でアセンブリは完全にクランプされるため、トルクをさらに加え続けても力の観点からはあまり役に立ちませんが、その関係性は確認できます。モデルを構築してみましょう。ここにある赤い三角形のところへ行きます。線形関係を求める場合は「直線近似」を実行できますが、プラトー効果が見られる場合は、代わりに「特殊フィット」ダイアログに移動し、X軸とY軸の変換を選択できます。
今回は、Xの自然対数を選択します。これは、このシステムがプラトー効果を持つ可能性があるという考えを捉えるのに役立つため、自然対数を選択します。また、中心多項式オプションはここでオフにしました。このオプションはオンのままでも構いません。何も変わりません。方程式の見方が変わるだけです。今はオフにしています。「OK」をクリックします。これが最適な近似曲線です。これは基本的に、解析で適用されたトルクの自然対数と最適な近似曲線を用いた最小二乗回帰です。データとかなりよく一致しているようです。
いいですね。ここに分析から導き出された式があるので、それが分かります。回帰分析を経験したことがある方は、R2乗値を見たことがあるでしょう。ここにR2乗値があります。これは非常に良い値です。90%をはるかに超えています。調整R2乗値とR2乗値は近い値です。この場合、Xは1つだけです。これは当然のことでしょう。
二乗平均平方根誤差(RMS)を見てみると、これはいわばモデルの標準偏差のようなものです。少し大きいかもしれません。少し分かりにくいかもしれません。では、適用したフィッティングの信頼区間を表示してみましょう。ここでは、信頼度シェーディングフィッティングオプションを選択します。モデルの不確実性を確認できます。例えば、トルクが100ニュートンメートルの場合、平均測定力の予想される変動は約1000ニュートンメートルです。これが信頼区間の幅です。
少し大きいですね。データポイントが9つしかないので、このモデルには不確実性が大きいと思われるかもしれません。おそらくその通りでしょう。また、この下にはパラメータ推定分析も表示されており、もちろん、モデルのパラメータ値、つまり式にも含まれている傾きと切片の値が表示されています。さらに、これらの値の標準誤差も確認できます。これは、これらの値の不確実性を定量化した値です。
ご覧のとおり、切片の標準誤差は約2000ニュートン、傾きの項の不確実性は約500ニュートンメートル(傾き1ニュートンあたり)です。私たちは、今後これほどの変動を本当に予測できるのかを理解しようとしています。もしより多くのデータを集めたら、不確実性がこれほど大きくなると本当に予測できるのでしょうか?
このモデルはわずか9つのデータポイントから作成されていますが、サンプル数が少ないため、実際に何が起こると予想されているのか、あるいはサンプル数が少ないためにこのモデルの誤差を過大評価しているのではないか、とどのように評価すればよいでしょうか?その方法の一つとして、ブートストラップと呼ばれる手法があります。
ブートストラップについてお話しましょう。ブートストラップは実に「シンプルな」手法で、元のデータから何度も再サンプリングを行い、計算対象のパラメータの値を再推定します。今回のケースでは、このモデルの傾きと切片を何度も再推定することで、このシステムで今後予想される真の不確実性をより正確に把握します。これがブートストラップの基本的な考え方です。図で視覚的に示しています。この例では、3つのデータポイントから小さなサンプルデータを取得しています。
ブートストラップとは、元のデータセットからランダムなサンプルを取得することです。このボックスにはランダムなサンプルが1つあり、3つのデータポイントが含まれていますが、今回はランダムに選択したため、行番号3を2回、行番号1を1回選択しました。行番号2は表示されませんでした。このプロセスを何度も、何百回、何千回と繰り返します。新しいサンプルを取得するたびに、システムで注目しているパラメータを再計算します。今回の場合、最終的にはモデルの傾きと切片の値を確認する必要があります。
関心のあるパラメータが何であれ、それぞれの異なるサンプルについてそのパラメータを計算し、たとえデータセットが小さくても、期待される変動を理解するために何度も繰り返します。これがブートストラッピングの基本的な考え方です。これはよく使われる手法です。ノンパラメトリックなのが利点です。正規性などの仮定を一切必要としないため、様々な状況に適用できます。
サンプル数が少ない場合はいつでも、この手法を活用できます。繰り返しになりますが、この手法を検討する理由は、モデルや分析における計算の誤差を推定しようとしているからです。多くの場合、システムの変動を調べるために、分散などの指標を使用します。分散はnまたはn-1で割ることを覚えておいてください。サンプル数が少ない場合は、通常、非常に小さな数で割るため、予想される変動が過大評価される傾向があります。しかし、データを継続して収集する場合、これは現実的な予測値ではない可能性があります。ブートストラッピングは、そのような状況を踏まえて、より現実的な変動を推定するための方法です。
これがブートストラッピングの基本的な概念です。簡単な例として、作成したモデルに戻る前に、例えばここにある値の分布を見てみましょう。ここでも、測定された力の値は9つあります。まずはこれの分布分析を行いましょう。「分布分析」メニューに移動して、この例では力だけを見ていきます。値の分布を見てみましょう。
ここにそれがあります。要約統計量の表が表示されています。四分位数は今は隠しておきます。これは私が注目している点ではありませんが、ご覧の通り、この場合の平均値は約7100ニュートン、標準偏差は約2000ニュートンです。データのサンプル数が少ないため、標準偏差はかなり大きくなっています。nの値が小さいため、この値は誇張されています。
これが本当に母集団の今後の変動であるかどうかを予測する方法はあるでしょうか?母集団から測定されたのはわずか9ユニットだけであることを考えると、これが私たちの変動の現実的な予測値であるかどうかを判断するために、ブートストラップ法を試すことはできますか?どのように行うのでしょうか?JMPを使えば非常に簡単にできます。関心のあるパラメータの表があるので、平均値と標準偏差に注目します。どちらもこの表に含まれているので、表内で右クリックします。これまで見てきたメニュー項目がすべて表示されますが、一番下にブートストラップ法があります。
これにより、データを何度も再サンプリングできます。個々のサンプルごとに、すべての統計量が再計算されます。その後、値の分布を調べることで、サンプル数を増やしていくことでシステムがどのように動作するかをより深く理解することができます。デフォルトのサンプル数は2500なので、JMPは私の測定された力の値を調べ、元の9つの値からランダムに9つの値を取得します。繰り返しますが、図で確認したように、同じ値が複数回取得されることもあります。
常に全く同じ9つのデータポイントが得られるわけではありません。これがブートストラップの良いところです。デフォルトでは2500回実行されます。「OK」をクリックして実行してみましょう。数秒で完了します。これは非常に簡単な計算です。ただし、非常に複雑なモデルの場合、大量のデータを処理すると時間がかかる可能性があることに注意してください。計算負荷の高いモデルの場合はなおさらです。今回の場合は、平均値と標準偏差を計算するだけです。これは非常に簡単です。これで、JMPによって新しいデータテーブルが作成されました。
2501行あることがわかります。これは元のデータを2500回再サンプリングしたためです。最初の行は元のデータ自体の値、つまり0行目です。その他の行はすべて、この表にある各統計量について再サンプリングされた計算値です。これらの値はすべて同じ表にあるため、JMPはこれらの統計量すべてをブートストラップしようとしているため、この行を省略します。この時点では、他のすべての値についてはあまり気にする必要はありません。平均に注目したいのは、システムの平均性能、つまり平均力の予想される変動を理解したいからです。
平均値に注目しましょう。JMPは、表内の各変数の分布分析を自動的に作成します。分布分析のところです。このスクリプトを実行すると、様々な変数の分析が表示されます。ここでも平均値に注目しましょう。Ctrlキーを押しながら、分布分析をすべて非表示にします。画面を見やすくするために平均値だけを表示し、分布分析の隣に移動させます。
もう一度、四分位数を非表示にします。四分位数に焦点を当てているわけではありません。皆さんは四分位数に興味があるかもしれませんが、ここで計算された値を見てみましょう。ここには、このサンプルを再サンプリングした結果得られた平均値の2500通りがあります。平均値を見ると、約7100ニュートンで、最初の値に非常に近い値です。しかし、標準偏差ははるかに小さくなっています。元の標準偏差は約2100ニュートンでした。
今では約670ニュートンにまで減少しています。これは、この大規模な母集団から何度も再標本抽出を行っているためです。標準偏差の推定値は、おそらく私たちが期待する値、つまりこの母集団における実際の変動に近づいてきています。ここでは標本数が少ないため、変動が誇張されています。同じ母集団から再標本抽出を行っています。これらの計算に使用されたすべてのデータポイントは、これら9つのデータポイントと同じ母集団から取得されています。なぜなら、同じデータから抽出しているからです。
これはおそらく、この母集団で見られるであろう変動をより現実的に表していると言えるでしょう。これがブートストラップの威力です。では、ブートストラップ標本をさらに大きくすれば、標準偏差はさらに小さくなるのだろうか?と疑問に思われるかもしれません。試してみましょう。元のデータに戻りましょう。この表を右クリックし、「ブートストラップ」を選択します。今回は10,000個のブートストラップ標本を作成します。「OK」をクリックします。
実行には数秒かかりますので、そのままにしておきます。おそらく数秒以上かかるでしょう。これで10,000行のデータテーブルができました。各行は同じ母集団の異なるサンプルです。このテーブルから分布を見ることができます。これを開いてみます。ここでも平均値に注目します。分布はすべて閉じて、平均値を開きます。平均値を他のウィンドウの横に並べましょう。すみません、少し移動させて、まとめて見えるようにします。
これで10,000個のブートストラップ標本が得られました。平均値は依然として約7100ですが、標準偏差は約670であることにご注意ください。これは驚くべきことではありません。なぜなら、これらの値はすべて同じ母集団から計算されているからです。母集団には平均値があり、ある程度のばらつき、つまり標準偏差があります。どちらの分析でも非常に大規模な標本を使用しているため、これらの値が変化することはあまり期待できません。
これは非常に小さなサンプルなので、今回のものとは異なります。しかし、これは今後の推移を実際に確認できるものです。2000ニュートンの範囲よりも、670ニュートン程度の変動が予想されるかもしれません。もちろん、下部には信頼区間がいくつか計算されており、信頼度レベルが異なるため、母集団における予想される変動の程度を把握できます。
繰り返しになりますが、ブートストラップ標本の値は互いに非常に似ており、元の小さな標本の平均の信頼区間よりもわずかに狭くなっています。これは、おそらくより現実的な標準偏差の推定値を使用しているためです。これがブートストラップの威力です。たとえ小さな標本データから始めたとしても、システムのばらつきを把握できるようになります。それでは、表を閉じましょう。これでブートストラップが私たちに何をしてくれるのか基本的な考え方が理解できたので、これらの表を閉じて邪魔にならないようにします。
ジャーナルに戻って、ブートストラッピングのやり方を詳しく説明しました。標準偏差は実際には変化しないはずです。平均値も実際には変化しないはずです。なぜなら、それらはデータが抽出された元の母集団を表しているからです。これがブートストラッピングの考え方です。モデルに戻りましょう。そのセクションを開いて、このモデルで同じことを行えます。このモデルでは、最小二乗回帰モデルの傾きと切片のパラメータの推定値を計算しました。問題は、これらの推定値の誤差がこれほど大きくなるのは当然のことなのかということです。
これらの推定値は、各力の平均値のときと同じようにブートストラップできます。繰り返しますが、表の推定値列を右クリックし、「ブートストラップ」を選択して、実行する値の数を選択するだけです。今回は少し速くするため、2500とします。計算には数秒かかります。これで、再び2500個の値の表が作成されました。JMPが作成した分布分析を見てみましょう。この分析には2つの値しかありません。これは、切片と傾きの2つの推定値しかなかったためです。
ここでも、Ctrlキーを押しながら両方を同時に閉じることで、分位点を非表示にします。ここでは、切片の標準誤差は約2000ニュートン、傾きの標準誤差は約450ニュートンでした。ブートストラップから何が得られたでしょうか?ブートストラップ標本の標準偏差を見ると、依然として約2000ですが、この場合は2200です。同様に、傾きのブートストラップの標準偏差は約475で、少し異なりますが、最小二乗回帰分析から得られた元の値452に近いです。「ちょっと待ってください。ブートストラップは役に立たなかった」と思うかもしれません。その通りです。この場合、ブートストラップはあまり役に立ちませんでした。
これは当然の結果です。最小二乗回帰を思い出すと、最小二乗回帰はモデルの分散を最小化する近似値を選択するように設計されているからです。傾きと切片の推定値としてこれらの値が選ばれたのは、モデルの誤差を最小化するためです。最小二乗回帰では、ブートストラッピングはあまり役に立ちません。実際、そうなのです。私は単に、モデルにブートストラッピングを適用する方法の例として、この例を挙げたかったのです。
さて、誤差の推定値が得られない他のモデリング手法、例えばニューラルネットワーク分析や主成分分析などを使用している場合、その分析から予想される変動や標準誤差がどれくらいになるかを直接知ることはできません。そのような場合は、ブートストラッピングを用いて、そのモデルの誤差を把握することができます。ここで示しているのは、ブートストラッピングはあまり役に立たないということです。ブートストラッピングは、概ね最小二乗分析から得られる結果と一致します。なぜなら、最小二乗分析は変動を最小化するように設計されているからです。
この概念は、あらゆるモデリング手法に当てはまります。繰り返しますが、ブートストラッピングはパラメトリックなアプローチではないからです。データの分布について何の仮定も立てません。様々なモデリング手法で活用できます。これは、モデリング、いや、ブートストラッピングを使って最小二乗回帰の誤差を理解する一つの方法です。ただし、それほど有用ではありません。ここで力の実験で行ったように、平均値の変動を理解したいだけなら、ブートストラッピングを使って、より詳細なモデリングを行う前に、今後の変動をより現実的に把握することができます。このようにも使えます。
これがブートストラッピングの考え方です。平均値の期待変動を見るという最もシンプルな形で示しました。また、モデルからの推定値の誤差を理解するのにも使えます。最小二乗法だけでなく、他の手法も役立ちます。
システムにおける変動の影響を評価できるもう一つの方法はモンテカルロシミュレーションです。JMPを使えば、モンテカルロシミュレーションを非常に簡単に実行できます。これはモデリングプラットフォームの一部です。では、モンテカルロシミュレーションについて見ていきましょう。モンテカルロシミュレーションとは基本的に何をするのでしょうか?モデル、あるいは一般的には方程式がある場合です。ここでは分析からモデル方程式を作成しました。これは同じモデルです。モンテカルロシミュレーションでは、モデルの入力に変動を注入し、その変動が出力因子、つまり応答変数に与える影響を評価することができます。
入力値に何らかの変動があると仮定します。例えば、今回のケースでは、印加トルクが、ある標準偏差を持つ注目値を中心とした正規分布に従うと仮定します。この分布からランダムに多数の値を選択し、その多数の値をこの式に代入して出力を計算します。こうすることで、入力値がこのように変動するのかどうかが分かります。出力はこのように変化するはずです。これがモンテカルロシミュレーションの基本的な考え方です。
繰り返しになりますが、一般的には多数のサンプルに対してこの作業を行うことで、応答にどのような変動が予想されるかを理解するのに役立ちます。JMPでは、出力に他の種類の変動を挿入することもできます。ここではそれについては説明しません。それが選択肢の一つであることだけ覚えておいてください。モンテカルロ法とJMPはどのように行うのでしょうか?非常に簡単です。まずモデルを用意します。今回の場合は、最小二乗モデルを構築しました。モデルの適合に進み、プロファイラーをオンにします。ここから始めます。プロファイラーを以前に見たことがある方はご存知でしょうが、これは前回の分析で決定されたモデル方程式をグラフィカルに表現したもので、入力値Xを調整してYに何が起こるかを理解することができます。
プロファイラーで実行できるもう一つの機能は、モンテカルロシミュレーションです。プロファイラーの赤い三角形をクリックすると、シミュレーターを起動できます。これがモンテカルロシミュレーターです。これにより、Xの値がどのように変化するかを指定できます。そして、その変化に応じて応答変数に何が起こるかが表示されます。下のドロップダウンから、Xの変化(この場合は適用トルク)を選択できます。「ランダム」を選択します。ランダムを選択したら、入力の変化に使用する分布を指定できます。
例えば、このシステムを125ニュートンメートルで動作させたいとします。これが標準的なトルク値です。これから使用するトルクレンチを使って簡単な測定を行い、125ニュートンメートルにプログラムすると、通常は125ニュートンメートルになりますが、標準偏差が例えば3ニュートンメートルあることがわかりました。期待値の平均と標準偏差を入力してください。
後は、こちらの「シミュレーション」ボタンをクリックするだけで、JMPが大きな数値を計算します。下のボックスに入力した数値です。今回の場合は10,000個の値が計算されました。JMPは平均値125、標準偏差3の正規分布からランダムに10,000個の異なる値を選択しました。そして、事前に決定されたパラメータ推定値を用いて、これらの10,000個の値すべてをモデル式に代入し、すべての変数に対する応答を計算します。この分布は、それがどのようになるかを示しています。
このビューでは少し縮んで見えますが、これはグラフのスケールが少し狭いためです。必要に応じて拡大できます。JMPに値を表形式で表示させることもできます。下の方に「シミュレーション結果表」という項目があります。これを開いて「表の作成」ボタンをクリックします。ここには、正規分布からランダムに選択された10,000通りの適用トルク値があります。これらを式に代入して、力を計算するために使用しました。
JMPが分布分析を実行し、こちらに保存しました。これを開いてください。これは測定された力の分布を示しています。これは、システム内で何が起こっているかを確認できるように、少し解像度を高めた分布です。この測定された力の分布は、想定された分布に従って、適用されたトルクにおける入力の変化の影響を示しています。この分布から、その変化が応答にどのような影響を与えるかを確認できます。
ここから、工程能力分析、許容区間分析など、様々な分析を行うことができます。これらの分析は、入力値の変動量に対して、応答がどのように変化するかを把握するのに役立ちます。ここで何を選択するかはあなた次第です。できれば、過去のデータも活用してください。このシステムで使用するトルクレンチを見て、そのことがお分かりいただけたと思います。そうです、トルクはこの分布に従って変化します。ですから、適切な分布と適切なパラメータを選択できます。
システム内で何が起こっているかを考え、「これらの値の間では一様分布に従うはずだ」と言える専門知識をお持ちかもしれません。もちろん、これはモデルなので推測することもできます。確信が持てない場合は、まずは何らかの正規分布を仮定して、何が起こるかを確認してみましょう。そして、興味があるかもしれない様々な仮説分析を行うことができます。それがモンテカルロシミュレーションです。JMPでは非常に簡単に実行できます。ブートストラッピングと併せて、これらの手法はどちらも、システム内の変動を評価することができます。ブートストラッピング用の小さなサンプルに基づいて評価することも、入力の既知の変動に基づいて出力に何が起こるかを評価することもできます。
ここではいくつか異なる点についてお話ししました。ブートストラッピングは、たとえ少量のサンプルであっても、システムにおける変動の予測値を理解するために使用できる手法です。また、モンテカルロ分析では、モデルの入力に変動を注入することで、それがモデルの出力にどのような影響を与えるかを理解することができます。非常に一般的な手法で、非常に人気があり、非常に強力です。モデルが完成すれば、非常に便利なツールが使えるようになります。今日はこれについてお話します。ありがとうございました。