How to | フィットしたモデルの結果を得る方法
データをモデルにフィットさせる場合,データをフィットした関数と比べるために結果を余分に得ることが重要であることが多い.パラメータの有意性をチェックし,モデルの仮定,データ点の影響,フィットの度合を判断したいことがあるかもしれない.Wolfram言語では,これらの結果をLinearModelFit,NonlinearModelFit,GeneralizedLinearModelFit等のモデルをフィットさせる関数によって返されるFittedModelオブジェクトから直接得ることができる.
data1 = {{1.2, 3.4}, {1.7, 4.2}, {2.8, 6.5}, {4.3, 11.2}, {4.8, 13.8}, {5.9, 19.9}, {7.4, 30.}, {7.7, 31.5}, {8.9, 41.9}, {10.2, 54.3}};LinearModelFitを使って簡単な線形回帰モデルをフィットさせることができる:
lm = LinearModelFit[data1, x, x]出力はフィットさせるデータおよびもとのデータに関する情報を含むFittedModelオブジェクトである.オブジェクトから直接結果と診断を得ることができる.
Normalを使ってフィットしたモデルの関数的形式を与える:
Normal[lm]もとの変数xの関数としてではなく,zの関数としてモデルを評価する:
lm[z]数値で評価すると,xがその数値のときに関数が予測する値を返す:
lm[2.5]FittedModelオブジェクトは関数のように評価するので,Plotを使ってそれを直接プロットすることができる:
p1 = Plot[lm[x], {x, 1, 10}]Showを使ってデータ点のListPlotを前のプロットと組み合せることによって,データ点をフィットした関数と一緒に可視化することができる:
Show[ListPlot[data1], p1]FittedModelオブジェクトは,オブジェクトが表すモデルの型(この場合は線形モデル)に関連する数多くの結果と診断も含む.FittedModelを"Properties"で評価して,そのモデルで使用できる特性の完全リストを得ることができる.
以下ではLengthを使ってこのモデルに既知である特性の数を得る:
lm["Properties"]//Lengthパラメータ推測値が統計的に有意であるかどうか,つまりパラメータ値が0から大きく異なるかどうかをチェックすることが重要であることが多い.例えば,線形モデルにおいて,そのパラメータに関連する
統計の
値を見るという場合がある.
値は,得られた
統計と少なくとも同じくらい0から離れたt統計を得る確率である.
"ParameterTable"をFittedModelで使ってパラメータ推定値,
統計,
値をまとめた表を表示する:
lm["ParameterTable"]別の特性を使って別々に
統計と
値を得ることもできる.これはこれらの特性に基づいて別の結果を計算したい場合に特に便利である."ParameterPValues"をFittedModelで使って
値だけを見る:
lm["ParameterPValues"]特性のリストを入力して,複数の特性を一度に見る.
統計と
値を一緒に見る:
lm[{"ParameterTStatistics", "ParameterPValues"}]lm["ParameterConfidenceIntervals"]デフォルトで95%信頼区間が返される.別のレベルの信頼を異なる区間で得たい場合にはConfidenceLevelオプションを使う.
lm["ParameterConfidenceIntervals", ConfidenceLevel -> .99]以下ではフィットしたモデルの残差を計算しresidsに割り当てる:
resids = lm["FitResiduals"]ListPlotを使って残差を可視化する:
ListPlot[resids]使用できる特性はいくらか異なるものの,非線形と一般線形のモデルの結果と診断も同じ方法で求めることができる.これらの型のモデルは,NonlinearModelFit,GeneralizedLinearModelFit,LogitModelFit,ProbitModelFitのいずれかを使ってフィットさせることができる.
data2 = {{3.9, 75.3}, {1.5, 6.8}, {3.5, 37.9}, {3.9, 48.8}, {2.2, 9.7}, {1.6, 6.1}, {1., 3.4}, {0.6, 2.2}, {2.1, 11.4}, {2.1, 8.1}};NonlinearModelFitを使ってデータを指数モデルにフィットさせる:
nlm = NonlinearModelFit[data2, a Exp[b x], {a, b}, x]線形モデルの場合と同様に,Showを使ってデータ点のプロットとモデルを組み合せる:
Show[ListPlot[data2], Plot[nlm[x], {x, 0, 4}]]個々の点における推定値の表形式の結果を見ることもできる."SinglePredictionConfidenceIntervalTable"をFittedModelと使って,予測値を誤差推定および信頼区間と一緒に表で見る:
nlm["SinglePredictionConfidenceIntervalTable"]まずフィットした関数の80%,90%,95%,99%の予測帯についての関数を定義する:
{bands80[x_], bands90[x_], bands95[x_], bands99[x_]} = Table[nlm["SinglePredictionBands", ConfidenceLevel -> cl], {cl, {.8, .9, .95, .99}}];帯で囲まれる領域をフィットした関数と一緒に可視化し,Fillingを使ってそれぞれの信頼レベルの領域をより分かりやすく見られるようにする:
Plot[{nlm[x], bands80[x], bands90[x], bands95[x], bands99[x]}, {x, 0, 4}, Filling -> {2 -> {1}, 3 -> {2}, 4 -> {3}, 5 -> {4}}]