ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

対話式の近似

基本的な近似 GUI

MATLAB® の基本的な近似 GUI により、対話的に以下を行うことができます。

  • スプライン内挿、エルミート内挿、または 多項式 (10 次まで) を用いてデータをモデリングする

  • データと 1 つまたは複数の近似を同時にプロットする

  • 近似の残差をプロット

  • モデルの係数を計算

  • 残差のノルム (モデルがどれくらいデータに近似するかを分析するために使用する統計) を計算

  • データの外での外挿または内挿にモデルを利用

  • 係数と計算結果の値を MATLAB ワークスペースへ保存し、GUI の外部で利用する

  • 新しいデータを使用して近似の計算とプロットの作成を再度行うための MATLAB コードを生成

    メモ:   基本的な近似 GUI は、2 次元プロットだけを取り扱えます。より高度な近似および回帰分析の詳細は、Curve Fitting Toolbox™ ドキュメンテーションと Statistics Toolbox™ ドキュメンテーションを参照してください。

基本的な近似のための準備

基本的な近似 GUI は、データを近似する前に昇順で並べ替えます。データセットが大きく、値が昇順に並べ替えられていない場合、基本的な近似 GUI が近似前にデータを前処理するために、より時間がかかります。

はじめにデータを並べ替えると、基本的な近似 GUI を高速化できます。データ ベクトル xy から、並べ替えられたベクトル x_sortedy_sorted を作成するには、MATLAB 関数 sort を使用します。

[x_sorted, i] = sort(x);
y_sorted = y(i);

基本的な近似 GUI を開く

基本的な近似 GUI を利用するには、xy データ (のみ) を生成する MATLAB プロット コマンドを用いて、はじめに、Figure ウィンドウにデータをプロットしなければなりません。

基本的な近似 GUI を開くには、Figure ウィンドウの上部から [ツール]、[基本的な近似] を選択します。

右下隅で矢印ボタン を 2 回クリックして完全に展開すると、ウィンドウに 3 つのパネルが表示されます。これらのパネルを使用して、以下の操作を行います。

  • モデルとプロットのオプションの選択

  • モデルの係数と残差のノルムの調査とエクスポート

  • 内挿値や外挿値の調査とエクスポート

パネルを 1 つずつ展開または折りたたむには、インターフェイスの右下隅の矢印ボタンを使用します。

例: 基本的な近似 GUI

この例は、基本的な近似 GUI を使用して、多項式回帰のコードを近似、可視化、分析、保存、および生成する方法を示しています。

人口調査データの読み込みとプロット

ファイル census.mat は、1790 年から 1990 年までで 10 年間隔の米国での人口のデータを含みます。

データを読み込みプロットするためには、MATLAB プロンプトで次のコマンドを入力します。

load census
plot(cdate,pop,'ro')

load コマンドは、MATLAB ワークスペースに次の変数を追加します。

  • cdate: 1790 年から 1990 年までの 10年ごとの年度を示す列ベクトルです。これは、予測変数です。

  • pop: cdate の中の各年度に対応する米国の人口が記された列ベクトルです。これは、応答変数です。

データ ベクトルは、年度によって昇順に並べ替えられます。プロットは、人口を年度の関数として表します。

これで、データで母集団をモデリングする方程式を近似する準備ができました。

3 次多項近似による人口調査データの予測

  1. Figure ウィンドウで、[ツール]、[基本的な近似]を選択することにより、[基本的な近似] ダイアログ ボックスを開きます。

  2. [基本的な近似] ダイアログ ボックスの [近似プロット] エリアで、[3 次多項式] チェック ボックスを選択してデータを 3 次多項式で近似します。

    MATLAB は、選択に従ってデータを近似し、次のように 3 次回帰線をグラフに追加します。

    近似の計算中に、MATLAB で問題が発生し、次の警告が表示されます。

    多項式は条件数が不適切です。異なる X 値をもつ点を追加する、またはより低い次数で多項式を選択するか、"X データのセンタリングとスケーリング" を選択してください。

    この警告は、モデルに対して計算された係数が応答 (測定された人口) におけるランダムなエラーに影響されることを示します。これは、さらに良い近似を得るための提案でもあります。

  3. 引き続き、3 次近似を使用します。人口調査データに新しい観測を追加することはできないので、近似を再計算する前にz-scores にもつ値を変換することによって、近似を向上させます。GUI で [X データのセンタリングとスケーリング] チェック ボックスをオンにして、基本的な近似ツールに変換を実行させます。

    データのセンタリングとスケーリングの動作方法については、「基本的な近似ツールで近似を計算する方法について」を参照してください。

  4. ここで方程式を表示して、残差を表示します。[X データのセンタリングとスケーリング] および [3 次多項式] チェック ボックスをオンにするほかに、次のオプションを選択します。

    • 式の表示

    • 残差のプロット

    • 残差ノルムの表示

[残差のプロット] を選択すると、残差のサブプロットを棒グラフとして作成します。次の図は選択した基本的な近似 GUI オプションの結果を示しています。

人口が減少していることを示す 1790 年以前には、3 次式の予測は良くありません。1790 年以降は、モデルがデータを良く近似するように見えますが、残差のパターンは、モデルが正規誤差の仮定を満たさないことを示します。これは、最小二乗近似の基本です。凡例で識別された [data 1] ラインは、観測された x (cdate) および y (pop) データ値です。[3 次多項式] 回帰線はデータ値のセンタリングとスケーリング後の近似を表します。ツールで変換された z-score を使用して近似が計算される場合も、この数字は元のデータ単位を示すことに注意してください。

比較のため、[近似プロット] エリアで他の多項式を選択して人口調査データに他の式の近似を試みてください。

3 次近似パラメーターの表示と保存

[基本的な近似] ダイアログ ボックスで矢印ボタン をクリックすると、[数値結果] パネルに係数の推定値と残差のノルムが表示されます。

特定の近似を表示するには、[近似] リストから選択します。これによって、[基本的な近似] ダイアログ ボックスに係数が表示されますが、Figure ウィンドウには近似がプロットされません。

    メモ:   プロット上に近似を表示する場合は、対応する [近似プロット] チェック ボックスを選択しなければなりません。

[数値結果] パネルの [ワークスペースへ保存] ボタンをクリックすることにより、近似のデータを MATLAB ワークスペースへ保存します。[近似をワークスペースに保存] ダイアログ ボックスが開きます。

すべてのチェック ボックスをオンにし、[OK] をクリックして、近似パラメーターを MATLAB 構造体として保存します。

fit
fit = 
     type: 'polynomial degree 3'
    coeff: [0.9210 25.1834 73.8598 61.7444]

これで、基本的な近似 GUI の外部で、MATLAB プログラミングにおいて近似の結果を使用できます。

決定係数 R2 の取得

決定係数、つまり R の 2 乗 (R2 と表記) を計算することによって、多項式回帰により観測されたデータがどれくらい正確に予測されるかを表示できます。0~1 までの R2 統計は、独立変数が従属変数の値の予測にどれくらい役に立つかを測定します。

  • R2 値が 0 に近い場合、近似がモデル y = constant ほどよくないことを示します。

  • R2 値が 1 に近い場合、独立変数が従属変数のほとんどの変化量を説明することを示します。

R2 を計算するには、まず近似を計算し、次にその近似から残差を取得します。残差とは、観測された従属値とその値に対して近似で予測される値との符号付きの差異のことです。

残差 = y観測された値 - y近似値

基本的な近似ツールで計算する任意の近似の残差を生成できます。残差のグラフを表示するには、[残差のプロット] チェック ボックスをオンにします。残差は、棒グラフ、ライン プロットまたは散布図として表示できます。

残差値を取得した後、その値をワークスペースに保存し、そこで R2 を計算できます。この例の前出の部分を完了して、3 次多項式を人口調査データに近似して、以下の手順を実行します。

残差データおよび 3 次近似の R2 の計算-  

  1. [数値結果] タブが表示されていない場合は、右下の矢印ボタン をクリックして、[数値結果] タブを表示します。

  2. 表示されていない場合は、[近似] ドロップダウン メニューから [3 次多項式] を選択します。

  3. [ワークスペースへ保存] をクリックして、近似係数、残差のノルム、および残差を保存します。

    [近似をワークスペースへ保存] ダイアログ ボックスが 3 つのチェック ボックスおよび 3 つのテキスト フィールドと共に表示されます。

  4. 3 つのチェック ボックスをすべてオンにして、近似係数、残差のノルム、および残差値を保存します。

  5. 保存した変数を 3 次近似に属する値として識別します。それぞれの既定の名前 (fit3normresid3、および resids3 など) に 3 を追加して、変数名を変更します。ダイアログ ボックスは、以下の図のようになります。

  6. [OK] をクリックします。基本的な近似により、残差が数字の列ベクトルとして、近似係数が構造体として、および残差のノルムがスカラーとして保存されます。

    基本的な近似が残差ノルムに対して計算する値は 12.2380 になることに注意してください。この数字は、3 次近似の残差の 2 乗和の平方根です。

  7. オプションで、基本的な近似ツールで提供された残差ノルム値を確認できます。保存した resids3 配列から残差ノルムを計算します。

    mynormresid3 = sum(resids3.^2)^(1/2)
    
    mynormresid3 =
        12.2380
  8. 従属変数 pop の 2 乗総和を計算して、R2 を計算します。2 乗総和とは、変数の平均値とそれぞれの値の差分を 2 乗した値の和です。たとえば、次のようなコードを使用します。

    SSpop = (length(pop)-1) * var(pop)
    
    SSpop =
        1.2356e+005
    

    var(pop) で母集団ベクトルの分散を計算します。この計算結果に、自由度を考慮して観察データ数から 1 を引いた数を掛けます。2 乗総和と残差ノルムはどちらも正のスカラー値です。

  9. ここで、normresid3SSpop の 2 乗を使用して、R2 を計算します。

    rsqcubic = 1 - normresid3^2 / SSpop
    
    rsqcubic =
        0.9988
    
  10. 最後に、線形近似の R2 を計算して、取得した 3 次 R2 値と比較します。基本的な近似 GUI では、線形近似の結果も提供されます。線形結果を取得するには、手順 2~6 を繰り返し、アクションを次のように変更します。

    • 最小二乗線形回帰係数と統計を計算するには、[数値結果] ペインの [近似] ドロップダウンで、[3 次多項式] の代わりに [線形] を選択します。

    • [ワークスペースへ保存] ダイアログ ボックスで、線形近似から取得した変数であることを示すために各変数名に 1 を付加して、[OK] をクリックします。変数 fit1normresid1、および resids1 がワークスペースにあります。

    • 変数 normresid1 (98.778) を使用して、手順 9 で 3 次近似に対して実行したように線形近似の R2 を計算します。

      rsqlinear = 1 - normresid1^2 / SSpop
      
      rsqlinear =
          0.9210
      

    この結果は、母集団データの線形最小二乗近似で分散の 92.1% が説明されることを示します。このデータの 3 次近似によってこの分散の 99.9% が説明されるので、後者の方が優れた予測子のように思われます。しかし、3 次近似は 3 つの変数 (x、x2、および x3) を使用して予測するため、基本 R2 値はこの近似がどれくらいロバストな近似かということが完全には反映されません。多変量の適合度をより適切に評価する尺度は、調整された R2 です。調整された R2 の計算方法と使い方の詳細は、「近似の残差と適合度」を参照してください。

    注意:   R2 は、使用している多項式がどの程度上手く従属変数を "予測する" かを示すものであり、多項式モデルが対象データにとってどの程度 "適切か" を示す尺度ではありません。本質的に予測不能なデータを分析するとき、R2 の値が小さいということは、独立変数が従属変数を正確に予測しないことを示します。ただし、必ずしも近似に何か誤りがあることを意味するものではありません。

残差データおよび線形近似の R2 の計算-  この次の例では、基本的な近似 GUI を使用して線形近似を実行し、結果をワークスペースに保存し、線形近似の R2 を計算します。次に線形 R2 値をこの例 残差データおよび 3 次近似の R2 の計算 で取得する 3 次 R2 値と比較します。

  1. [数値結果] タブが表示されていない場合は、右下の矢印ボタン をクリックして、[数値結果] タブを表示します。

  2. [近似プロット] エリアの [線形] チェック ボックスをオンにします。

  3. 表示されていない場合は、[近似] ドロップダウン メニューから [線形] を選択します。近似係数と残差ノルムのエリアに線形近似の統計が表示されます。

  4. [ワークスペースへ保存] をクリックして、近似係数、残差のノルム、および残差を保存します。

    [近似をワークスペースへ保存] ダイアログ ボックスが 3 つのチェック ボックスおよび 3 つのテキスト フィールドと共に表示されます。

  5. 3 つのチェック ボックスをすべてオンにして、近似係数、残差のノルム、および残差値を保存します。

  6. 保存した変数を線形近似に属する値として識別します。それぞれの既定の名前 (fit1normresid1、および resids1 など) に 1 を追加して、変数名を変更します。

  7. [OK] をクリックします。基本的な近似により、残差が数字の列ベクトルとして、近似係数が構造体として、および残差のノルムがスカラーとして保存されます。

    基本的な近似が残差ノルムに対して計算する値は 98.778 になることに注意してください。この数字は、線形近似の残差の 2 乗和の平方根です。

  8. オプションで、基本的な近似ツールで提供された残差ノルム値を確認できます。保存した resids3 配列から残差ノルムを計算します。

    mynormresid1 = sum(resids1.^2)^(1/2)
    
    mynormresid3 =
        98.7783
  9. 従属変数 pop の 2 乗総和を計算して、R2 を計算します。2 乗総和とは、変数の平均値とそれぞれの値の差分を 2 乗した値の和です。たとえば、次のようなコードを使用します。

    SSpop = (length(pop)-1) * var(pop)
    
    SSpop =
        1.2356e+005
    

    var(pop) で母集団ベクトルの分散を計算します。この計算結果に、自由度を考慮して観察データ数から 1 を引いた数を掛けます。2 乗総和と残差ノルムはどちらも正のスカラー値です。

  10. ここで、normresid1 の 2 乗と SSpop を使用して、R2 を計算します。

    rsqlinear = 1 - normresid1^2 / SSpop
    
    rsqcubic =
        0.9210
    

    この結果は、母集団データの線形最小二乗近似で分散の 92.1% が説明されることを示します。このデータの 3 次近似によってこの分散の 99.9% が説明されるので、後者の方が優れた予測子のように思われます。ただし、線形近似には 2 つの係数 (x と定数) がありますが、3 次近似には 4 つの係数 (x、x2、x3、および定数) があります。単純な R2 統計では、さまざまな自由度が計算されません。多項式近似を評価するより適切な尺度は調整済み R2 です。調整された R2 の計算方法と使い方の詳細は、「近似の残差と適合度」を参照してください。

    注意:   R2 は、使用している多項式がどの程度上手く従属変数を "予測する" かを示すものであり、多項式モデルが対象データにとってどの程度 "適切か" を示す尺度ではありません。本質的に予測不能なデータを分析するとき、R2 の値が小さいということは、独立変数が従属変数を正確に予測しないことを示します。ただし、必ずしも近似に何か誤りがあることを意味するものではありません。

人口値の内挿と外挿

1965 年 (元のデータにはない日付) の米国の人口を内挿するために、3 次モデルを利用するものとします。

  1. [基本的な近似] ダイアログ ボックスで、 ボタンをクリックして、現在の近似を評価する x の値のベクトルを指定します。

  2. [値を入力] フィールドで、次の値を入力します。

    1965
    

      メモ:   スケーリングとセンタリングを行っていない x の値を使用します。3 次多項近似による人口調査データの予測 で係数を取得するように x の値をスケーリングするように選択した場合でも、それを最初にセンタリングしたりスケーリングする必要はありません。基本的な近似ツールは、ユーザーから直接的には分かりませんが必要な調整を行います。

  3. [評価] をクリックします。

    x の値と f(x) に対する対応する値は、下記のように、近似から計算され、表に表示されます。

  4. [評価結果をプロット] チェック ボックスを選択すると、内挿値をマゼンタ色の菱形マーカーで表示します。

  5. ワークスペースへ保存 をクリックして、MATLAB ワークスペースに 1965 年の内挿された人口を保存します。

    次のダイアログ ボックスが開き、変数名を指定できます。

  6. [OK] をクリックします。ただし、次の節「結果を再現するコード ファイルの生成」の手順に従う場合は、Figure ウィンドウを開いたままにしておきます。

結果を再現するコード ファイルの生成

基本的な近似セッションの終了後、新しいデータを使用して近似の計算とプロットの作成を再度行うための MATLAB コードを生成できます。

  1. Figure ウィンドウで、[ファイル]、[コードの生成] を選択します。

    これにより、関数が作成され、MATLAB エディターに表示されます。このコードは、[基本的な近似] ダイアログ ボックスで対話的に行ったことをプログラムで再現する方法を示します。

  2. 最初の行の関数名を createfigure から、censusplot のように、わかりやすい名前に変更します。このコード ファイルを censusplot.m というファイル名で現在のフォルダーに保存します。この関数の最初の行は次のとおりにします。

    function censusplot(X1, Y1, X2, Y2, valuesToEvaluate1)
  3. ランダムに摂動する新しい census データを生成します。

    randpop = pop + 10*randn(size(pop));
  4. 新しいデータと再計算した近似を用いてプロットを作成し直します。

    censusplot(cdate,randpop,cdate,randpop,1965)

    5 つの入力引数が必要です。元のグラフにプロットされた 2 組の x,y 値 (data 1data 2)、およびマーカーの x 値。この呼び出しでは、変数 x2, y2x1, y1 と同じ値にして、censusplot.m を呼び出します。

    次の図は、生成されたコードが作成したプロットを示します。新しいプロットは、y データ値、3 次多項式近似式、および棒グラフの残差値を除き、コードを生成するのに使用した図の表示と予想どおりに一致します。

基本的な近似ツールで近似を計算する方法について

基本的な近似ツールは、関数 polyfit を呼び出して多項式近似を計算します。polyval 関数を呼び出して、近似を評価します。polyfit は、与えられた入力を解析し、データが指定された次数で近似できる条件を備えているかを決定します。

条件のよくないデータが見つかると、polyfit はできるだけ適切に回帰を計算しますが、近似を向上させる可能性についての警告も返します。基本的な近似の例のセクション「3 次多項近似による人口調査データの予測」にこの警告が表示されています。

モデルの信頼性を向上させる方法の 1 つは、データ点を追加することです。ただし、いつでもデータセットに観測を追加できるわけではありません。代わりに、予測子変数を変換して、センターとスケールを正規化する方法があります。(この例では、予測子は人口調査の日付のベクトルです)

関数 polyfit は、z スコアを計算して、正規化します。

ここで、x は予測データ、μ は x の平均、σ は x の標準偏差です。z-score はデータに 0 の平均と 1 の標準偏差を設定します。基本的な近似の GUI では、[x データのセンタリングとスケーリング] チェック ボックスをオンにして、予測子データを z スコアに変換します。

センタリングとスケーリングの後、y データに対してモデルの係数が z の関数として計算されます。これらは、x の関数として y に対して計算された係数とは異なり、さらにロバストです。モデルの形式と残差のノルムは変更されません。基本的な近似 GUI は、近似がオリジナルの x データと同じスケールでプロットされるように、z スコアを自動的に再スケールします。

センタリングとスケーリングされたデータが、最終プロットを作成する中間データとして使用される方法を理解するために、コマンド プロンプトで以下を入力します。

close
load census
x = cdate;
y = pop;
z = (x-mean(x))/std(x); % Compute z-scores of x data

plot(x,y,'ro') % Plot data as red markers
hold on        % Prepare axes to accept new graph on top

zfit = linspace(z(1),z(end),100);
pz = polyfit(z,y,3); % Compute conditioned fit
yfit = polyval(pz,zfit);

xfit = linspace(x(1),x(end),100);
plot(xfit,yfit,'b-') % Plot conditioned fit vs. x data

センタリングおよびスケーリングされた 3 次多項式プロットは、青線で表示しています。

コードでは、z の計算でデータを正規化する方法が説明されています。関数 polyfit は、呼び出すときに 3 つの返される変数を指定すると、自動的に変換を実行します。

[p,S,mu] = polyfit(x,y,n)

返された回帰パラメーター p は、正規化された x に基づいています。返されるベクトル mu には、x の平均および標準偏差が含まれます。詳細は、polyfit のリファレンス ページを参照してください。

この情報は役に立ちましたか?