無料体験講座

カーブフィッティングについてわかりやすく解説

カーブフィッティングについてわかりやすく解説
params[0]には最高次の項の係数が入っています。 numpy.polyfitによるフィッティング結果

カーブフィッティングについてわかりやすく解説

TechEyesOnlineの用語集です。
計測・測定に関連する用語全般が収録されており、初めて計測器を扱う方でも分かりやすく解説しています。
フリーワード検索をはじめ、カテゴリー、索引から簡単にお調べいただけます。

フリーワード検索

カテゴリー検索

カーブ・フィッティング

(Curve Fitting)機械などの構造物の動的特性の測定では、通常、構造物にハンマーでインパルスを加えて得られるインパルス応答を、FFTで処理して系の伝達関数を求めている。しかし、FFTを用いた伝達関数は、有限の等間隔周波数分解能をもつ離散値データであるため、振幅曲線が急激に変化する固有振動数付近では測定点が非常に少ない。そのため、これから求めたナイキスト線図は理想的な円軌跡とはならないので、正しいピーク値、固有振動数などのモーダル・パラメータを得るためには、この等間隔データ間を補間しながら計算する、曲線あてはめ(カーブ・フィット)が必要である。カーブ・フィッティングと呼ばれる手法は、伝達関数の解析式を想定し、この式中の固有振動数、減衰比、振動モードなどのモーダル・パラメータを適当な値にすることにより、実測された伝達関数とモデルの伝達関数をできるだけ近似させるようにするものである。これは、モーダル解析において、構造物の動的応答を理論的に決定づけるものである。実際のカーブ・フィッティングでは、まず測定して得られた離散系の複素伝達関数の実数部と虚数部を用いて、複数個の点をナイキスト線上にプロットする。次に、これらの点との誤差が最小になるような、理論上のナイキスト線図を算出し、このナイキスト線図から改めて伝達関数を計算して求め、測定した伝達関数にこれをフィットする。測定された伝達関数のカーブ・フィッティングには、主として2つの方法が用いられる。各振動モードのピークが離れていて、相互に影響を及ぼさない場合には、1自由度系のカーブ・フィット(SDOF:Single-Degree-of-Freedom カーブフィッティングについてわかりやすく解説 curve fit)が使われる。一方、隣接する振動モードの特性が互いに重なり合った場合には、多数の振動モードの影響を考慮する必要があり、伝達関数を解析的に表現している多数のモーダル・パラメータを、測定された伝達関数に同時に適合させる計算アルゴリズムが要求される。この方法は、多自由度系カーブ・フィット(MDOF:Multi-Degree-of-Freedom curve fit)と呼ばれている。(小野測器の「FFT解析に関する基礎用語集」より)カーブフィッティングについてわかりやすく解説

pythonでゆるふわカーブフィッティング

f:id:saefro:20181212153047j:plain

irisデータの直線フィッティング結果

3. 関数形が非線形の場合

3-0. 準備 (Newton法について)

Gauss-Newton法、Levenberg-Marquardt法の解説に移る前に、まずNewton法について簡単に述べておきます。
まず関数が2次関数である時、以下のような形式で書き表す事が出来ます。
$$
f(\textbf) = \frac \textbf^T H \textbf + c\textbf + c_
$$
この時
$$
\nabla f(\textbf) = H\textbf + c
$$
となることから、停留点はのみであり、Hが正定値であればこれが最小解となります。
したがって2次関数に対して、ヘッセ行列Hが正定値であれば最小解を簡単に求めることが出来ます。

Newton法とは、元の関数のテイラー近似と上で述べた性質から最小解を求める方法です。 カーブフィッティングについてわかりやすく解説
まず一般の関数を下のように2次の項までテイラー展開します。
$$
\tilde(\textbf) = f(\bar<\textbf>) + \nabla f(\bar<\textbf>)^T (\textbf-\bar<\textbf>) + \frac(\textbf-\bar<\textbf>)^T H (\textbf-\bar<\textbf>)
$$
ヘッセ行列Hが正定値のとき、の最適値は
\begin
\textbf &= \bar<\textbf> - H^\nabla カーブフィッティングについてわかりやすく解説 f(\bar<\textbf>) \\
&= \bar<\textbf> - H^ \textbf
\end
となります。
したがって、は関数の最適値の良い近似解になることが期待され、Newton法ではこの考え方を用いて現在の点をに移動させることを繰り返すことにより、最適値を求めます。
今回のようにフィッティングパラメータを求める場合、以下のような漸化式によってパラメータを更新していきます。
$$
\textbf^ = \textbf^ - H^ \textbf
$$
Newton法は最急降下法などと比較して解周辺での収束が速いという特徴がありますが、ヘッセ行列とその逆行列の計算負荷が大きい、ヘッセ行列が正定値であることを仮定しているなどの欠点があり、一般の非線形最小二乗法問題ではあまり実用的な方法であるとは言えません。

3-1. Gauss-Newton法

カーブフィッティングについてわかりやすく解説 カーブフィッティングについてわかりやすく解説 カーブフィッティングについてわかりやすく解説 カーブフィッティングについてわかりやすく解説 カーブフィッティングについてわかりやすく解説 カーブフィッティングについてわかりやすく解説
i 1 2 3 45 6 7
[S] 0.038 0.194 0.425 0.626 1.253 2.500 3.740
v 0.050 0.127 0.0940.2122 0.2729 0.2665 0.3317

f:id:saefro:20181213154522j:plain

フィッティング結果(左)とS(a)の変化(右)

f:id:saefro:20181213154216j:plain

もう一つ例をやってみます。
の式で表されるガウス関数(期待値, カーブフィッティングについてわかりやすく解説 標準偏差, )に[-0.05, 0.05]の一様分布に従う誤差項を付与したデータを生成し、これをガウス関数でフィッティングする事を考えます (ちなみにこのデータを生成するコードはLevenberg-Marquardt法のところで載せるものと同じなのでそっちを参照してください)。
初期値を, , として与え、先ほどと同様に計算すると、以下のようにフィッティングできます。 Gauss-Newton法によるガウシアンフィッティング結果()

f:id:saefro:20181213155322j:plain

先程の例では期待値の初期値として正確な値を与えましたが、これを変化させて、初期値を, , として与えてみます。 Gauss-Newton法によるガウシアンフィッティング結果() 完全に発散していますね.

f:id:saefro:20181213164503j:plain

Gauss-Newton法では、下式のような2階微分項を無視するという近似を行っています。
$$
\|r_ \frac<\partial^2 r_> <\partial a_\partial a_>\| Levenberg-Marquardt法によるガウシアンフィッティング結果() Gauss-Newton法で発散した条件でも、このように改良を加える事によってフィッティングできていることが分かります。

4. ライブラリの紹介

4-1. numpy.polyfit

多項式でカーブフィッティングしたい時には、numpyのpolyfitが簡単で便利です。
データ(x, y)を2次関数でフィッティングしたい場合、フィッティングパラメータを1行のコードで求めることが出来ます。

f:id:saefro:20181214113936j:plain

params[0]には最高次の項の係数が入っています。 numpy.polyfitによるフィッティング結果

4-2. scipy.optimize.curve_fit

scipy.optimize.curve_fitでは、自分で定義した関数を用いて簡単にフィッティングが行えます。
自分で定義した関数をscipy.optimize.curve_fitの第一引数に渡すと、最適なフィッティングパラメータとその共分散行列*3がタプルで返ってきます。
先ほど扱ったガウシアンフィッティングの例でやってみましょう。

f:id:saefro:20181214013130j:plain

scipy.optimize.curve_fitによるフィッティング結果

4-3. lmfit

,最後にlmfitを紹介します。
lmfitはscipy.optimize.curve_fitのように自分で定義した関数を用いてフィッティングすることもできますが、主要な関数形のクラスがあらかじめ定義されているので、それらを呼び出すだけで良いので関数形を自分で定義する必要がない場合には非常に便利です。また、フィッティングパラメータに制限をかけるなどの操作が簡単に行えるというメリットもあります*4。
ではこのlmfitを用いてNISTのスペクトルデータ*5のフィッティングを行ってみます。
このデータは exp関数の上にガウシアンが2つ乗っているような比較的複雑な形をしていますが、 lmfitを使えば簡単にフィッティングが行えます。

f:id:saefro:20181214020905j:plain

lmfitによるフィッティング結果

株式会社ダイナコム 未来へつなぐコミュニケーション

tech010_01

MCMCの良いところは、自分の思いを事前情報分布として数値にしてモデルに与えれば、その範囲で探してくれる点です。MCMCのソフトウェアとしては、プログラミングや確率統計の知識を必要としますが、WinBUGSやOpenBUGS、 JAGSなどのフリーソフトがあります。
これらのソフトでは、まず、(1)フィッティングしたい関数の統計モデルを定義し、(2)各パタメータの事前分布に自分の思っている程度の制約を与え、(3)予測したい領域を”NA”という欠測値にした尤度関数を得るための計測データを渡し、(4)得られた事後分布からサンプリングを実行することで尤もらしいフィッティング結果を返してくれます。結果がふらついて収束しないときには、かなり恣意的になりますが、事前に得られている知識で、どの程度のパラメータの範囲になるか期待される値とその範囲を狭くして与えてしまいます。「それでは手書きと同じだ」というご指摘はごもっともです。でも全てのパラメータを与えて曲線を一本描くのとは違い、特定のパラメータに対して精度の良い事前情報分布を与え、その他のパラメータは無条件事前分布に近い感じで収束するまでBUGSにおまかせという方法が取れます。一つでも恣意的であれば十分全部が恣意的かも知れませんが、気持ちだけ、少し数学的な配慮が効いたもので、データに合致した曲線が得られます。ここでは、お絵かきソフト替わりと思って記載しておりますのでそのレベルでお許しください。

tech010_02

ここで、どちらの関数の当てはまりが良いか見てみたいと思います。BUGSソフトウェアの場合、DIC(Deviance Information Criterion)という情報量規準で簡単に当てはまりの良さを評価することができます。情報量規準を用いた評価は、必ずしも残差が小さいだけで選ばれるわけではなく、推定するパラメータの数も考慮して適合性の良いモデルを選ぶことができる点です。上記ではBUGSソフトとしてJAGSを用いました。ガウス分布関数の場合は、単に平均と分散だけでなく、全体のオフセット分や振幅もフィッティングしています。また、ロジスティック関数もオフセットと振幅やX軸方向の位置や立ち上がりの傾斜などを決めるパラメータを推定しています。そのため、実効的なパラメータ数を表すpenaltyもそれなりに大きくなります。DICで評価した結果は、ガウス分布関数モデルでPenalized deviance: 62.46という結果でした。一方ロジスティック関数でもほぼ同じ程度の値Penalized カーブフィッティングについてわかりやすく解説 deviance: 63.58でした。情報量規準では、小さい方を選択することになりますが、この場合差は小さく、どちらをとってもそれほど変わらずという感じです。もちろんここでは、与えられたデータの範囲でどうか当てはまり具合を見ただけですので、むしろ得られたデータソースの性質から最終的なモデルを決めることになると思います。
あまり意味が無いのですが、たとえば、図3に示すようにかなり短い線分(図1の上のほうの一部分)に対してもフィッティングできます(一応DICを使ったモデル比較もしてみました。Penalized devianceが直線モデル(青)は41.9で、ガウス分布(赤)が34.97でした。この線は全体的には曲がっているからか、ガウス分布の方がモデルとして良いという結果でしたが、あまり深い意味はありません)。

標準曲線による補間

Prism8_標準曲線による補間_1

WelcomeダイアログのNEW TABLE & GRAPHより XY を選択します。ここではサンプルデータを使用しますので、Data table: から Start with sample data to follow a tutorial を選び、Select a tutorial dataset: から Correlation & regression (linear and nonlinear) リストにある RIA or ELISA - Interpolate unknowns from sigmoidal curve を選択します。

2. データの確認

Prism8_標準曲線による補間_RIA_ELISA_データの確認

先頭の 7 行は、2回の繰り返し測定試験で得た標準データ (標準曲線を求めるためのデータ) です。その下に未知データが 3 件あります。Y の測定値だけで、X は空になっています。この分析の目標は、補間によりこの未知データの X 値 (濃度) を得ることです。なお、4 件の未知データのうち 3 件には行見出しをつけて、後で結果を照合できるようにしてあります。なぜ X が負値になっているのでしょうか。この例の場合、X 値は濃度 (モル単位) の対数です。したがって、1 マイクロモル (10-6モル) ならば「-6」と入力することになります。

3. グラフの表示

Prism8_標準曲線による補間_RIA_ELISA_グラフ1

データシートのデータを反映したグラフが自動生成されます。ナビゲーターのGraphsにあるRIA data をクリックするとグラフが表示されます。

データ ポイントを表すマーカーの種類や色、軸の見出しはカスタマイズできます。繰り返しデータについては、平均値ではなく個別の値をプロットすることも可能です。未知データは X 値が分からないので、グラフには現れていません。

4. 標準曲線分析の選択

Analyzeボタンをクリックし、XY analysesのリストから Interpolate a Standard Curveを選択します。または、Analyzeボタンの上段の一番右にあるInterpolate a Standard Curveボタンをクリックします。

5.モデルの選択

Prism8_標準曲線による補間_RIA_ELISA_パラメータ1

Parameters:Interpolate a Standard Curveダイアログでモデルの選択およびパラメータの設定を行います。

Model 項目から Sigmoidal, 4PL, X is log (concentration) を選択します。4PL は "4 Parameter Logistic (4パラメーターロジスティック曲線)"の略で、この種の式の別名になっています。

ここではパラメーターの設定は行いません。Outliers/robustOptionOutputの項目はすべて既定値のままにします。OKボタンをクリックとグラフが描画されます。

6.グラフの表示

Prism8_標準曲線による補間_RIA_ELISA_グラフ2

グラフに平均値とエラーバーを追加する場合は、Format Graphダイアログから行います。グラフをダブルクリックして、Format Graphダイアログを開き、Appearanceタブをクリックします。Style 項目の Appearance から Mean and Error を選択します。

グラフ上に補間により得られたデータポイントを追加する場合も、 Format Graphダイアログから行います。Format GraphダイアログのData on Graphタブを選択し、右側にあるAdd. ボタンをクリックします。Select 項目のリストからInterpolation of RIA data:Interpolated X mean values を選択して下さい。補間により得られたデータポイントがグラフに追加されます。

7. 結果のチェック

Prism8_標準曲線による補間_RIA_ELISA_結果1

ナビゲーターのResultsに Interpolation of RIA data シートが作成されます。

結果シートはInterpolated X mean values タブとTable of resultsタブで構成されています。Interpolated X mean values タブには、補間により得られた値が表示されています。Table of results タブは、カーブフィッティングの結果を表すテーブルです。各パラメーターの最適合値などがまとめられています。

8. 結果の変換

Prism8_標準曲線による補間_RIA_ELISA_結果の変換

結果テーブル:Interpolated X mean valuesタブ の X 列は、補間により得られた値です。単位は X 値と同じ、濃度の対数になっています。これを濃度 (真数) に変換することもできます。

Analyzeボタンをクリックします。Analyzeダイアログの先頭にある Transform, Normalize . の Transforms 選択し、OKボタンをクリックすると、Parameters:Transformダイアログが開きます。Transform X カーブフィッティングについてわかりやすく解説 values にチェックを入れ、リストから変換式として X = 10^X を指定しOKボタンをクリックします。

9. 結果のチェック

Prism8_標準曲線による補間_RIA_ELISA_結果のチェック2

結果シートの X 列はモル単位になりました。列見出しは変わっていないことに注意してください。Prismにはデータ変換に応じて見出しも自動的に調整する機能はありません。列見出しを「Concentration (M)」と編集してください。

接触角(ぬれ性)とは | 研究開発を支援する界面科学測器の専門メーカー:協和界面科学株式会社

よく洗浄された「清浄な」ガラス表面は、水によくぬれます。一方、フッ素コーティングなどで処理された表面は、水をはじきます。このような現象は日常、しばしば経験します。この「ぬれ」の現象は、工学分野だけでなく、自然界も含めて多くの現象に影響を与えています。このぬれの程度を定量化するものが「接触角」(θ:Contact Angle)であり、理化学辞典(岩波書店 第4版)によれば、「静止液体の自由表面が、固体壁に接する場所で、液面と固体面とのなす角(液の内部にある角をとる)」と定義されています

接触角(ぬれ性)

接触角(ぬれ性)

接触角(ぬれ性)

接触角の測定

θ/2法
-A half-angle Method -

接触角(ぬれ性)

接触角(ぬれ性)

接線法
-Tangent Method-

接触角(ぬれ性)

カーブフィッティング法
-Curve Fitting Method-

動的接触角の測定

液滴法(経時変化)
-Sessile Drop Method in time function-

前項の接触角の測定を、連続的に行うことです。 厳密な定義はありませんが、当社では、1秒未満の間隔での経時変化を、動的接触角の1種として扱っています。 吸収や揮発の状況を追うという目的にも使用できます。

拡張/収縮法
-Extension/Contraction Method-

滑落法(転落法)
-Sliding Method(Measurement on a slope)-

滑落法(転落法)

Wilhelmy法(プレート法、垂直板法)
-Wilhelmy method (plate method or vertical plate method)-

測定子(プレート)が液体試料の表面に触れると、液体が測定子に対してぬれ上がります。このとき、測定子の周囲に沿って表面張力がはたらき、測定子を液中に引き込もうとします。この引き込む力を読み取り、表面張力を測定します。このとき、測定子(プレート)に対する液体の接触角が0°である材質のプレートを使用する事により表面張力を求めることができます。プレートの材質としては白金が一般的です。 一方、Wilhelmy法(接触角測定)でも、吊り下げた固体試料を液体試料に接触させ固体試料が引き込まれる力を測定します。 Wilhelmy法(表面張力測定)との違いは、固体試料と液体試料の接触角が介在することで、引き込まれる力はその液体が持つ表面張力より小さくなります。この力の衰退と表面張力の関係から接触角を算出しています。

Wilhelmy法(プレート法、垂直板法)

Wilhelmy法(プレート法、垂直板法)

Wilhelmy法(プレート法、垂直板法)

θ :固体試料と液体試料との接触角(表面張力測定の場合は0°が前提)
F :測定力(固体試料にはたらく力)
S :固体試料の断面積
h :固体試料の浸漬距離
ρ :液体試料の密度
g :重力加速度
L :固体試料の周囲長(既知でなければならない)
γ :表面張力(接触角測定の場合は既知でなければならない)

関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる