地獄のハイウェイ

科学・技術や趣味のことなど自由気ままに書き散らしています。

科学的探究のレッスン

1.はじめに

 色々なところでダメ科学を見掛けるときに思うことなのだが、そのダメさ加減のかなりの部分がデータの取り扱いにあることは物理や化学といった実験系の精密科学のセンスがあればわかりそうなものだと思う。そういう実験系精密科学のセンスはちょっと勉強したぐらいで身に付くほど簡単ではないとも思うが、それでもそれがどんなものかという理解は科学リテラシーとして持っていた方が良いと思う。自分如きが解説するのも烏滸がましいが、お手本として実験科学でデータ分析が改善されて行く道筋を示す簡単なデモンストレーションを思いついたので書いてみる。

 ここでデモンストレーションとして示すのは、仮想的な化学反応速度論に関するデータの分析である。化学系の学問を修めていれば正解を既に知っていてちょっとシラけるだろうけれど、そこを敢えて仮想的な探求プロセスとして示す。

 まず、2種の2原子分子(例えば水素H2と塩素Cl2)が反応して化合物気体(例えば塩化水素HCl)が生じるような、ある仮想的な気相化学反応を考える。反応式では、

      A2+B2→2AB

と表されるような化学反応であるが、このような反応では通常、反応生成物の生成速度v=d[AB]/dt は、反応物質の濃度(A2の濃度を[A2]と書く)の積に係数を掛けたものになる。

      v[A2][B2] 

ここで係数kは反応速度定数と呼ばれ、温度によって変化することが知られている。

 そして反応速度定数kの温度依存性を実験的に求めた仮想的なデータは次のようなものであったとする。

 T(K)  300  320  340  360
 k  1.65E+08  2.82E+08  4.52E+08  6.89E+08

ここでT絶対温度(℃ではなくKで表される、物理や化学の多くの実験分野では慣習的に室温を300K(約27℃)とすることが多い)、kはその温度での反応速度定数(単位については省略する)。温度が上昇すると反応速度定数が上昇する傾向にあることはすぐに分かると思うが、このようなデータを分析して反応速度定数の温度依存性を議論してみよう。

 

2.衝突頻度説

 気体分子運動論によると分子同士の衝突回数は絶対温度平方根に比例するので、温度が上昇すると反応速度定数が上昇するのは衝突頻度の増大によるとする作業仮説を立ててみる。この仮説が正しければ、kをその温度平方根√Tに対してプロットすれば直線になるはずである。そこでプロットしてみると次のようなグラフが得られる(グラフはExcelで作成)。
 

f:id:katsuya_440:20210509164626p:plain

この例だとデータ点は直線に乗っているように見えなくもない。線形近似(直線)のフィッティングも決定係数R² =0.972と悪くはない。温度が上昇すると反応速度定数が上昇するのは衝突頻度の増大によるものだと結論しても良さそう気がするかもしれない。

 だが、これでデータ分析を終えてしまうのは、典型的ダメ科学のパターンである。上のグラフを見ると、近似直線がk=0になるのは√Tが16.9のとき、すなわち温度でいうとT=285.5K(12.4℃)ということになる。つまり、室温より15度ほど温度を下げてT=285.5Kになると反応が止まってしまうという予測をする羽目になってしまう。「これは何か変だな」と気が付くべきである。

 気体分子運動論によれば、分子同士の衝突頻度は絶対零度T=0K)でゼロになる。それを満足するように、近似式がグラフの原点を通るようにすれば良いはずだが、その場合には、R² =0.828となりフィッティングがすごく悪化してしまう。理論的に正しいと思われる制約を加えると近似が極端に悪くなるようなら、衝突頻度の増大が反応速度定数の増加の主たる要因だとする作業仮説を採用するべきものではない。

 

3.経験式その1:多項式

 衝突頻度説はダメそうなので、とりあえず実験データを虚心坦懐に眺めてみることにしよう。グラフの横軸は√Tではなく素直にTにしてみよう。

f:id:katsuya_440:20210509172532p:plain

 グラフを見ると直線よりは下に凸な曲線で近似した方が良さそうな感じだ。√Tに比例するとした場合には 下に凸ではなく上に凸になるはずなので、衝突頻度説がダメなことはここでも確認できる。そこで2次関数で近似してみるとデータ点がきれいに近次曲線に乗り、フィッティングもR² =0.9999と非常に良好である。少なくとも室温付近から100℃(367.3K)くらいまでの範囲であれば、経験式(empirical formula)あるいは現象論的関係式(phenomenological relationship)としてなら、この2次関数近似は十分成立していると考えて良いだろう。そのような温度範囲の反応速度定数の予測やそれに基づいた反応の制御なんかにはこれで十分であろう。

 しかし、実験データを得た範囲では経験式として十分そうであるとは言え、「反応速度定数は温度の2次関数である」と言うのは早計である。なぜならこの経験式にはちょっと嫌な問題があるからである。この経験式は下に凸な2次関数なので極小があるのだが、計算すると極小になるのは、T=272.2K付近である。つまりこの経験式では摂氏0℃(すなわち273.15K)より少し低い温度からは、kが温度が下がるにつれて増大することになってしまう。得られたデータ範囲より少し温度が低い側でトレンドが逆転するのは何か変だ。更なる実験が可能ならデータを集めるべきだが、ここはもう少し粘ってみよう。

 定義に従うと絶対温度は必ず正の値をとることから、もし2次関数の極小点が絶対零度にあればトレンドが逆転することは防げる。そのためには1次項の係数を0にするのが簡単だ。そこで、kをその温度2乗T²に対してプロットしてみる。

f:id:katsuya_440:20210515134006p:plain

  赤の点線で示したように1次項なしでもフィッティングは悪くない(R² =0.984)。しかし、この近似の場合も衝突頻度説のときと同じような欠陥があって、T=281.8Kになるとk=0になってしまい、室温より18度ほど温度を下げると反応が止まってしまうという予測をする羽目になってしまう。このような事態を避けるためにT=0Kでk=0となるように定数項を0にすると、今度は青の点線で示したようにR² =0.896と途端にフィッティングが悪くなってしまう。

 どうも反応速度定数を温度の2次関数で近似するのは難しいと、判断するのが正しいだろう。2次関数で近似するのは難しいことが分かったが、多項式の次数を上げれば良い訳ではない。パラメーターを増やしていけば、データに合うような近似式を作ることは可能だろうが、明白な理論的根拠もなしにパラメーターをやたらと増やすものではない。フィッティングに使うパラメータの数(n次関数なら定数項を入れるとパラメータの数はn+1個)がデータ点数を超えるのはNGである。反応速度定数と温度の関係を多項式で表すのは難しそうである。

 

4.経験式その2:指数関数

 vs.Tグラフを見ていると、下に凸な単調増加関数が良さそうなのは間違いない。多項式以外の候補としてすぐに思いつくのは指数関数である。ということで今度は指数関数でのフィッティングを試みる。

f:id:katsuya_440:20210516133332p:plain

データ点はきれいに近次曲線に乗り、フィッティングも2次関数のときほどではないがR² =0.997と非常に良好である。この近似式ならkが0や負の値をとることはないし、単調増加関数なので途中でトレンドが逆転することもない。絶対零度k=1.359*105とかなり大きな数値になるのが気になるが、T=300Kのときの値の千分の一未満なので、グラフの書き方次第では、T=0Kに近づくとk=0に近づくように見えなくもない。

f:id:katsuya_440:20210516182516p:plain

 定数項を使えばフィッテイングを悪くさせずに、T=0のときk=0となるようにすることもできるが、4点のデータから、理論的な根拠なしに経験式を導くという課題だと、このあたりが限界なのかもしれないと思う。

 

5.経験式の検証

 実際の科学的な探求であれば、4点のデータではさすがに少な過ぎると判断して、更なる実験を行ってデータを追加するだろう。そこで温度範囲を少し広げるようにして実験データを集めたところ次のようなものが得られた(もちろんここでは仮想的なデータである)。

 T(K)  280  380  400  410
 k  9.01E+07  1.01E+09  1.42E+09  1.93E+09

 新しく得られたデータを既存のデータ(300~360K)に単純に足してデータ点数を増やして経験式のパラメーターを更新することもできるが、もう少し探求のやり方を工夫することもできる。新しいデータは既存のデータの温度範囲300~360Kの外側にデータ点が存在するので、元からあるデータ(温度範囲300~360K)を使って得られた経験式を新しいデータの範囲まで外挿した予測をテストすることができる。機械学習とかそちら方面の方の言い方だと既存のデータをトレーニングセット、新しく得られたデータをテストセットとするようなものだ。一方、うまく行っている経験式を使ってデータ点の間を補間したときに予測がうまく行くのは当たり前なので、テストされるデータの温度範囲がパラメータを求めたデータの温度範囲の中に含くまれていては良いテストにはならない。

 指数関数の場合は、片対数グラフにすると直線にプロットされて見やすくなるので、そうしてみる。

f:id:katsuya_440:20210530140710p:plain

元からあるデータを塗りつぶした丸印、追加データを中抜きの丸印で示した。グラフ中の直線は元からあるデータから求めた経験式である。なんとなく、温度が高い方に行くにつれて、実測のデータが予測よりも下に離れていく傾向が見える。

 縦軸方向の変化は滑らかに見えるので、こういう場合は片対数プロットにするよりも、lnk vs. T グラフで表示して、lnkをのT 関数として扱う方が経験式の検討もやり易い(元のkvs.Tグラフの指数関数は、直線すなわち線形近似で扱える)。例えば、反応速度定数の対数”lnk”Tのα次乗(つまり冪乗)の関数 lnk = A*Tαとして近似するようなやり方が考えられる。

f:id:katsuya_440:20210606113037p:plain

最初の4点のデータから冪乗(Excelの近似式だと累乗)関数でフィッティングしてみると赤の点線で示した線形近似よりは幾分かはましだが、依然として温度が高い方に行くにつれて、実測のデータが予測よりも下に離れていく傾向にある。αが1より小さいのはグラフが上に凸な単調増加関数であることとは合致しているが、α=0.4くらいではうまく行かない。

 

6.逆数登場
 lnkをのT の冪乗 として考えるとしてαが1より小さいという条件を満たせば良いのであれば、αが正の数に限定することをやめて、αが負の値もとれるとしても良いのではないだろうか。Excelを使うならグラフの横軸をTから1/T(つまりTの逆数)に替えてプロットしてやれば良い。

f:id:katsuya_440:20210606113107p:plain

最初の4点のデータ(青丸)から線形近似でフィッティングしてみると、フィッティングが非常にうまく行くだけではなく、近似式のフィッティングには使われていないテストデータである追加の4点(中抜きの赤丸)がしっかりと近似直線の上に乗っていることが分かる。今までにはない成功だ。反応速度定数の対数を温度の逆数に対してプロットするのは、物理化学を学んだ人ならだれでも知っているArrheniusプロットである。ようやく正解*1に到達したわけだ。

 最後のところのグラフの横軸を温度Tからその逆数1/Tに切り替えるのには、ちょっとした発想の転換が必要なので、ここでのデモンストレーションのように簡単にたどり着けるわけではないが、 科学的探究の小さな見本として楽しんでもらえたら幸いである。

*1:種明かしをすれば、数値データはArrhenius式( k=A*exp(-Ea/RT) )ではなく、その頻度因子にも温度依存性を考慮したものを使って計算している。Arrhenius式の解説は色々あるが、歴史的側面に触れた金属学会の「まてりあ」の「アレニ ウス と反応速度論」が面白い。