JMPはどのようにAICcを計算しますか?こんにちは。 JMPがDistributionプラットフォームまたはFitCensored関数でAICcを計算する方法を知りたいですか? 調査するウィキこの形式である必要があることを示唆しています:
AICc = 2k-2 * Ln(maxlikelihood)+(2k ^ 2 + 2k)/(n-k-1)
ここで、n =#データポイント、k =#パラメータに適合します。
しかし、これではトピック別の2つの異なる式が提供されています。
AICc2 = n * Ln (sse / n)+ 2 * k +( 2 * k ^ 2 + 2 * k)/(n-k- 1 );
ここで、sseは、データと近似分布の間の残差の2乗の合計です。
そして、同じトピックの他の式:
AICc3 = n * Ln (sse / n)+(n *(n + k))/(nk- 2 );
私はこれらの公式のどれも互いに一致することを発見しませんでした。 それらの一貫性を確認するために、次のスクリプトを実装しました。
Names Default to Here(1);
dt = New Table("Test",
Add Rows(100),
New Column("Random Normal Data", Numeric,
Formula(Random Normal(0, 1))
)
);
dt << Run Formulas;
Wait(0.001);
:Random Normal Data << Suppress Eval; //So data doesn't change between computations.
//Compute AICc from Distribution platform
dist = dt << Distribution(Column("Random Normal Data"));
dist << Fit Distribution(Normal(Density Curve(1))); //AICc = +285
//Independently compute AICc using method described here: https://en.wikipedia.org/wiki/Akaike_information_criterion
x_vec = :Random Normal Data << Get Values;
mu = Mean(x_vec);
sig = Stddev(x_vec);
maxlikelihood = Normal Distribution(mu, mu, sig); //e.g. 0.5
k=2;
n=100;
aicc1 = 2*k - 2*Ln(maxlikelihood) + (2*k^2 + 2*k)/(n - k - 1); //AICc = +5.51
Show(aicc1);
//Independently compute AICc using method described in JMP Forum: https://community.jmp.com/t5/Discussions/how-do-you-get-an-r2-and-AICc-value-for-a-custom-nonlinear/m-p/187375/highlight/true#M40622
ord = Rank(x_vec);
xsort = x_vec[ord];
p_vec = (1::n)`/n;
sse = SSQ(p_vec - Normal Distribution(xsort, mu, sig));
aicc2 = n*Ln(sse/n) + 2*k + (2*k^2 + 2*k)/(n - k - 1); //AICc = -763
Show(aicc2);
//Independently compute AICc using Other method described in JMP Forum: https://community.jmp.com/t5/Discussions/how-do-you-get-an-r2-and-AICc-value-for-a-custom-nonlinear/m-p/9715
aicc3 = n*Ln(sse/n) + (n*(n+k))/(n-k-2); //AICc = -661
Show(aicc3);私の結果:
配信プラットフォームAICc = +285
ウィキAICcからの式= + 5.51
ポストAICcのFomula1 = -763
ポストAICcのフォーミュラ2 = -661
初期データはランダム関数から生成されるため、結果は多少異なる場合があります。 それにもかかわらず、これらの公式のいずれも他の公式と一致しないことは明らかです。 最も重要なことは、彼らは流通プラットフォームで与えられた価値に同意しないということです。
では、DistributionプラットフォームがAICcを計算する方法を知っている人はいますか? 独自のディストリビューションをいくつか開発したので、これが必要です。これらをJMPに存在するものと比較したいと思います。
FTR、CatalinaOSを搭載したMacでJMPPro15.2.1を使用。
ありがとう。
スクリプティングRe:JMPはどのようにAICcを計算しますか?これは、?を選択してアクセスしたAICのヘルプへの直接リンクです。ツールをクリックしてからAICテーブルをクリックします
AICヘルプ
Re:JMPはどのようにAICcを計算しますか?尤度とSSEの計算が正しくないため、2番目、3番目、および4番目のAICcも正しくありません。 3番目と4番目の式は、ペナルティの異なる近似を使用するため、同意しません。
ウィキペディアの記事と一致するこれらの現在の公式を参照してください。
Names Default To Here( 1 );
n = 100;
Random Reset( 27513 );
y = J( n, 1, Random Normal() );
dt = New Table( "Test AICc Formula", New Column( "Random Normal Data", Numeric, Continuous, Values( y ) ) );
// Compute AICc with Distribution platform
dist = dt << Distribution( Y( :Random Normal Data ) );
dist << Fit Distribution( Normal( Density Curve( 1 ) ) );
distr = dist << Report;
aiccFromDistribution = distr["Parameter Estimates"][Number Col Box( 4 )] << Get( 2 );
Show( aiccFromDistribution );
dist << Close Window;
// Compute AICc with Fit Least Squares platform
fit = dt << Fit Model(
Y( :Random Normal Data ),
Effects,
Personality( "Standard Least Squares" ),
Emphasis( "Minimal Report" ),
Run(
:Random Normal Data << {Summary of Fit( 1 ), Analysis of Variance( 1 ),
Parameter Estimates( 1 ), Lack of Fit( 0 ), Scaled Estimates( 0 ),
Plot Actual by Predicted( 0 ), Plot Regression( 0 ),
Plot Residual by Predicted( 0 ), Plot Studentized Residuals( 0 ),
Plot Effect Leverage( 0 ), Plot Residual by Normal Quantiles( 0 ),
Box Cox Y Transformation( 0 ), AICc( 1 )}
)
);
fitr = fit << Report;
aiccFromOLS = fitr["Summary of Fit"][NumberColBox(2)] << Get( 1 );
sse = fitr["Analysis of Variance"][NumberColBox(2)] << Get( 2 );
Show( aiccFromOLS );
fit << Close Window;
// Compute AICc using method described in JMP Help (https://www.jmp.com/support/help/en/16.0/#page/jmp/likelihood-aicc-and-bic.shtml#ww293087)
loglikelihood = Summation( i = 1, n, Log( Normal Density( y[i] ) ) );
k = 2;
aiccFromHelp = -2*loglikelihood + 2*k + (2*k*(k+1)/(n-(k+1)));
Show( aiccFromHelp );
//Independently compute AICc using method described in JMP Forum: https://community.jmp.com/t5/Discussions/how-do-you-get-an-r2-and-AICc-value-for-a-custom-nonlinear/m-p/187375/highlight/true#M40622
sse = Sum( (y - Mean( y )) ^ 2 );
aiccFromForum = n*Log( sse/n ) + 2*k + (2*k*(k+1)/(n-(k+1))) + n*Log( 2*Pi() ) + n;
Show( aiccFromForum );