デビッド・バーナムです。今回の講演では、経時劣化をモデル化することで、製品の保存期間を推定する方法についてお話ししたいと思います。この評価を行う一つの方法は、製品を温度管理されたチャンバーに入れることです。しかし、この方法では、モデルを構築するのに十分なデータが蓄積されるまで、数ヶ月、あるいは数年かかる場合があります。しかし、もし本質的に不安定な新製品を市場に投入することになったとしたらどうでしょうか?そのような情報は、できるだけ早く入手したいものです。
加速安定性試験の役割は、わずか数週間でこのデータを得ることです。これは、製品にストレスを与えることで実現します。例えば、高温で保管することができます。私は、これらの加速安定性試験から得られるデータをモデル化するために設計されたJSLアプリケーションの開発者です。この開発は、Pega Analyticsと複数の製薬会社との共同作業です。Pega Analyticsは、私が15年前に設立した会社で、主にJMPのトレーニングを提供していますが、JSLサービスも提供しています。本日の講演では、医薬品錠剤内の劣化をモデル化するプロセスについてお話ししたいと思います。
この劣化は、錠剤が完全に安定していないために発生します。時間の経過とともに不純物が蓄積します。この変化を科学的に記述するために、速度論モデルを使用することができます。不純物は、錠剤内および環境中の熱エネルギーと水分の存在によって引き起こされます。この種の研究から得られるデータを見てみましょう。高温、これは保管温度、そして高い相対湿度です。わずか2週間という期間で製品に負荷をかけることで加速されるため、測定可能な量の不純物と、その数値の十分な変動が得られ、モデルを構築することができます。
モデルがどのようになるかお見せしましょう。このモデルには3つの要素があります。温度と相対湿度は保管条件です。そして、時間要素は不純物の経時的変化を表します。これらのデータを用いてモデルを構築したら、2つのことが可能になります。1つ目は、保管条件を通常の無ストレス状態になるように下げることです。次に、この製品が将来どうなるかを外挿して予測します。Y軸のスケールを変更して、この例を見てみましょう。この例では、時間プロファイルが平坦で安定しており、この製品の仕様閾値である紫色の線を下回っています。この速度論モデルはすべて良好に見えます。
構築できる別の種類のモデルとして、包装モデルがあります。なぜ包装が必要なのかを説明しましょう。ここでは、不安定な製品を例に挙げます。説明のために、温度を再び50度まで上げてみましょう。ご覧の通り、約50日または60日後に不純物が規格限界を超え、もはや製品として機能しなくなります。この例では温度を50度まで上げましたが、これが通常の保管条件だと想像してみてください。そこで、何ができるかを考えてみましょう。包装を導入することができます。包装の役割は湿度を下げることです。
湿度を下げると、時間プロファイルが平坦化していくのが分かります。実際、湿度を下げると温度に対する感度も低下します。ここでは相対湿度が20%ですが、これは包装を行う際に管理された環境で達成できるものです。錠剤をボトルに入れ、20%で密封します。この作業には包装モデルは必要ありません。錠剤をボトルに入れるだけです。しかし、時間の経過とともにボトル内の湿度が上昇します。これは非常に興味深いことです。ボトルは比較的頑丈に見えますが、水分がボトルの側面から浸透しており、その浸透をモデル化できるのです。これは物理学的に非常に興味深い現象です。
乾燥剤を加えることで乾燥を遅らせることができ、乾燥剤の効果をモデル化できます。これらのモデルを使えば、投入する乾燥剤の量に基づいて仮説分析を行うことができます。だからこそ、私たちはパッケージングモデルに興味を持っているのです。しかし、これは非常にニッチで、非常に広く、非常に楽しく、物理学と数学への興味を掻き立てるものです。しかし、これをより幅広い聴衆に理解してもらうために、私は運動モデルに焦点を当てたいと思います。たとえパッケージングを行うとしても、湿度への依存性を理解しなければパッケージングモデルは役に立ちません。私はこれらの運動モデルに焦点を当てていきます。私がやりたいことの一つは、これらのモデルを構築する際に発生する課題に対処することです。構築というよりも、モデルの選択です。
モデル選択の課題は加速安定性試験に特有なものだと思います。JSLアプリケーションは、その作業を支援してくれます。しかし、アプリケーション自体を見ていく前に、JMPの機能を使ってこれらのモデルをネイティブに構築する仕組みについて少し理解していただきたいと思います。まずは、これらのデータに対して構築できる、おそらく最もシンプルなモデルをご紹介します。ここにモデルの数式があります。この数式はアレニウスの式に基づいています。温度の指数項と時間の項、そして相対湿度の要素があります。アレニウスの式を拡張して水分を含めました。それでは、この数式がどのように機能するかをお見せしましょう。
この列を非表示解除すると、数式は不純物についてこのように予測しますが、うまくいきません。予測値は10%ですが、実際の値は2.5%です。一体何が起こっているのでしょうか?数式をもう一度見てみると、数式を作成する際に、異なる列変数に基づいた式を作成することはお馴染みだと思います。しかし、パラメータを追加できることはご存知ないかもしれません。パラメータを追加し、名前を付けて値を設定できます。さて、この数式には3つのパラメータがあり、それぞれのパラメータには任意に割り当てられた番号が割り当てられています。これは私がやりたいことではありません。私がやりたいのは、これらのパラメータに最適な値を選ぶことです。
モデルをデータに当てはめることでこれを行います。このプロセスは、JMPの非線形プラットフォームを使って実現します。非線形プラットフォームを詳しく見ていきましょう。まず、モデルを予測式に割り当て、不純度を応答に割り当てます。すると、「開始するにはGoをクリック」というウィンドウが表示されます。Goボタンをクリックする前に、何が起こっているのか説明させてください。これらのパラメータがあり、それぞれに初期値を与えました。ここでやりたいのは、これらの値を最適化することです。Goをクリックすると、ガウス・ニュートン法が適用されます。これは、誤差の二乗和を最小化する値を選択するものです。最小二乗回帰と似た概念です。必要に応じて、これを平均二乗平方根誤差(RMS)約2に変換することもできます。これが最終的なモデルです。
次に、これが私にできる最善のことなのかという疑問が湧きます。比較できる2つ目のモデルがあれば、これまでに示したものよりもはるかに複雑なモデルを構築できます。より複雑なモデルを図解してみましょう。これは、より多くのパラメータが関連付けられており、それらがより複雑な式に関連付けられているという意味でより複雑です。式の詳細については説明しません。このモデルのフィッティングの仕組みに焦点を当てたいと思います。なぜなら、「実行」をクリックすると失敗するからです。これらのモデルを構築する際の課題や理由をいくつか見ていきたいと思います。もう一度「実行」をクリックするように指示されています。もう一度「実行」をクリックしても、やはり失敗します。あまり役に立ちません。
何が起こっているのでしょうか?最大反復回数を超えました。最大回数は60回ですが、これはどういう意味でしょうか?勾配降下法のアルゴリズムを実行しているということです。私は丘の上に座っていて、丘を下りて底まで行きたいのですが、60ステップしか降りることができません。なぜそのように制限されているのか、よく分かりません。現代のコンピュータでは、60ステップ以上でも問題ありません。では、制限を6,000に設定してみましょう。これらのパラメータをリセットします。元に戻して、もう一度「実行」をクリックします。それでも失敗しますが、別のエラーメッセージが表示されます。メッセージは、収束基準が厳しすぎるので、緩和する必要があることを示しています。収束基準は非常に小さな数値です。10のマイナス15乗は避けたいですね。
小さい数値が欲しいのですが、10のマイナス7乗は小さいと思います。試してみましょう。最初のパラメータに戻して「Go」をクリックします。ようやく収束しました。複雑なモデルでは、より多くの作業が必要になる場合があることがわかります。では、2つを比較してみましょう。誤差の二乗和は128、つまり二乗平均平方根誤差は約2.5です。一方、二乗平均平方根誤差は2で、誤差の二乗和は91です。右側のモデルの方が左側のモデルよりも優れています。少なくとも、異なるモデルを比較することはできます。ただし、これを行う際には注意が必要です。左側のモデルはまだそのモデルの最良の表現ではないからです。他にできることをお見せしましょう。
2つ目のモデルでこの分析を再開しますが、「実行」ボタンはクリックしません。これは勾配降下法アルゴリズムなので、坂道を歩いているようなもので、歩数についても説明しましたが、出発点によっても異なります。出発点が異なれば、最終的に歩く場所も異なります。出発点は、この値に基づいて決定されます。ここでやりたいのは、様々な開始条件を調べることです。JMPには、これらの開始条件をグリッドサーチで探索できる非常に便利な機能があります。このグリッドを定義する必要がありますが、私はタイピングと会話を同時に行うのが苦手なので、タイピングすることにします。話しているのが聞こえるかもしれませんが、ただ独り言を言っているだけです。とにかく、設定が必要です。
1から10まで3ステップで進みます。これは大きい方で、1から100,000までを100ステップで進みます。0から10までを10ステップにしましょう。さて、私のぶつぶつ言うのはこれで終わりです。今また皆さんにお話ししています。設定は完了です。「実行」をクリックすると、JMPはすべての初期条件を評価します。27,000個の初期条件があります。見てみましょう。すべてではありませんが、27,000個あります。任意の行に対して、これらのパラメータの初期条件の組み合わせを取得し、誤差の二乗和を計算しました。これを昇順に並べ替えてみましょう。誤差の二乗和の最大値は145です。まだこれと比べると良くありません。しかし、まだアルゴリズムを実行していないことを忘れないでください。これは初期条件を見つけているだけです。
これが開始時のパラメータです。これをコピーして表の作成は完了です。閉じてください。ここに貼り付けます。これが開始条件です。「Go」をクリックします。収束しましたので、どのようになっているか確認してみましょう。誤差の二乗和が1になっています。前回は128でしたが、今回は1になりました。91と比べて非常に良好です。二乗平均平方根誤差は0.2対2なので、10分の1です。ここで示そうとしたのは、これらのモデルをフィッティングする際の課題ですが、複雑なモデルでは初期条件のグリッドサーチを行わないと、最適解が得られない可能性が非常に高いという重要な教訓があります。
異なるモデルの異なるパラメータを評価し、比較することができます。二乗平均平方根誤差を使用することもできますが、複雑なモデルにはペナルティを課したいので、少なくともソフトウェアでモデル比較統計であるAIC統計量を計算できるようにします。それでは、モデル構築とモデル比較を容易にするソフトウェア、JSLアプリケーションに切り替えましょう。ソフトウェアを起動してみましょう。画面はこんな感じです。まず、新しいプロジェクト名を入力します。「Berlin」としましょう。既にBerlinがあります。「Berlin 2」と名付け、「OK」をクリックします。ここに表示されているアイコンはワークフローを表しています。まずは、アプリケーションの概要について説明しましょう。
JMPの機能について考えてみましょう。JMPは、モデルの適合、統計分析、視覚化といった機能を提供します。JSLスクリプトを作成する場合、JMPが面倒な作業をすべて実行してくれるので、こうした機能はすべて比較的簡単に使用できます。このアプリケーションが目指すのは、ワークフロー感覚を提供することです。実行すべきステップがいくつかあります。これらはまだ実行できず、ロックされています。この2つのステップは実行可能であり、推奨されるステップです。JMPはワークフロー、つまり実行すべき一連のタスクを提供するだけでなく、情報も保持します。一度設定すれば、二度と同じことをする必要はありません。一度モデルを適合すれば、二度と適合する必要はありません。
明日でも、来月でも、来年でも、いつでもこのデータに戻って来ることができます。これがこのプロジェクトの目的です。すべての情報は時間の経過とともに保存されます。さあ、始めましょう。最初のステップ、推奨されるステップは、製品を選択することです。ここで私が実際に行っているのは、液体製品か固体製品かということです。専門用語で言えば、液体製品は高分子製品で、錠剤は低分子製品です。私は少し違った考え方をしています。モデリングの観点から考えます。液体はpHに敏感で、例えばワクチンのような液体はpHに敏感です。一方、錠剤は湿気に敏感になる可能性があります。私は錠剤を飲みます。錠剤を飲みますなんて言わなければよかった。そんなことを言ったら笑い出しそうです。
次に、データを割り当てます。必要なデータがあります。これはデータテーブルです。4つの不純物が関連付けられています。アプリケーションに戻ってください。これらのデータを割り当てると、これらのデータを使用するかどうかを確認するメッセージが表示されます。はい、使用します。すると、これらのデータがプロジェクトにコピーされたことが通知され、データテーブルを開いたままにする必要はありません。これらのデータはプロジェクトの一部として保存されますが、物理的にテーブルを見る必要はありません。列マッピングは引き続き実行できるので、これら4つの不純物を取得できます。これが私の回答です。これらがモデルを当てはめる対象です。これらの不純物ごとに複数のモデルを当てはめ、それぞれに最適なモデルを選択します。
列のマッピングを最後にしておきます。それぞれの回答について、仕様を入力します。1%と入力します。つまり、不純物レベルが1%未満であれば、製品は実用可能であるということです。不純物の経時的な変化を見ると、1%レベルを超えた時点が製品の有効寿命となります。さて、最後のステップは、モデルの選択肢を提供することです。これらのデータには8つの異なるモデルが適合しますが、これについては説明しておく価値があります。不純物の時間的変化、つまり時間の経過とともに増加する場合を考えてみましょう。それは直線的に起こる場合もあれば、増加率が鈍化する場合もありますし、増加する場合もあります。これを減速モデルと加速モデルという考え方です。
これらのモデルを表現する方法はいくつかあります。マウスをなくしてしまいました。よし、モデルオプションに戻りましょう。モデルの種類は8つあります。これらのモデルには、温度と水分活性を表す式や項が含まれています。水分活性は相対湿度または絶対湿度のいずれかで表現できます。合計16種類のモデルバリアントがあります。デモ用に、モデルバリアントは8種類だけ用意し、相対湿度を含むものだけを見ていきます。もうすぐ終わりです。あと1つあります。データ自体は、ストレスのかかった保管条件です。標準的な保管条件、つまり摂氏25度、湿度65%を提供する必要があります。
これでプロジェクトの設定作業は完了です。これで運動学モデルのフィッティングを進められます。ご要望にお応えして、自動フィッティングを選択して「OK」をクリックするだけで、すべてのモデルをフィッティングし、モデル選択もすべて自動で行われます。しかし、モデル選択の難しさをしっかりと理解していただきたいと思います。自動で行っても、何の洞察も得られません。まずは、これらの不純物のうち1つについて個別に実行してみましょう。不純物ごとに、あるいは今回は不純物1についてのみ実行しますが、適切なモデルを見つけるための3段階のプロセスを実行します。最初のステップは、モデルのフィッティングです。これは、これらのモデルを順番にフィッティングしていきます。完了すると、これらのモデルがフィッティングされたことを確認するダッシュボードが表示されます。
最終ステップは、これら8つのモデルから1つを選択することです。しかし、中間ステップとして、何らかの候補リストを作成しておくと便利です。次のステップでは、その候補リストを作成します。ソフトウェアは信号システムを提供することで、この作業を容易にします。緑のゾーンにあるモデルは最も可能性の高いモデルです。黄色のゾーンにあるモデルは可能性が低く、赤のゾーンにあるモデルは破棄できます。このモデルについては、妥当性チェックを行うことができます。最も優れたモデルは減速モデルです。不純物が時間の経過とともに減速しているのであれば、加速しているわけではありません。したがって、加速モデルを破棄できるのは理にかなっています。
ソフトウェアはそのようなロジックを使用していません。もしかしたら、実際には、あるいはそのようなインテリジェンスがあるべきなのかもしれません。ソフトウェアはコールド統計を使用しています。AIC統計量を計算しています。これは、モデルの複雑さに応じてペナルティを課すモデル比較統計量です。JMPはこれを様々な場所で使用しています。JMP全体で使用されているものです。非線形プラットフォームでは実際には使用されていませんが、ソフトウェア内で計算できます。緑色のゾーンにある2つのモデルに焦点を絞ります。これらを削除します。私のショートリストは上位2つのモデルになり、これで好みのモデルを選択できます。少なくとも、最終的な選択を行うための詳細な情報がソフトウェアから提供されます。
今はこの2つのモデルに焦点を絞っています。統計値自体は、この段階ではグリーンゾーンにあるモデルを区別できないため、あまり役に立ちません。R2乗や二乗平均平方根誤差などを見ると、これらの数値はほぼ同じです。私ができることは、それらの数値に気を取られないように、それらを閉じてしまうことです。いくつかの診断プロットに注目してください。私は異なる診断プロットを見ることができ、選択した2つのモデルの診断プロットを見ることができます。私が試みたことの一つは、ソフトウェアに生活の質(QOL)機能を取り入れることです。便利だと思うことの一つは、実際にこれら2つのモデルを並べて見ることができることです。これで、このリストの最初のモデルができました。いわば、最も良いモデルが左側に、もう1つのモデルが右側にあります。
私たちが何を見ているのか、はっきりさせておきましょう。実際のデータポイントと予測データポイントです。完璧なモデルであれば、すべてのデータが45度の赤い線上に位置するはずです。これは、モデルがデータ予測においてどれほど優れているかを示すだけでなく、2つのモデルを比較することも可能にします。ここで皆さんが驚かれるのは、これらが完全に同じであるという事実です。非常によく似ています。私はこれを見るたびに、ソフトウェアにバグを作ってしまったのではないかと思ってしまいます。実際には異なるグラフをお見せしているわけではないのですが、実際には異なっています。このデータポイントは赤い線上にあり、赤い線から外れています。これらは異なるグラフですが、非常に似ていることがわかります。これがモデル選択の難しさです。ここで非常によく示されています。
別のグラフを試してみましょう。残差の正規確率プロットを見てみましょう。残差が直線になることを期待します。この例では、左側のグラフの方が右側のグラフよりも明らかに優れています。左側のグラフは統計量も最も優れています。この時点では、統計量が最も優れたモデルを採用すべきだと考えています。統計量と診断量が最も優れたモデルを採用すれば、おそらく仕事を失うことはないでしょうから、それで問題ありません。しかし、これらのモデルをどのように使用するかについても考える必要があります。予測プロファイラーを見ることができます。予測結果が同じであることは既に確認しています。これらのプロファイラーは同じ結果、あるいは少なくとも私たちが持っているデータの範囲では同じ結果になるでしょう。しかし、私たちはこれらのモデルをそのような方法で使用しません。
まず最初に予測プロファイラーについてご説明しましょう。おそらく温度と相対湿度が表示されることを期待されているでしょう。これらはドロップダウンリストにまとめられています。ここでは時間経過に焦点を当てています。では、何をしたいのでしょうか?温度を通常の保管条件である摂氏25度、湿度65%に戻します。次に、これらの時間コンポーネントを延長します。これもまた、品質向上のための重要なポイントです。これらのグラフを外挿してみましょう。劇的な違いが分かります。これらのモデルを外挿すると、どちらのモデルも減速を示していますが、左側の減速の方がはるかに急激です。
この結果を見てみましょう。まず右側のモデルを見てみましょう。これはモデルが線を横切るポイントです。この線はこの時点での仕様閾値です。しかし、ここで注目すべき点はそこではありません。寿命をモデル化する際に、実際には信頼限界の上限とそれがどこで横切るかに注目します。そこが私たちが注目するポイントです。300日強です。左側では、600日弱です。これらの数値は非常に重要で、ソフトウェアで計算され、ここに表示されています。しかし、これらの数値がどこから来ているのか、そしてモデル選択においてどれほど重要であるかを理解していただきたかったのです。なぜなら、異なるモデル間で異なる意味のある統計値は、多くの場合、これらの数値だけであることがわかるからです。では、どうすればよいでしょうか?では、なぜモデリングを行うのかを考えてみましょう。
この製品の保存期間をお伝えしたいわけではありません。もし知りたいなら、温度管理されたチャンバー内の棚に2年間置いて、どうなるか見てみてください。私たちがやろうとしているのは、この製品が早期に故障する可能性を調べるための、ある種のリスク評価を行うことです。つまり、300日後に故障する可能性があるということです。実際にはそうではないかもしれません。左側のモデルは正しいかもしれません。寿命は600日かもしれません。しかし、私はリスク回避的なアプローチを取りたいと思っています。おそらく2番目のモデルを選択し、その理由を説明するでしょう。グリーンゾーンのモデルに基づいてリスクベースのアプローチを採用していると説明すれば、何らかのテキストが表示されます。
もしそれに満足できないなら、科学的判断に基づいた結果だと言ってもいいでしょう。あるいは、単に「気に入った」と言ってもいいでしょう。しかし、何らかの説明を加えることもできますし、統計的に最も優れている左側のモデルを採用するかもしれません。最終的にはどちらかを選ぶことになりますが、私はこれが合理的な選択、つまりリスクに基づく評価だと考えています。私はこれを採用することにします。これで、この不純物に対するモデル選択が完了しました。この手順を全ての不純物に対して実行できます。概要をお見せすると、不純物1の3つのステップが完了したことがわかります。他の3つについても同じ手順を実行できます。手動で行うことも、自動適合機能を使って不純物1の3つを自動適合することもできます。
これをやると、数分間画面を見つめ続けることになります。その代わりに、別のプロジェクトに切り替える方法をお見せしましょう。別のプロジェクトを選択すると、これは同じデータです。唯一の違いは、4つの不純物すべてが自動フィッティングされていることです。出力がどのようになるか見てみましょう。自動フィッティングボタンをクリックすると、次のような出力が表示されます。まず、不純物1にオレンジ色のボタンが表示されます。ソフトウェアには多くの信号システムがあります。他のものはすべて緑色です。このオレンジ色のボタンは何を示しているのでしょうか?これは、モデル選択に何らかの曖昧さがあったことを示しています。なぜなら、この2つのモデルは選択できましたが、他のモデルには曖昧さがないからです。
他のモデルでは、統計値が最も小さく、最も優れた統計値を持つモデルを選択しました。一方、こちらはCI違反期間に基づいて選択しました。これらの期間が表示されています。これは先ほど見た311という数字です。アイコンをクリックして、マウスを合わせると、推定値が311から569の間であることがわかります。さらにクリックすると、信号機システムが表示され、この数値に対する最悪の推定値を持つ2番目のモデルが選択されたことが示されます。ただし、必ずしもそうとは限りません。ここでは、保存期間が非常に短いです。緑色のアイコンが表示されていますが、これは推定値の範囲が非常に一貫していることを示しています。緑色のゾーンには4つのモデルがありますが、すべてほぼ同じ数値を予測しています。そのため、統計に基づいて最適なモデルを選択できます。
モデル間の挙動の一貫性に基づいて、様々な決定が下されます。最終的に、全てのモデルをフィッティングし、それぞれの不純物に適したモデルを選択するプロセスを経て、これらを単一の製品に当てはめました。そして、これらを用いて分析を行うことができます。例えば、これらのモデルをダッシュボード形式でまとめ、様々なモデルを比較検討することができます。様々な保管条件をテストすることも可能です。これが分析の一例です。もう一つの方法として、この運動モデルを保管モデルに適用し、製品を保管できる様々な種類の容器を検討することも可能です。
ここでお話しした内容をまとめたいと思います。まず、加速安定性試験から得られたデータから始め、製品に負荷をかけました。私がお話ししてきた製品は医薬品、つまり錠剤です。不純物の進化をモデル化することができ、これらの速度論モデルを構築することができます。非線形プラットフォームを用いてこれらのモデルを生成する仕組みについて説明し、このプラットフォームを使用する際の課題についてもいくつか説明しました。さらに、JSLアプリケーションを用いてモデルフィッティングを自動化し、モデル選択プロセスを容易にする方法についても説明しました。さらに、包装製品についても考えてみてください。本日のプレゼンテーションはこれで終わりです。ありがとうございました。