6
daList={62.8347, 88.5806, 74.8825, 61.1739, 66.1062, 42.4912, 62.7023, 
        39.0254, 48.3332, 48.5521, 51.5432, 69.4951, 60.0677, 48.4408, 
        59.273, 30.0093, 94.6293, 43.904, 59.6066, 58.7394, 68.6183, 83.0942, 
        73.1526, 47.7382, 75.6227, 58.7549, 59.2727, 26.7627, 89.493, 
        49.3775, 79.9154, 73.2187, 49.5929, 84.4546, 28.3952, 75.7541, 
        72.5095, 60.5712, 53.2651, 33.5062, 80.4114, 63.7094, 90.2438, 
        55.2248, 44.437, 28.1884, 4.77477, 36.8398, 70.3579, 28.1913, 
        43.9001, 23.8907, 12.7823, 22.3473, 57.6724, 49.0148}

上記は、私が扱っている実際のデータのサンプルです。私はBinCountsを使用していますが、これはヒストグラムがそれを行うべきであることを視覚的に説明するためのものです:そのヒストグラムの形状に合わせたいと思います

Histogram@data

ここに画像の説明を入力

次のようにデータポイント自体を適合させる方法を知っています。

model = 0.2659615202676218` E^(-0.2222222222222222` (x - \[Mu])^2)
FindFit[data, model, \[Mu], x]

私がやりたいこととはかけ離れています: Mathematica にビンカウント/ヒストグラムを合わせるにはどうすればよいですか?

4

1 に答える 1

19

MMA V8 をお持ちの場合は、新しいDistributionFitTest

disFitObj = DistributionFitTest[daList, NormalDistribution[a, b],"HypothesisTestData"];

Show[
   SmoothHistogram[daList], 
   Plot[PDF[disFitObj["FittedDistribution"], x], {x, 0, 120}, 
        PlotStyle -> Red
   ], 
   PlotRange -> All
]

ここに画像の説明を入力

disFitObj["FittedDistributionParameters"]

(* ==> {a -> 55.8115, b -> 20.3259} *)

disFitObj["FittedDistribution"]

(* ==> NormalDistribution[55.8115, 20.3259] *)

他のディストリビューションにも適合します。


もう 1 つの便利な V8 関数はHistogramListHistogramのビニング データを提供する です。のすべてHistogramのオプションも必要です。

{bins, counts} = HistogramList[daList]

(* ==> {{0, 20, 40, 60, 80, 100}, {2, 10, 20, 17, 7}} *)

centers = MovingAverage[bins, 2]

(* ==> {10, 30, 50, 70, 90} *)

model = s E^(-((x - \[Mu])^2/\[Sigma]^2));

pars = FindFit[{centers, counts}\[Transpose], 
                     model, {{\[Mu], 50}, {s, 20}, {\[Sigma], 10}}, x]

(* ==> {\[Mu] -> 56.7075, s -> 20.7153, \[Sigma] -> 31.3521} *)

Show[Histogram[daList],Plot[model /. pars // Evaluate, {x, 0, 120}]]

ここに画像の説明を入力

NonlinearModeFitフィッティングを試すこともできます。どちらの場合も、独自の初期パラメーター値を使用して、最終的にグローバルに最適な適合が得られる可能性を最大限に高めることをお勧めします。


V7 にはありませんが、これHistogramListを使用して同じリストを取得できます。

Histogram[data,bspec,fh] の関数 fh は 2 つの引数に適用されます: ビンの​​リスト {{Subscript[b, 1],Subscript[b, 2]},{Subscript[b, 2],Subscript[b , 3]},[Ellipsis]}、および対応するカウント {Subscript[c, 1],Subscript[c, 2],[Ellipsis]} のリスト。この関数は、Subscript[c, i] のそれぞれに使用される高さのリストを返す必要があります。

これは次のように使用できます(私の以前の回答から):

Reap[Histogram[daList, Automatic, (Sow[{#1, #2}]; #2) &]][[2]]

(* ==> {{{{{0, 20}, {20, 40}, {40, 60}, {60, 80}, {80, 100}}, {2, 
    10, 20, 17, 7}}}} *)

もちろん、引き続き使用できますBinCountsが、MMA の自動ビニング アルゴリズムが欠けています。独自のビニングを提供する必要があります。

counts = BinCounts[daList, {0, Ceiling[Max[daList], 10], 10}]

(* ==>  {1, 1, 6, 4, 11, 9, 9, 8, 5, 2} *)

centers = Table[c + 5, {c, 0, Ceiling[Max[daList] - 10, 10], 10}]

(* ==>  {5, 15, 25, 35, 45, 55, 65, 75, 85, 95} *)

pars = FindFit[{centers, counts}\[Transpose],
                model, {{\[Mu], 50}, {s, 20}, {\[Sigma], 10}}, x]

(* ==> \[Mu] -> 56.6575, s -> 10.0184, \[Sigma] -> 32.8779} *)

Show[
   Histogram[daList, {0, Ceiling[Max[daList], 10], 10}], 
   Plot[model /. pars // Evaluate, {x, 0, 120}]
]

ここに画像の説明を入力

ご覧のとおり、適合パラメーターはビニングの選択に大きく依存する場合があります。特に、私が呼び出したパラメーターはs、ビンの量に大きく依存します。ビンが多いほど、個々のビン数が少なくなり、 の値が低くsなります。

于 2011-08-24T18:53:54.693 に答える