Main Content

複数の分布近似の比較

この例では、複数の確率分布オブジェクトを同一の一連の標本データに当てはめ、各分布がデータにどの程度当てはまるかを視覚的に比較する方法を示します。

手順 1. 標本データを読み込む。

標本データを読み込みます。

load carsmall

このデータには、さまざまな車種およびモデルのガロンあたりの走行マイル数 (MPG) の測定値が格納され、生産国 (Origin)、モデル年 (Model_Year)、その他の車両の特性によってグループ化されています。

手順 2. categorical 配列を作成する。

Origin を categorical 配列に変換し、標本データからイタリア車を削除します。イタリア車は 1 台しかないので、fitdist ではカーネル分布以外を使用してこのグループに分布を当てはめることはできません。

Origin = categorical(cellstr(Origin));
MPG2 = MPG(Origin~='Italy');
Origin2 = Origin(Origin~='Italy');
Origin2 = removecats(Origin2,'Italy');

手順 3. 複数の分布をグループ別に近似させる。

fitdist を使用し、ワイブル分布、正規分布、ロジスティック分布およびカーネル分布を MPG データの各生産国グループに近似します。

[WeiByOrig,Country] = fitdist(MPG2,'weibull','by',Origin2);
[NormByOrig,Country] = fitdist(MPG2,'normal','by',Origin2);
[LogByOrig,Country] = fitdist(MPG2,'logistic','by',Origin2);
[KerByOrig,Country] = fitdist(MPG2,'kernel','by',Origin2);
WeiByOrig
WeiByOrig=1×5 cell array
    {1x1 prob.WeibullDistribution}    {1x1 prob.WeibullDistribution}    {1x1 prob.WeibullDistribution}    {1x1 prob.WeibullDistribution}    {1x1 prob.WeibullDistribution}

Country
Country = 5x1 cell
    {'France' }
    {'Germany'}
    {'Japan'  }
    {'Sweden' }
    {'USA'    }

各国のグループに 4 つの分布オブジェクトが関連付けられました。たとえば、cell 配列 WeiByOrig には、標本データに示される各国に 1 つずつ、5 つのワイブル分布オブジェクトが含まれます。同様に、cell 配列 NormByOrig には 5 つの正規分布オブジェクトが含まれ、他も同様になります。各オブジェクトは、データ、分布およびパラメーターについての情報を保持するプロパティを含んでいます。配列 Country は、分布オブジェクトが cell 配列に格納されるのと同じ順番で各グループの生産国をリストします。

手順 4. 各分布の pdf を計算する。

米国の 4 つの確率分布オブジェクトを抽出し、各分布の pdf を計算します。手順 3 に示すように、米国は各 cell 配列の 5 番目の位置になります。

WeiUSA = WeiByOrig{5};
NormUSA = NormByOrig{5};
LogUSA = LogByOrig{5};
KerUSA = KerByOrig{5};

x = 0:1:50;
pdf_Wei = pdf(WeiUSA,x);
pdf_Norm = pdf(NormUSA,x);
pdf_Log = pdf(LogUSA,x);
pdf_Ker = pdf(KerUSA,x); 

手順 5. 各分布の pdf をプロットする。

標本データのヒストグラムに重ね合わせ、米国のデータに当てはめる各分布の pdf をプロットします。見やすいように、ヒストグラムを正規化します。

米国の標本データのヒストグラムを作成します。

data = MPG(Origin2=='USA');
figure
histogram(data,10,'Normalization','pdf','FaceColor',[1,0.8,0]);

当てはめた各分布の確率密度関数をプロットします。

line(x,pdf_Wei,'LineStyle','-','Color','r')
line(x,pdf_Norm,'LineStyle','-.','Color','b')
line(x,pdf_Log,'LineStyle','--','Color','g')
line(x,pdf_Ker,'LineStyle',':','Color','k')
legend('Data','Weibull','Normal','Logistic','Kernel','Location','Best')
title('MPG for Cars from USA')
xlabel('MPG')

Figure contains an axes object. The axes object with title MPG for Cars from USA, xlabel MPG contains 5 objects of type histogram, line. These objects represent Data, Weibull, Normal, Logistic, Kernel.

標本データのヒストグラムに確率密度関数プロットを重ね合わせると、各種の分布がデータをどの程度近似できるのかを視覚的に比較できるようになります。ノンパラメトリックなカーネル分布 KerUSA のみが、元のデータの 2 つの最頻値をほぼ明確にしています。

手順 6. 米国データを年別にさらにグループ化する。

手順 5 で明確になった 2 つの最頻値を調査するには、MPG データを生産国 (Origin) とモデル年 (Model_Year) の両方でグループ化し、fitdist を使用してカーネル分布を各グループに近似します。

[KerByYearOrig,Names] = fitdist(MPG,'Kernel','By',{Origin Model_Year});

生産国とモデル年の固有の各組み合わせには、カーネル分布オブジェクトが関連付けられました。

Names
Names = 14x1 cell
    {'France...' }
    {'France...' }
    {'Germany...'}
    {'Germany...'}
    {'Germany...'}
    {'Italy...'  }
    {'Japan...'  }
    {'Japan...'  }
    {'Japan...'  }
    {'Sweden...' }
    {'Sweden...' }
    {'USA...'    }
    {'USA...'    }
    {'USA...'    }

米国の各モデル年について 3 つの確率分布をプロットします。これらは、cell 配列 KerByYearOrig の 12、13 および 14 の位置にあります。

figure
hold on
for i = 12 : 14
    plot(x,pdf(KerByYearOrig{i},x))
end
legend('1970','1976','1982')
title('MPG in USA Cars by Model Year')
xlabel('MPG')
hold off

Figure contains an axes object. The axes object with title MPG in USA Cars by Model Year, xlabel MPG contains 3 objects of type line. These objects represent 1970, 1976, 1982.

モデル年別にさらにグループ化すると、米国で生産された車の MPG データには、2 つの明確なピークが存在することが確率密度関数のプロットからわかります。1 つはモデル年 1970、もう 1 つはモデル年 1982 です。これにより、米国のガロンあたりの走行マイル数データを組み合わせたヒストグラムに 1 つではなく 2 つのピークがある理由がわかります。

参考

| |

関連するトピック