JMP はどのようにして AICc を計算しますか?やあ。 JMP がディストリビューション プラットフォームまたは Fit Censored 関数で AICc をどのように計算するのか知りたいのですが? 調査するウィキこの形式であるべきであることを示唆しています:
AICc = 2k - 2*Ln(最尤度) + (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 はデータと近似分布の間の残差の二乗和です。
同じトピック内の別の数式は次のとおりです。
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
Wiki からの計算式 AICc = +5.51
AICc 後の式 1 = -763
AICc 後の式 2 = -661
初期データはランダム関数から生成されるため、結果は多少異なる場合があります。 それにもかかわらず、これらの式のどれも他の式と一致しないことは明らかです。 最も重要なのは、配信プラットフォームで与えられる価値に同意していないことです。
それで、ディストリビューション プラットフォームが AICc を計算する方法を知っている人はいますか? 私は独自のディストリビューションをいくつか開発しており、これらを JMP に存在するディストリビューションと比較したいので、これが必要です。
FTR、Catalina OS を搭載した Mac で JMP Pro 15.2.1 を使用。
ありがとう。
データアクセスデータの探索と視覚化品質およびプロセスエンジニアリング結果の共有と伝達Re: JMP はどのようにして AICc を計算しますか?尤度および SSE の計算が間違っているため、2 番目、3 番目、4 番目の AICc も間違っています。 3 番目と 4 番目の式はペナルティの異なる近似を使用しているため、一致しません。
Wikipedia の記事と一致する現在の公式を参照してください。
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 );Re: JMP はどのようにして AICc を計算しますか?これは、? を選択すると表示される AIC のヘルプへの直接リンクです。ツールを選択し、AIC テーブルをクリックします。
AIC ヘルプ