細胞培養はバイオ医薬品の製造において重要な役割を果たします。実験計画法(DOE)の一環としてプロセス変更を導入する場合、細胞培養プロセスの挙動を正確にモデル化することは困難です。なぜなら、プロセスには相互に依存する複数の増殖段階と生産段階が含まれており、プロセス変更の影響を受けるのはそのうちの一部に過ぎないからです。従来のパラメトリック非線形モデルでは、この複雑さを効果的に捉えることが困難であり、ノンパラメトリックモデルのみでは、モデルが断片化され、DOEパラメータとの相関関係を検証することが困難になる場合があります。
この問題に対処するため、機能的DOEは複雑性を主成分へと単純化し、変化をDOEパラメータと相関させます。このアプローチにより、小規模データから細胞培養パラメータを最適化し、それを用いて大規模生産における挙動を予測できる予測プロファイラの作成が可能になります。このプロセス全体はJMP Proの機能データエクスプローラプラットフォーム内で実行でき、細胞培養プロセスの最適化のためのより効率的なアプローチを提供します。
本日は、関数DOEを用いて複雑な非線形細胞培養プロセスをモデル化するユースケースについて解説します。まず、モデル化しようとしている細胞培養プロセス、つまり連続生産プロセスについて説明します。このモデリングの目標は2つあります。1つは定常状態を維持すること、そしてもう1つは小規模データに基づいて大規模な挙動を予測できるかどうかを確認することです。
次に、私が行ったモデリングの基本関数である非パラメトリック スプラインについて説明し、この場合、スプラインと主成分を使用してモデリングするプラットフォームである Functional Data Explorer を紹介します。
2つの目標に対応する2つの異なる回答、そしていくつかの異なる種類のスプラインフィッティングとDOE条件の組み込み方法について解説します。最後に、ジョイントプロファイラーの生成方法、そして調査結果のまとめと考察、そして私が直面した課題についても触れます。
私たちがモデル化しようとしているのは、連続生産と呼ばれるものです。生物製剤の標準的な製造方法はバッチ生産です。そのためには、細胞を培養し、その生産性を最大化します。そして、細胞はある時点で代謝的に枯渇し、死滅期に入ります。その後、バイオリアクター内の全ての物質(死細胞だけでなく、対象となる薬剤や分子も含む)を回収し、必要に応じて処理します。
私たちが目指しているのは、そして業界の多くの人々が目指しているのは、成長して枯れて一回限りの生産を行うのではなく、自動車産業など他の産業のように、継続的に材料を生産できるかどうかです。
そのためには、もちろん細胞を増殖させつつ、成長曲線の5番目にあたる定常期を維持し、6番目にある死滅期を防ぐ必要があります。そのためには、バイオリアクターの規模は小さくなるかもしれませんが、常に新鮮な栄養素などを含む新しい培地を供給し、同時に同量の液体を排出する必要があります。理論上、その液体には目的の薬剤が含まれているはずです。目標は、新しい培地を安定的に供給し、生産したい分子が浸透していく状態を維持することです。
安定した生産を維持することに加え、2つ目の目標は、小規模な生産に基づいて大規模生産でどのように物事が進むかを予測できるようにすることです。小規模では様々な反応炉を稼働させ、様々な条件を導入できますが、大規模では物流、時間、資金の制約から、実際にはそうすることができません。小規模から大規模までを予測できるだけでなく、異なる要因や条件を加えることで大規模生産にどのような影響が出るかを把握したいと考えています。
生産段階におけるもう一つの興味深い点は、異なる段階があるため、異なる時点で条件を導入できる可能性があることです。成長段階は常に同じ対照群、おそらく大規模実験と同じ対照群で行われますが、その後、時間要素を含む様々なDOE因子を追加します。Functional Data Explorerを使用してこれをどのように実現したかについて説明します。
まずスプラインを紹介します。これは私たちが行っていたモデリングの基礎です。当初は、いくつかの段階でパラメトリックモデリングが使えるかどうかを検討していました。成長段階にはロジスティック指数関数を使うこともできたかもしれません。しかし、規模の効果やDOE(実験計画法)を異なる時期に導入すると、必ずしもすべてを捉えられるわけではありませんでした。なぜなら、一部の生産物は成長してその後枯渇する可能性があり、また一部の生産物は成長して安定する可能性があるからです。私たちが見つけたパラメトリックモデルでは、これを完全には捉えることができませんでした。
今回はより柔軟なもの、つまりスプラインを使いたいと考えました。スプラインとは本質的に、データの節点間に単純化された関数を当てはめるものです。スプラインを当てはめる際には、いくつかの選択を行う必要があります。まず、いくつの節点に当てはめたいか?一般的に、節点の数が多いほど、モデルはデータに近づきますが、これは良いこともあれば悪いこともあり、過剰適合につながる可能性があります。次に、適合度も重要です。各節点の間は直線にしたいですか?曲率を持たせたいですか?それとも階段関数にしたいですか?
次に、Functional Data Explorer で P スプラインを生成するような特定の種類のスプラインに、スムージング関数を追加できます。各ノットで各スプライン間のスムージングを行うので、例えば線形スプラインの場合、このような急激に途切れた線が得られます。
Functional Data Explorer には、B スプラインと P スプラインという 2 つのスプラインオプションがあります。Functional Data Explorer には他にも波動関数などのオプションがありますが、今回のケースでは必ずしも当てはまりませんでした。しかし、一般的な経験則として、より単純な回帰スプラインである P スプラインは、滑らかな関数のモデリングに適していることがわかりました。P スプラインは、ノイズの多い波打つ関数に適しています。なぜなら、P スプラインはノイズの一部を滑らかにしてくれるからです。これは一般的な意見です。P スプラインではオーバーフィットする可能性があり、B スプラインではアンダーフィットする可能性もありますが、これらはあくまで一般的な経験則です。
この場合、使用しているプラットフォームはFunctional Data Explorerです。プラットフォームの実際の外観を示す画像をいくつか持っています。一般的に、機能データとは連続領域にわたって記録されたデータです。今回の場合、それは時間であり、バッチは時間の経過とともに生成されます。他にも様々なものに対応します。例えば、スペクトルデータに使用されているのを見たことがあります。次に、一連の測定値を識別したいとします。今回の場合、それは異なるバッチとして識別されるため、バッチごとに個別のフィッティングが行われます。
もう一つの便利な点は、後ほど詳しく説明しますが、補助的な要素を追加できることです。これらはDOE要素、つまり外部から入ってくる情報によって、捉えたい形状が変化する可能性のある要素を追加できます。その仕組みについては、プレゼンテーションの後半で詳しく説明します。
当初は、どのタイプのスプラインが最適か確信が持てませんでした。必ずしも明確なルールが見つからなかったからです。最初は両方を使ってモデリングしました。Functional Data Explorerでモデリングする場合、最適なモデルを見つける方法は数多くあります。今回はBIC最小化を用いました。クロスバリデーションなども使用できます。今回は、補足的な要因を導入したため、テストデータセットとトレーニングデータセットの定義が少し難しくなりました。そのため、今回はBIC最小化を採用しました。
2種類のスプラインの結果が表示されています。この赤い線は、それぞれの平均近似値です。かなり似ていることがわかりますが、到達方法が異なります。Bスプラインはノット数を少なく(この場合は13)、3次関数を推奨しているため、ここで見られるような曲率が少し加わっています。
Pスプラインは、基本的に毎日ノットを持つことを推奨しました。30日間ありますが、各日の間には29ノットあります。そして、すべてのノットで平滑化を行いました。これにより、線形近似を使用しながらも、平滑化を導入することで曲率を得ることができました。最初の部分ではかなり似ているのが分かります。最後の部分では、いくつかのバッチでデータが欠落している可能性があり、多少の違いがあるかもしれません。
次に、個々のフィッティングを見て、最後に見られる差異の原因を探ります。ここでは、同じバッチセットについて、バッチごとの実際のスプラインフィッティングを示しています。ここでも、平均関数で見たのと同様のことが見られます。つまり、開始部分は互いにかなり似ており、中間部分も互いに似ていますが、Bスプラインフィッティングの生成の終わりには、方向が急激に変化することが時々見られます。これは現実世界では予想されないことです。
一般的に、細胞は一度死滅すると、魔法のように復活して再び増殖を始めるわけではありません。これは、すべてのバッチで30日目のデータが必ずしも得られなかったことによる影響のようです。Bスプラインは3次関数を使用していたため、必ずしも意味をなさない予測をしていました。一方、滑らかな線形関数を使用するPスプラインでは、データが欠落している場合でも、バッチ終了時に期待される結果に少し近づきました。これはPスプラインの方がより適合性が高いことを示唆していましたが、それでも確認するために両方を試してみたかったのです。
関数データエクスプローラーでは、全てのバッチのフィッティングデータを取得すると、平均関数が生成されます。これは、全てのバッチのフィッティングデータの平均です。そして、「平均関数から大きな変動要因はどこから来ているのか?」を調べます。
数枚前のスライドを覚えているでしょうか、大きな扇状分布が見られました。戻ってお見せしましょう。この大きな扇状分布が見られます。ここはかなりタイトな状態ですが、最後に大きな扇状分布が見られます。これが私たちが探ろうとしているものです。もちろん、変動の70%から80%を表す最初の形状関数を見てみると、成長期の初期はほぼ平坦ですが、その後、最後にこの変動が見られます。これは予想通りです。実際、これは私たちがモデル化しようとしている安定期と言えるでしょう。安定してから上昇するため、この安定期を表しているように見えます。これは平均関数で見られるような下降とは対照的です。
ここでは両方とも形状関数でそれを捉えていますが、P スプラインの場合は上昇して安定していますが、B スプラインの場合は上昇して、最後に必ずしも望ましくない小さな低下が見られます。
追加の形状関数は、あまり関心を集めないかもしれないが、それでもモデル化するには興味深いかもしれないものを捉えています。例えば、小さなジャンプ、遷移期の間、成長期と定常期の間、そして終盤の急降下などです。しかし、この最初の形状関数こそが、おそらく私たちが最も関心を寄せるであろうものでした。
見つけた形状関数は、平均関数と比較する必要があるため、解釈が少し難しい場合があります。Functional Date Explorerの優れた点の一つは、他の主成分分析と同様にスコアプロットを提供できることです。そのため、各バッチをフィッティングし、各主成分におけるスコアがどの程度高いか低いかを示すので、どの主成分が形状関数1で高く、どの主成分が形状関数1で低いかが分かります。
そこから、ここで起こっている形状変化が何なのかを理解するのに役立つ例を見ることができます。初期の形状関数で高かったこの特定のバッチは、良好な定常状態を示していましたが、低かったバッチでは、このように増加し、その後減少していることがわかります。
好奇心から、他のものも何をしているのか調べてみました。増殖期と定常期の間に時々発生する隆起を捉えているように見えます。これは条件を変えているためで、生産が少しばらつきが生じることがあります。これは大した問題ではありませんが、最小限に抑えたい部分かもしれません。あるいは、最後に時々発生する減少を捉えているのかもしれません。これは重要かどうかは分かりませんが。もしかしたら、特定のバッチを終了させた際に発生するアーティファクトなのかもしれません。
これを基に、機能的主成分を定義し、形状変化がどこで発生しているかを特定しました。しかし、次に、これらの形状関数を実際に変化させるのは何か、つまり条件を操作することで形状がどのように変化するかを実際に制御できるかどうかを調べたいと考えました。そこで機能的DOEが登場します。
基本的には、各主成分に対して、補足的なDOE条件を用いて回帰分析を行います。モデリングの方法には様々な選択肢があります。今回のケースでは、AIC最小化を用いたベストサブセット分析を行いました。これは、導入する因子が3つだけだったためです。因子数を減らして複雑さを軽減する必要はそれほど大きくありませんでした。また、ベストサブセット分析を行うのにそれほど多くの計算負荷がかかるわけでもありませんでした。これが、私がこれらのすべてのFPCに用いている手法です。ここで注目すべき点は、予測式が出力されていることです。各因子が各形状にどのような影響を与えているかを把握できます。
しかし、繰り返しになりますが、これは必ずしも物事を解釈する上で最適な方法とは限りません。例えば、因子3の係数が最も大きい場合、因子3が最も影響力があると言えるかもしれません。しかし、JMPで私が気に入っている機能の一つはプロファイラーです。実際に何が起こっているかを視覚化できるので、本当に便利です。
この場合、プロファイラーを見ながら、定常期延長の代替として30日目を最大化しました。完璧な解決策ではありませんが、安定期に入ると、30日目でも高い生産量になると考えています。実際、この最適化を行うと、係数が負の値であるため理にかなっているファクター3を最小化することで、ファクター3が非常に高い場合よりも安定した生産量が得られることがわかります。これはお客様にとって非常に役立ちました。「より安定した生産量が得られる条件はここだ」と判断するためのレバレッジポイントを提供したのです。
2つ目の回答は、定常状態を特定したため、大規模スケールで予測できるかどうかを調べることでした。この回答のために用意したデータセットには、制御条件での大規模スケール実行と、制御条件での小規模スケール実行の両方が含まれており、さらに成長後に異なるDOE条件を導入しました。
これを捉えたかったのは、特に成長段階において、小規模から大規模への完璧な変換が不可能だからです。大規模では細胞の成長余地が広く、混合状態が良くなるか悪くなるか、あるいは栄養素へのアクセスがより多くなる可能性があります。大規模では小規模よりも成長が速い傾向があります。私たちは、成長の加速を予測する予測プロファイラーを生成できるかどうか、そしてDOEの影響も適用できるかどうかを確認したいと考えました。
これについては改めて詳しく説明しませんが、応答2でも非常によく似たフィッティングが行われました。応答1のBスプラインで見られたような、最後に奇妙な挙動が見られたため、再びPスプラインが選択されました。形状関数を見ると、これもまた同じです。これは定常状態のものです。しかし、今回の場合、スケールに関してはそれほど関心のあるものではありません。
スケールが、この部分に影響を与えているかどうかを確認したいのです。追加のシェイプ関数があり、これは生産開始時の変化を捉えているように見えます。これが私たちが注目している点です。実際、シェイプ関数3は、成長段階における最も劇的な変化のようです。
繰り返しになりますが、プロファイラーを見るとそれが確認できます。ここにある傾きを見てみると、FPC3が高い場合と低い場合では、高い場合は少し緩やかになり、低い場合はより強いピークが見られます。
次にDOE(実験計画法)に移りたいと思います。これらの主成分に因子と尺度を適用できるでしょうか?主成分3で明らかになった良い点は、有意と判断されたのは尺度のみだったことです。これは、尺度の影響を特定の形状変化にのみ分離できたという点で優れています。尺度は他の主成分にも影響を与えたため完全には分離できていませんが、それでもこの形状は分離されていました。
繰り返しになりますが、プロファイラーを見ることが解釈に最も役立ちます。30日目では、規模による影響はそれほど大きくありません。ほぼ横ばいです。しかし、成長期の7日目を見ると、この違いがはっきりと分かります。大規模な投資が小規模な投資よりも高い値を示しているのです。規模の差を捉えているように見えます。
モデルでは、これら2つの目標を捉えることができました。Functional Data Explorerのもう一つの優れた点は、予測式をデータテーブルの列にエクスポートできることです。そして、通常のプロファイラープラットフォームを使用するだけで、2つの応答(ここではいくつかの因子を共有)を同時に操作できるプロファイラーを作成できます。
これにはいくつか利点があります。一つは、全てをまとめて確認できるという点です。また、JMP Proをお持ちでない顧客やモデルユーザーの場合、Functional Data Explorerにアクセスできない可能性があります。この機能を使えば、通常のJMPしか持っていない人とモデルを共有し、そこから自由に操作することができます。
まとめると、Functional DOE によって2つの異なるモデリング目標を達成することができました。複雑な部分を大幅に簡素化しながらも、異なる条件下でバッチごとに変化する重要な領域を捉えることができました。特定の機能を特定の要因に対して分離することができました。そして最後に、顧客やモデルユーザーと共有するのに非常に便利なプロファイラーを作成できました。なぜなら、最終的にモデルを使用するのは彼らだからです。
いくつか制限があります。毎年JMPカンファレンスで議論されているように、Functional DOEやFunctional Explorerでは予測誤差が提供されないという点があります。予測残差を出力することで、それらの残差に基づいてモデル化することで、ある程度の見通しが得られるのではないかと少し試してみました。今のところあまり成功していませんが、将来的にはどのように実現できるか、ぜひアイデアをお待ちしています。
もう一つ、できれば良いのですが、もしかしたら実際に可能かもしれないのですが、やり方がまだ分かりません。特定の形状関数に対して最適化するという方法です。私の場合は、30日目をプロキシとして最大化するように最適化していました。30日目が高ければ、生産はほぼ安定しています。これは完璧なプロキシではありません。もし、これが生産が平坦な理想的な関数だと仮定して、それに対してどのように最適化すればよいでしょうか?それは役立つでしょう。繰り返しますが、これは既に可能なことなのかもしれません。ただ、私がまだ気づいていないだけです。
もう一つのリスクは、もちろん、柔軟なモデリングにはつきものですが、ノイズの多いデータに過剰適合してしまう可能性があることです。今回のデータは非常に滑らかでしたが、必ずしもそうとは限りません。一般的に、過剰適合のバランスを取りたい場合、クロスバリデーションなどの手法が非常に有効です。しかし、今回は全てを同じ条件で実行していなかったため、テストデータセットとトレーニングデータセットの定義が少し複雑になる追加要因が発生しました。この点については、今後、ぜひご意見をお聞かせください。
しかし、全体としては、必要なことはすべて達成できました。もちろん、これは私一人の力で取り組んだわけではありません。前臨床チームからも多くのデータが提供されました。共著者の方々のお名前もここに記載されており、連続処理の背景知識の理解に大きく貢献してくれました。研究面では、他の統計学者の方々にもご協力いただきました。最後に、これらの方々に感謝の意を表したいと思います。参考文献もいくつか掲載しています。これで私のプレゼンテーションは終了です。