-
関連項目
- EstimatedDistribution
- FindDistributionParameters
- HypothesisTestData
- LocationTest
- VarianceTest
- IndependenceTest
- LogRankTest
- AndersonDarlingTest
- KolmogorovSmirnovTest
- CramerVonMisesTest
- JarqueBeraALMTest
- KuiperTest
- MardiaCombinedTest
- MardiaKurtosisTest
- MardiaSkewnessTest
- BaringhausHenzeTest
- PearsonChiSquareTest
- ShapiroWilkTest
- WatsonUSquareTest
- 関連するガイド
-
-
関連項目
- EstimatedDistribution
- FindDistributionParameters
- HypothesisTestData
- LocationTest
- VarianceTest
- IndependenceTest
- LogRankTest
- AndersonDarlingTest
- KolmogorovSmirnovTest
- CramerVonMisesTest
- JarqueBeraALMTest
- KuiperTest
- MardiaCombinedTest
- MardiaKurtosisTest
- MardiaSkewnessTest
- BaringhausHenzeTest
- PearsonChiSquareTest
- ShapiroWilkTest
- WatsonUSquareTest
- 関連するガイド
-
関連項目
DistributionFitTest[data]
data が正規分布に従っているかどうかの検定を行う.
DistributionFitTest[data,dist]
data が dist に従った分布かどうかの検定を行う.
DistributionFitTest[data,dist,"property"]
"property"の値を返す.
DistributionFitTest
DistributionFitTest[data]
data が正規分布に従っているかどうかの検定を行う.
DistributionFitTest[data,dist]
data が dist に従った分布かどうかの検定を行う.
DistributionFitTest[data,dist,"property"]
"property"の値を返す.
詳細とオプション
- DistributionFitTestは data が分布 dist の母集団から得られたという帰無仮説
およびそうではないという対立仮説
で適合度仮説検定を実行する. - デフォルトで,確率値つまり
値が返される. - 小さい
値は data が dist から来ている可能性が低いことを示す. - dist は,記号または数値の母数,またはデータ集合,を持つ任意の記号分布でよい.
- data は一変量{x1,x2,…}でも多変量{{x1,y1,…},{x2,y2,…},…}でもよい.
- DistributionFitTest[data,dist,Automatic]は一般的な対立仮説に対して data と dist に当て嵌まる最も強力な検定を選ぶ.
- DistributionFitTest[data,dist,All]は data と dist に適用されるすべての検定を選ぶ.
- DistributionFitTest[data,dist,"test"]は"test"に従って
値をレポートする. - 多くの検定が,検定分布 dist の累積分布関数
,データの経験的累積分布関数
,それらの差分
と
=Expectation[d(x),…]を使う.累積分布関数である
と
は帰無仮説
下で同じでなければならない. - 次の検定は一変量分布と多変量分布に使える.
-
"AndersonDarling" 分布,データ Expectation[
]に基づく"CramerVonMises" 分布,データ Expectation[d(x)2]に基づく "JarqueBeraALM" 正規性 歪度と尖度に基づく "KolmogorovSmirnov" 分布,データ
に基づく"Kuiper" 分布,データ
に基づく"PearsonChiSquare" 連続,データ 期待ヒストグラムと観察ヒストグラムに基づく "ShapiroWilk" 正規性 変位値に基づく "WatsonUSquare" 分布,データ Expectation[
]に基づく - 次の検定は多変量分布に使用できる.
-
"BaringhausHenze" 正規性 経験的特性関数に基づく "DistanceToBoundary" 一様性 一様境界までの距離に基づく "MardiaCombined" 正規性 Mardia歪度とMardia尖度の組合せ "MardiaKurtosis" 正規性 多変量の尖度に基づく "MardiaSkewness" 正規性 多変量の歪度に基づく "SzekelyEnergy" データ Newtonのポテンシャルエネルギーに基づく - DistributionFitTest[data,dist,"property"]を使って"property"の値を直接与えることができる.
- 検定結果のレポートに関連する特性
-
"AllTests" 適用可能なすべての検定のリスト "AutomaticTest" Automaticが使われた場合に選ばれる検定 "DegreesOfFreedom" 検定で使われる自由度 "PValue"
値のリスト"PValueTable"
値のフォーマットされた表"ShortTestConclusion" 検定結果の簡単な説明 "TestConclusion" 検定結果の説明 "TestData" 検定統計量と
値のペアのリスト"TestDataTable"
値と検定統計量のフォーマットされた表"TestStatistic" 検定統計量のリスト "TestStatisticTable" 検定統計量のフォーマットされた表 "HypothesisTestData" HypothesisTestDataオブジェクトを返す - DistributionFitTest[data,dist,"HypothesisTestData"]はHypothesisTestDataオブジェクト htd を返す.このオブジェクトを使って,追加的な検定結果と htd["property"]の形式で特性を取り出すことができる.
- データ分布に関連する特性
-
"FittedDistribution" データのフィットした分布 "FittedDistributionParameters" データの分布母数 - 使用可能なオプション
-
Method Automatic
値をの計算に使用するメソッドSignificanceLevel 0.05 診断とレポートのための切捨て - 適合度検定では,
のときにのみ
が棄却されるような切捨て
が選択される.特性"TestConclusion"および"ShortTestConclusion"で使われる
の値はSignificanceLevelオプションで制御される.デフォルトの
は0.05である. - Method->"MonteCarlo"の設定では,入力 siと同じ長さの
個のデータ集合が
のもとにフィットされた分布を使って生成される.次に,DistributionFitTest[si,dist,{"TestStatistic",test}]からのEmpiricalDistributionを使って
値が推定される.
例題
すべて開く すべて閉じる例 (3)
data = RandomVariate[NormalDistribution[], 2500];DistributionFitTest[data]さらに特性を抽出するためにHypothesisTestDataオブジェクトを作成する:
ℋ = DistributionFitTest[data, Automatic, "HypothesisTestData"];ℋ["TestDataTable", All]Show[Histogram[data, Automatic, "ProbabilityDensity"], Plot[PDF[ℋ["FittedDistribution"], x], {x, -5, 5}, PlotStyle -> Thick]]data = RandomVariate[𝒹 = ParetoDistribution[1, 2], 100];DistributionFitTest[data, 𝒹, {"TestDataTable", "AndersonDarling"}]検定結果をProbabilityPlotで証明する:
ProbabilityPlot[data, 𝒹]data = RandomVariate[𝒟 = BinormalDistribution[.5], 100];ℋ = DistributionFitTest[data, 𝒟, "HypothesisTestData"];ℋ["TestDataTable", "KolmogorovSmirnov"]検定分布の周辺確率密度関数をデータに対してプロットし,検定結果を確認する:
Table[Show[SmoothHistogram[data[[All, i]], PlotStyle -> {Orange, Dashed}, PlotRange -> {0, .4}], Plot[PDF[MarginalDistribution[𝒟, i], x], {x, -4, 4}]], {i, 2}]スコープ (22)
検定 (16)
data1 = RandomVariate[NormalDistribution[], 500];
data2 = RandomVariate[StudentTDistribution[5], 500];DistributionFitTest[data1]DistributionFitTest[data2]第3引数をAutomaticに指定して,一般に検出力が高く適切な検定を適用する:
data = RandomVariate[NormalDistribution[], 10^4];DistributionFitTest[data]特性"AutomaticTest"はどの検定を選択したかを知るのに使われる:
DistributionFitTest[data, Automatic, "AutomaticTest"]data = RandomVariate[WeibullDistribution[1, 2], 10^3];DistributionFitTest[data, WeibullDistribution[1, 2]]WeibullDistribution[1,2]に対するよいフィットを棄却するための十分な証拠はない:
Show[Histogram[data, Automatic, "ProbabilityDensity"], Plot[PDF[WeibullDistribution[1, 2], x], {x, 0, 12}, PlotStyle -> Thick]]𝒟 = MixtureDistribution[{1 / 2, 1 / 2}, {NormalDistribution[-1, 2], ExponentialDistribution[1]}];data1 = RandomVariate[𝒟, 10^4];
data2 = RandomVariate[NormalDistribution[], 10^4];Show[Histogram[data1, Automatic, "PDF"], Plot[PDF[𝒟, x], {x, -5, 5}, PlotRange -> All, Axes -> {True, False}, PlotStyle -> Thick]]
値は混合から得られたのではないデータに比べて混合データの場合には大きい:
DistributionFitTest[data1, 𝒟]DistributionFitTest[data2, 𝒟]data = QuantityArray[RandomVariate[NormalDistribution[100, 6], 100], "Centimeters"]DistributionFitTest[data, NormalDistribution[μ, σ]]DistributionFitTest[data, NormalDistribution[Quantity[1, "Meters"], Quantity[6, "Centimeters"]]]𝒟 = ProbabilityDistribution[Piecewise[{{x ^ 2 / 9, 0 < x ≤ 3}}], {x, -Infinity, Infinity}];data = BlockRandom[SeedRandom[2];RandomVariate[𝒟, 50]];Show[SmoothHistogram[data, PlotStyle -> Dotted], Plot[PDF[𝒟, x], {x, -5, 5}, PlotRange -> All, Axes -> {True, False}, PlotStyle -> {Orange, Thick}]]DistributionFitTest[data, 𝒟]data = RandomVariate[NormalDistribution[1, 2], 10^3];Table[DistributionFitTest[data, NormalDistribution@@i], {i, {{1, 2}, {1, σ}, {μ, 2}, {μ, σ}}}]data1 = RandomVariate[BinormalDistribution[.5], 10^3];
data2 = RandomVariate[MultivariateTDistribution[IdentityMatrix[2], 15], 10^3];正規分布に従うデータの
値は,一般に,正規分布には従わないデータのそれよりも大きい:
Table[DistributionFitTest[data], {data, {data1, data2}}]data = RandomVariate[UniformDistribution[{{0, 1}, {0, 1}}], 10^3];MultinormalDistributionと多変量のUniformDistributionの検定をそれぞれ行う:
Table[DistributionFitTest[data, 𝒟], {𝒟, {Automatic, UniformDistribution[{{0, 1}, {0, 1}}]}}]data1 = RandomVariate[NormalDistribution[], 10^3];
data2 = RandomVariate[NormalDistribution[], 10^3];DistributionFitTest[data1, data2]data3 = RandomVariate[NormalDistribution[], 10^2];DistributionFitTest[data1, data3]data1 = RandomVariate[BinormalDistribution[-.99], 10^2];
data2 = RandomVariate[BinormalDistribution[-.99], 10^2];
data3 = RandomVariate[BinormalDistribution[.99], 10^2];同じ分布に従うデータ間の
値は異なる分布に従うデータ間のそれよりも大きい:
DistributionFitTest[data1, data2]DistributionFitTest[data1, data3]data = RandomVariate[NormalDistribution[], 10^4];DistributionFitTest[data, Automatic, "AndersonDarling"]DistributionFitTest[data, Automatic, {"AndersonDarling", "KolmogorovSmirnov"}]data = RandomVariate[NormalDistribution[], 10^4];DistributionFitTest[data, Automatic, All]特性"AllTests"を使ってどの検定が使われたかを調べる:
DistributionFitTest[data, Automatic, "AllTests"]繰り返し特性を抽出するためにHypothesisTestDataオブジェクトを作成する:
data = RandomVariate[NormalDistribution[], 10^4];ℋ = DistributionFitTest[data, Automatic, "HypothesisTestData"];ℋ["Properties"]HypothesisTestDataオブジェクトからいくつかの特性を抽出する:
data = RandomVariate[NormalDistribution[], 10^4];ℋ = DistributionFitTest[data, NormalDistribution[], "HypothesisTestData"];Cramér–von Mises検定からの
値と検定統計量:
ℋ["PValue", "CramerVonMises"]ℋ["TestStatistic", "CramerVonMises"]data = RandomVariate[NormalDistribution[], 100];ℋ = DistributionFitTest[data, Automatic, "HypothesisTestData"];Anderson–Darling
値と検定統計量からの結果:
ℋ[{{"PValue", "AndersonDarling"}, {"TestStatistic", "AndersonDarling"}}]データ特性 (2)
data = RandomVariate[NormalDistribution[], 10^4];ℋ = DistributionFitTest[data, NormalDistribution[μ, σ], "HypothesisTestData"];ℋ["FittedDistributionParameters"]フィットされた分布の確率密度関数をデータに対してプロットする:
𝒟 = ℋ["FittedDistribution"]Show[Plot[PDF[𝒟, x], {x, -4, 4}], SmoothHistogram[data, PlotStyle -> {Dotted, Orange}]]ℋ["KolmogorovSmirnov"]data = RandomVariate[NormalDistribution[], 10^4];𝒟 = DistributionFitTest[data, NormalDistribution[0, 1], "FittedDistribution"]Show[Histogram[data, Automatic, "ProbabilityDensity"], Plot[PDF[𝒟, x], {x, -4, 4}, PlotStyle -> Thick]]レポート (4)
data = RandomVariate[NormalDistribution[], 10^3];ℋ = DistributionFitTest[data, Automatic, "HypothesisTestData"];ℋ["TestDataTable"]ℋ["TestDataTable", All]ℋ["TestDataTable", {"AndersonDarling", "PearsonChiSquare"}]data = BlockRandom[SeedRandom[1];RandomVariate[NormalDistribution[], 10^3]];ℋ = DistributionFitTest[data, Automatic, "HypothesisTestData"];res = ℋ["TestData", All];
値は0.05よりも大きいので,正規性を棄却するための証拠はこのレベルでは見当たらない:
Show[BarChart[res[[All, 2]], ChartLabels -> Placed[ℋ["AllTests"], Center], BarOrigin -> Left], Graphics[Line[{{.05, 0}, {.05, 11.5}}]]]data = RandomVariate[NormalDistribution[], 10^4];ℋ = DistributionFitTest[data, Automatic, "HypothesisTestData"];ℋ["PValueTable", "CramerVonMises"]ℋ["PValue", "CramerVonMises"]ℋ["PValueTable", All]ℋ["PValueTable", {"AndersonDarling", "CramerVonMises", "WatsonUSquare"}]data = RandomVariate[CauchyDistribution[1, 2], 10^3];ℋ = DistributionFitTest[data, CauchyDistribution[1, 2], "HypothesisTestData"];ℋ["TestStatisticTable"]ℋ["TestStatistic"]ℋ["TestStatisticTable", All]オプション (6)
Method (4)
モンテカルロに基づいたメソッドを使うか,最速メソッドを自動的に選ぶかする:
data = RandomVariate[NormalDistribution[], 100];DistributionFitTest[data, NormalDistribution[], "CramerVonMises", Method -> "MonteCarlo"]DistributionFitTest[data, NormalDistribution[], "CramerVonMises", Method -> Automatic]data = RandomVariate[NormalDistribution[], 100];pts = Table[{i, DistributionFitTest[data, NormalDistribution[], "CramerVonMises", Method -> {"MonteCarlo", "MonteCarloSamples" -> i}]}, {i, Range[5, 1000, 50]}];pval = DistributionFitTest[data, NormalDistribution[], "CramerVonMises"];Show[ListLinePlot[pts, PlotRange -> {0, 1}, FrameLabel -> {"Samples", "P-Value"}, Frame -> True, AxesOrigin -> {0, 0}], Graphics[{Dashed, Line[{{0, pval}, {1000, pval}}]}]]モンテカルロに基づくメソッドで使われるランダムなシードを設定する:
data = RandomVariate[NormalDistribution[], 100];pts = Table[{i, DistributionFitTest[data, NormalDistribution[], "CramerVonMises", Method -> {"MonteCarlo", "RandomSeed" -> i}]}, {i, Range[1, 10]}];このシードは生成器の状態に影響し,結果の
値にも何等かの影響を与える:
pval = DistributionFitTest[data, NormalDistribution[], "CramerVonMises"];Show[ListLinePlot[pts, PlotRange -> {Min[pts[[All, 2]]], Max[pts[[All, 2]]]}, FrameLabel -> {"Seed", "P-Value"}, Frame -> True, AxesOrigin -> {0, 0}], Graphics[{Dashed, Line[{{0, pval}, {100, pval}}]}]]モンテカルロシミュレーションは
の下に多くの検定統計量を生成する:
mcSamp = 250;seed = 9;n = 50;𝒟 = NormalDistribution[μ, σ];data = RandomVariate[NormalDistribution[1, 2], n];ℋ = DistributionFitTest[data, 𝒟, "HypothesisTestData", Method -> {"MonteCarlo", "MonteCarloSamples" -> mcSamp, "RandomSeed" -> seed}];simDat = BlockRandom[SeedRandom[seed];RandomVariate[ℋ["FittedDistribution"], {mcSamp, n}]];testDist = DistributionFitTest[#, 𝒟, "TestStatistic"]& /@ simDat;SmoothHistogram[testDist, Filling -> Axis]Probability[t > ℋ["TestStatistic"], tEmpiricalDistribution[testDist]]ℋ["PValue"]SignificanceLevel (2)
data = BlockRandom[SeedRandom[234];RandomVariate[NormalDistribution[0, 1], 100]];DistributionFitTest[data, Automatic, "TestConclusion"]//TraditionalFormDistributionFitTest[data, Automatic, "TestConclusion", SignificanceLevel -> 0.001]//TraditionalForm有意水準は"ShortTestConclusion"にも使われる:
data = BlockRandom[SeedRandom[234];RandomVariate[NormalDistribution[0, 1], 100]];ℋ1 = DistributionFitTest[data, Automatic, "HypothesisTestData", SignificanceLevel -> .05];ℋ2 = DistributionFitTest[data, Automatic, "HypothesisTestData", SignificanceLevel -> .001];ℋ1["ShortTestConclusion"]ℋ2["ShortTestConclusion"]アプリケーション (12)
data = {87, 91, 97 , 80, 71, 86, 72, 93, 83, 73, 76};
𝒹 = NormalDistribution[82, 9];ℋ = DistributionFitTest[data, 𝒹, "HypothesisTestData"];ℋ["TestDataTable"]QuantilePlotの経験的累積分布関数と理論的累積分布関数を視覚的に比較する:
QuantilePlot[data, 𝒹]Plot[{CDF[ℋ["FittedDistribution"], x], CDF[EmpiricalDistribution[data], x]}//Evaluate, {x, 50, 110}, Exclusions -> None, Filling -> {1 -> {2}}, Frame -> True]snow = ExampleData[{"Statistics", "BuffaloSnow"}];ℋ = DistributionFitTest[snow, Automatic, "HypothesisTestData"];Jarque–Bera ALM検定とShapiro–Wilk検定を使って正規性を算定する:
ℋ["TestDataTable", {"JarqueBeraALM", "ShapiroWilk"}]SmoothHistogramは検定結果と一致する:
Show[SmoothHistogram[snow, PlotStyle -> {Dotted, Orange}], Plot[PDF[ℋ["FittedDistribution"], x], {x, 0, 150}]]QuantilePlotは比較的よいフィットを示している:
QuantilePlot[snow, ℋ["FittedDistribution"]]適合度検定を使ってヒストグラムのような可視化が示すフィットを確かめる:
𝒹 = BetaDistribution[2, 2];
BlockRandom[SeedRandom[1];data = RandomVariate[𝒹, 10000]];Show[Histogram[data, Automatic, "ProbabilityDensity"], Plot[PDF[𝒹, x], {x, 0, 1}, PlotStyle -> Thick]]Kolmogorov–Smirnov検定はヒストグラムが示す適合フィットと一致する:
DistributionFitTest[data, 𝒹, "KolmogorovSmirnov"]最も明るい100個の星の絶対的な大きさが正規分布に従うかどうか調べる:
data = EntityClass["Star", "StarBrightest100"]["AbsoluteMagnitude"];ℋ = DistributionFitTest[data, NormalDistribution[a, b], "HypothesisTestData"];ℋ["TestDataTable", Automatic]Show[SmoothHistogram[data, PlotStyle -> {Dotted, Orange}, PlotRange -> {0, .15}], Plot[PDF[ℋ["FittedDistribution"], x], {x, -15, 10}]]ExampleData[{"Statistics", "UgandaVolcanoes"}, "LongDescription"]data = ExampleData[{"Statistics", "UgandaVolcanoes"}];box1 = {{320, 2760}, {970, 4150}};
box2 = {{1100, 1800}, {1600, 3000}};Show[ListPlot[data, PlotRange -> {{200, 2800}, {500, 5000}}], Graphics[{EdgeForm[Orange], Opacity[0], Rectangle@@Transpose[box1]}], Graphics[{EdgeForm[Gray], Opacity[0], Rectangle@@Transpose[box2]}], AspectRatio -> 1, ImageSize -> Medium]境界までの距離(Distance-to-Boundary)検定を使う:
DistributionFitTest[data, UniformDistribution[box1], {"TestDataTable", "DistanceToBoundary"}]DistributionFitTest[Pick[data, (Boole[1100 ≤ #1[[1]] ≤ 1800 && 1600 ≤ #1[[2]] ≤ 3000]&) /@ data, 1], UniformDistribution[box2], {"TestDataTable", "DistanceToBoundary"}]Szekelyのエネルギー検定を使って2つの多変量データ集合を比較する:
ExampleData[{"Statistics", "SwissBankNotes"}, "ColumnDescriptions"]data = ExampleData[{"Statistics", "SwissBankNotes"}];counterfeit = Pick[data[[All, 1 ;; 6]], data[[All, -1]], 1];
genuine = Pick[data[[All, 1 ;; 6]], data[[All, -1]], 0];DistributionFitTest[counterfeit, genuine, {"TestDataTable", "SzekelyEnergy"}]Table[SmoothHistogram[{counterfeit[[All, i]], genuine[[All, i]]}, PlotLabel -> Row[{"Measure:", i}]], {i, 6}]Subscript[rad, 1] = {1.77, 3.63, 5.21, 5.54, 0.17, 6.26, 2.84, 2.1, 5.73, 5.13, 2.30, 4.13, 3.56, 0.6, 0.99};Subscript[rad, 2] = {0.96, 0.83, 1.18, 0.97, 1.92, 1.99, 0.94, 0.89, 0.98, 1.33, 0.86, 0.58, 0.73, 1.85, 2.3};Kuiperの検定とWatsonの
検定は円の上での均一性の検定に役立つ:
Table[DistributionFitTest[i, UniformDistribution[{0, 2 Pi}], {"TestDataTable", {"Kuiper", "WatsonUSquare"}}], {i, {Subscript[rad, 1], Subscript[rad, 2]}}]最初のデータ集合はランダムに分布しており,2番目のデータ集合はクラスタ化している:
Table[Show[Graphics[{StandardGray, Circle[]}], ListPlot[{Cos[#], Sin[#]}& /@ i, PlotStyle -> PointSize[.05]]], {i, {Subscript[rad, 1], Subscript[rad, 2]}}]モデルがS&P 500指標の日々の点の変化に適しているかどうか調べる:
sp500 = FinancialData["SP500", All];
data = Log[Ratios[sp500]]Histogram[data, PlotRange -> {{-.05, .05}, All}]ℋ = DistributionFitTest[data, LaplaceDistribution[a, b], "HypothesisTestData"];ℋ["TestDataTable", All]非常に大きいデータ集合では,検定分布からの小さい偏差も容易に検出される:
Show[SmoothHistogram[data, PlotStyle -> Orange, PlotRange -> {0, 2}], Plot[PDF[ℋ["FittedDistribution"], x], {x, Min[data], Max[data]}]]LinearModelFitからの残差を正規性について調べる:
data = ExampleData[{"Statistics", "OldFaithful"}];lm = LinearModelFit[data, x, x];ℋ = DistributionFitTest[res = lm["FitResiduals"], Automatic, "HypothesisTestData"];Shapiro–Wilk検定は残差が正規分布に従っていないことを示している:
ℋ["TestDataTable", "ShapiroWilk"]QuantilePlotでは分布の左裾部に大きい偏差が現れる:
QuantilePlot[res, ℋ["FittedDistribution"]]検定統計量の分布のシミュレーションを行いモンテカルロの
値を得る:
mcSamples = RandomVariate[𝒹 = NormalDistribution[], {2500, 25}];Subscript[ℋ, MC] = DistributionFitTest[#, 𝒹, "HypothesisTestData"]& /@ mcSamples;T = Table[i["TestStatistic", "AndersonDarling"], {i, Subscript[ℋ, MC]}];SmoothHistogramを使って検定統計量の分布を可視化する:
SmoothHistogram[T, PlotLabel -> "A-D Distribution: n = 25", Filling -> Axis]Anderson–Darling検定からモンテカルロの
値を得る:
data = RandomReal[𝒹, 25];ℋ = DistributionFitTest[data, 𝒹, "HypothesisTestData"];t = ℋ["TestStatistic", "AndersonDarling"]Subscript[P, MC] = Length[Cases[T, x_ /; x > t]] / Length[T]//NDistributionFitTestによって返された
値と比較する:
ℋ["PValue", "AndersonDarling"] - Subscript[P, MC]data = Table[RandomVariate[StudentTDistribution[2], {500, i}], {i, n = {5, 7, 10, 15, 20, 25, 30, 40, 50}}];ℋ = Table[DistributionFitTest[data[[i, j]], NormalDistribution[], "ShapiroWilk"], {i, Length[data]}, {j, Length[data[[i]]]}];pC = Interpolation[Transpose[{n, Table[Probability[x ≤ 0.05, xi], {i, ℋ}]}], InterpolationOrder -> 1];Plot[pC[x], {x, 5, 50}, PlotRange -> {0, 1}, Ticks -> {n, Automatic}, AxesOrigin -> {0, 0}]もとになる分布がStudentTDistribution[2],検定規模が0.05,サンプルサイズが35の場合のShapiro–Wilk検定の検出力を推定する:
pC[35]//Nカーネル密度推定を使ったデータ集合の平滑化で,データのもとになっている分布の構造を保存しつつ,ノイズを除去することができる.以下で同じ分布からの2つのデータ集合を作る:
data1 = BlockRandom[SeedRandom[1];RandomVariate[NormalDistribution[], 100]];
data2 = BlockRandom[SeedRandom[14];RandomVariate[NormalDistribution[], 100]];平滑化されていないデータはもとになった分布のノイズの多い推定を与える:
Plot[Evaluate[CDF[EmpiricalDistribution[#], x]& /@ {data1, data2}], {x, -5, 5}, Exclusions -> None]DistributionFitTest[data1, data2]𝒟 = SmoothKernelDistribution[data2];Plot[{CDF[EmpiricalDistribution[data1], x], CDF[𝒟, x]}, {x, -5, 5}, Exclusions -> None]平滑化によってノイズが少なくなり,5%レベルで正しい結論が導かれる:
DistributionFitTest[data1, 𝒟]特性と関係 (16)
デフォルトで,一変量データはNormalDistributionと比較される:
data = RandomVariate[CauchyDistribution[0, 1], 10];ℋ1 = DistributionFitTest[data, Automatic, "HypothesisTestData"];
ℋ2 = DistributionFitTest[data, NormalDistribution[μ, σ], "HypothesisTestData"];{ℋ1["FittedDistribution"], ℋ2["FittedDistribution"]}デフォルトで,多変量データはMultinormalDistributionと比較される:
data = RandomVariate[BinormalDistribution[.5], 10];ℋ1 = DistributionFitTest[data, Automatic, "HypothesisTestData"];
ℋ2 = DistributionFitTest[data, MultinormalDistribution[{μ1, μ2}, IdentityMatrix[2]], "HypothesisTestData"];分布母数が指定されていない場合,それはデータから推定される:
{ℋ1["FittedDistribution"], ℋ2["FittedDistribution"]}//TraditionalForm検定分布で母数が指定されていない場合には最尤度推定が使われる:
data = RandomVariate[ExponentialDistribution[3], 10^3];ℋ = DistributionFitTest[data, ExponentialDistribution[λ], "FittedDistribution"]EstimatedDistribution[data, ExponentialDistribution[λ]]data = RandomVariate[NormalDistribution[], {1000, 10}];pvals = Table[DistributionFitTest[i, NormalDistribution[], "CramerVonMises"], {i, data}];検定サイズを0.05にすると,結果として約5%の
が誤って棄却される:
Probability[x ≤ 0.05, xpvals]//NタイプIIのエラーは,誤りであるにもかかわらず
が棄却されない場合に起る:
data = RandomVariate[CauchyDistribution[0, 1], {1000, 25}];ℋs = Table[DistributionFitTest[i, NormalDistribution[a, b], "AndersonDarling"], {i, data}];ListLinePlot[Table[{sz, Probability[x > sz, xℋs]//N}, {sz, Range[0.001, .25, .01]}], AxesLabel -> {"Size", "Type II Error"}]有効な検定の
値は
のもとでUniformDistribution[{0,1}]である:
data = RandomVariate[NormalDistribution[], {1000, 25}];tests = {"AndersonDarling", "CramerVonMises", "KolmogorovSmirnov", "Kuiper"};p = Table[DistributionFitTest[i, NormalDistribution[], tests], {i, data}]//Transpose;Table[Histogram[p[[i]], Automatic, "ProbabilityDensity", PlotLabel -> tests[[i]]], {i, 4}]Kolmogorov–Smirnov検定を使って一様性を調べる:
TableForm[Table[{tests[[i]], Round[DistributionFitTest[p[[i]], UniformDistribution[{0, 1}], "KolmogorovSmirnov"], .001]}, {i, 4}]]各検定の検出力は
が誤りであるときにこれを棄却する確率である:
data = RandomVariate[CauchyDistribution[0, 1], {1000, 25}];tests = {"AndersonDarling", "CramerVonMises", "JarqueBeraALM", "KolmogorovSmirnov", "Kuiper", "PearsonChiSquare", "ShapiroWilk", "WatsonUSquare"};p = Table[DistributionFitTest[i, Automatic, tests], {i, data}]//Transpose;これらの条件下では,ピアソン(Pearson)の
検定の検出力が最も低い:
N[Table[{tests[[i]], Probability[x ≤ 0.05, xp[[i]]]}, {i, Length[tests]}]]//TableForm各検定の検出力はサンプルサイズが小さくなるに従って減少する:
data = RandomVariate[CauchyDistribution[0, 1], {500, 10}];tests = {"AndersonDarling", "CramerVonMises", "JarqueBeraALM", "KolmogorovSmirnov", "Kuiper", "PearsonChiSquare", "ShapiroWilk", "WatsonUSquare"};p = Table[DistributionFitTest[i, Automatic, tests], {i, data}]//Transpose;検定の中にはサンプルサイズが小さくても他の検定よりよい結果を出すものもある:
N[Table[{tests[[i]], Probability[x ≤ 0.05, xp[[i]]]}, {i, Length[tests]}]]//TableForm場所による差の検出に向いている検定とそうではない検定がある:
data = RandomVariate[NormalDistribution[1, 1], {500, 25}];tests = {"AndersonDarling", "CramerVonMises", "KolmogorovSmirnov", "Kuiper", "PearsonChiSquare", "WatsonUSquare"};p = Table[DistributionFitTest[i, NormalDistribution[0, σ], tests], {i, data}]//Transpose;N[Table[{tests[[i]], Probability[x ≤ 0.05, xp[[i]]]}, {i, Length[tests]}]]//TableFormdata = RandomVariate[NormalDistribution[1, 1], {500, 25}];tests = {"AndersonDarling", "CramerVonMises", "KolmogorovSmirnov", "Kuiper", "PearsonChiSquare", "WatsonUSquare"};p = Table[DistributionFitTest[i, NormalDistribution[μ, 2], tests], {i, data}]//Transpose;N[Table[{tests[[i]], Probability[x ≤ 0.05, xp[[i]]]}, {i, Length[tests]}]]//TableFormピアソンの
検定の検出力を高めるためには大きいサンプルサイズが必要である:
data1 = RandomVariate[StudentTDistribution[2], {500, 25}];
data2 = RandomVariate[StudentTDistribution[2], {500, 50}];
data3 = RandomVariate[StudentTDistribution[2], {500, 100}];p1 = Table[DistributionFitTest[i, Automatic, "PearsonChiSquare"], {i, data1}];
p2 = Table[DistributionFitTest[i, Automatic, "PearsonChiSquare"], {i, data2}];
p3 = Table[DistributionFitTest[i, Automatic, "PearsonChiSquare"], {i, data3}];{Probability[x ≤ 0.05, xp1], Probability[x ≤ 0.05, xp2], Probability[x ≤ 0.05, xp3]}//Ndata = RandomVariate[StudentTDistribution[2], {500, 100}];tests = {"AndersonDarling", "CramerVonMises", "JarqueBeraALM", "KolmogorovSmirnov", "Kuiper", "PearsonChiSquare", "ShapiroWilk", "WatsonUSquare"};p = Table[DistributionFitTest[i, NormalDistribution[a, b], tests], {i, data}]//Transpose;Jarque–Bera ALM検定とShapiro–Wilk検定はサンプルが小さい場合の検出力が最も大きい:
N[Table[{tests[[i]], Probability[x ≤ 0.05, xp[[i]]]}, {i, Length[tests]}]]//TableFormdata = RandomVariate[NormalDistribution[], 100];ℋ1 = DistributionFitTest[data, NormalDistribution[1, 10], "ShapiroWilk"]ℋ2 = DistributionFitTest[data, NormalDistribution[10, 1], "ShapiroWilk"]調べる分布の特性によって異なる検定を使う.ある特定の検定に基づいた結果が,常に他の検定に基づいた結果と一致するとは限らない:
data = RandomVariate[StudentTDistribution[3], {100, 50}];tests = {"Kuiper", "CramerVonMises", "KolmogorovSmirnov", "PearsonChiSquare"};pvs = Table[(DistributionFitTest[#1, Automatic, i]&) /@ data, {i, tests}];α = 0.2;conclusions[α_] := Show[Graphics[{Opacity[.5], Lighter[Purple], Rectangle[{0, 0}, {α, α}]}], Graphics[{Opacity[.5], Orange, Rectangle[{α, α}, {1, 1}]}], Graphics[{Opacity[.1], Gray, Rectangle[{0, α}, {α, 1}]}], Graphics[{Opacity[.1], Gray, Rectangle[{α, 0}, {1, α}]}]];緑色の領域は両方の検定による正しい結果である.両方の検定でタイプIIのエラーが認められた場合には,赤色の領域に点が置かれている.灰色の領域は検定結果が一致しない部分である:
MapThread[Show[conclusions[α], ListPlot[Transpose[{pvs[[#1]], pvs[[#2]]}], AspectRatio -> 1], Frame -> True, FrameLabel -> {tests[[#1]], tests[[#2]]}]&, {{1, 1, 1, 2, 2, 3}, {2, 3, 4, 3, 4, 4}}]data = RandomVariate[NormalDistribution[], {1000, 35}];ℋ1 = Table[DistributionFitTest[i, NormalDistribution[μ, σ], "TestData"], {i, data}]//Transpose;{Histogram[ℋ1[[1]], Automatic, "PDF", PlotLabel -> "Test Statistics"], Histogram[ℋ1[[2]], Automatic, "PDF", PlotLabel -> "P-Values"]}ℋ2 = Table[DistributionFitTest[i, EstimatedDistribution[i, NormalDistribution[μ, σ]], "TestData"], {i, data}]//Transpose;{Histogram[ℋ2[[1]], Automatic, "PDF", PlotLabel -> "Test Statistics"], Histogram[ℋ2[[2]], Automatic, "PDF", PlotLabel -> "P-Values"]}分布のフィット検定は,入力がTimeSeriesのときにのみ値に使うことができる:
ts = TemporalData[TimeSeries, {{{1.224578634529677, 0.47929635789978015, 0.6572781300178168,
0.21496048742669355, 0.7299608014554928, -0.2495111111278263, -1.3286551762002712,
0.552725018274874, 0.19272112205837066, 1.1809144012420882, -1.1671 ... 40938613662046, 1.052394590214582, 0.9345044123980388, 0.38537803109557855,
-0.48660931166089394, -0.71203560340161}}, {{0, 100, 1}}, 1, {"Continuous", 1},
{"Discrete", 1}, 1, {ValueDimensions -> 1, ResamplingMethod -> None}}, False, 10.1];DistributionFitTest[ts, Automatic, {"TestDataTable", All}]DistributionFitTest[ts["Values"], Automatic, {"TestDataTable", All}]%% == %考えられる問題 (5)
検定によっては予め母数が指定されていなければならず,有効な
について推定されてはならないものもある:
data = RandomVariate[ArcSinDistribution[{-1, 4}], 10];ℋ = DistributionFitTest[data, ArcSinDistribution[{a, b}], "AndersonDarling"]DistributionFitTest[data, ArcSinDistribution[{a, b}], "AndersonDarling", Method -> "MonteCarlo"]ℋ2 = DistributionFitTest[RandomVariate[NormalDistribution[], 10], NormalDistribution[a, b], "AndersonDarling"]Jarque–Bera ALM検定は有効な
値のためにはサンプルサイズが最低でも10でなければならない:
data = RandomVariate[NormalDistribution[], 5];DistributionFitTest[data, Automatic, "JarqueBeraALM"]DistributionFitTest[data, Automatic, "JarqueBeraALM", Method -> "MonteCarlo"]Kolmogorov–Smirnov検定とKuiper検定はデータ間のタイを予想しない:
data = {1., 2., 1.5, 2., 1.75, 2.5, 3.};DistributionFitTest[data, Automatic, {"TestDataTable", {"KolmogorovSmirnov", "Kuiper"}}]Jarque–Bera ALM検定とShapiro–Wilk検定は正規性の検定にのみ有効である:
data = RandomVariate[BetaDistribution[1, 2], 10];DistributionFitTest[data, BetaDistribution[a, b], {"TestDataTable", {"JarqueBeraALM", "ShapiroWilk"}}]data = RandomVariate[𝒹 = DiscreteUniformDistribution[{1, 10}], 100];ℋ = DistributionFitTest[data, 𝒹, "HypothesisTestData"];ℋ["TestDataTable", {"CramerVonMises", "AndersonDarling", "KolmogorovSmirnov", "Kuiper", "WatsonUSquare"}]ℋ["TestDataTable", "PearsonChiSquare"]おもしろい例題 (1)
data = RandomVariate[𝒹 = NormalDistribution[], {5000, 50}];ℋ = DistributionFitTest[#, 𝒹, "HypothesisTestData"]& /@ data;T = Table[h["TestStatistic", i], {h, ℋ}, {i, tests = {"AndersonDarling", "CramerVonMises", "Kuiper", "KolmogorovSmirnov", "PearsonChiSquare", "WatsonUSquare"}}]//Transpose;Table[SmoothHistogram[T[[i]], PlotLabel -> tests[[i]], Filling -> Axis], {i, 6}]関連項目
EstimatedDistribution FindDistributionParameters HypothesisTestData LocationTest VarianceTest IndependenceTest LogRankTest AndersonDarlingTest KolmogorovSmirnovTest CramerVonMisesTest JarqueBeraALMTest KuiperTest MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest BaringhausHenzeTest PearsonChiSquareTest ShapiroWilkTest WatsonUSquareTest
関連するガイド
-
▪
- 確率・統計における数量 ▪
- 仮説検定 ▪
- 確率変数 ▪
- 確率・統計 ▪
- 信頼性解析 ▪
- 統計的データ解析 ▪
- 科学的データ解析 ▪
- 生命科学と医学のデータと計算 ▪
- 表形式モデリング
テキスト
Wolfram Research (2010), DistributionFitTest, Wolfram言語関数, https://reference.wolfram.com/language/ref/DistributionFitTest.html (2015年に更新).
CMS
Wolfram Language. 2010. "DistributionFitTest." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2015. https://reference.wolfram.com/language/ref/DistributionFitTest.html.
APA
Wolfram Language. (2010). DistributionFitTest. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/DistributionFitTest.html
BibTeX
@misc{reference.wolfram_2026_distributionfittest, author="Wolfram Research", title="{DistributionFitTest}", year="2015", howpublished="\url{https://reference.wolfram.com/language/ref/DistributionFitTest.html}", note=[Accessed: 17-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_distributionfittest, organization={Wolfram Research}, title={DistributionFitTest}, year={2015}, url={https://reference.wolfram.com/language/ref/DistributionFitTest.html}, note=[Accessed: 17-August-2026]}