Ciao. Vorrei sapere in che modo JMP calcola AICc nella piattaforma di distribuzione o nella funzione Fit Censored? Ricercare wiki suggerisce che dovrebbe essere questo formato:
AICc = 2k - 2 * Ln (massima verosimiglianza) + (2k ^ 2 + 2k) / (n - k - 1)
dove n = # datapoint, k = # fit parameters.
Tuttavia, in questo argomento sono previste altre 2 diverse formule.
AICc2 = n * Ln (sse / n) + 2 * k + ( 2 * k ^ 2 + 2 * k) / (n - k - 1 );
dove sse è la somma dei quadrati dei residui tra i dati e la distribuzione adattata
E l'altra formula nello stesso argomento:
AICc3 = n * Ln (sse / n) + (n * (n + k)) / (nk- 2 );
Non ho trovato nessuna di queste formule d'accordo tra loro. Per verificare la loro coerenza, ho implementato questo script:
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);I miei risultati:
Piattaforma di distribuzione AICc = +285
Formula dal wiki AICc = +5,51
Fomula1 nel post AICc = -763
Formula2 nel post AICc = -661
Poiché i dati iniziali vengono generati da una funzione casuale, i risultati possono variare leggermente. Tuttavia, dovrebbe essere evidente che nessuna di queste formule è d'accordo con le altre. Soprattutto, non sono d'accordo con il valore fornito nella piattaforma di distribuzione.
Quindi, qualcuno sa come la piattaforma di distribuzione calcola AICc? Ne ho bisogno perché ho sviluppato alcune delle mie distribuzioni e mi piacerebbe confrontarle con quelle esistenti in JMP.
FTR, utilizzando JMP Pro 15.2.1 su un Mac con sistema operativo Catalina.
Grazie.
Ecco il link diretto all'Help su AIC che ho raggiunto selezionando il? strumento e quindi facendo clic sulla tabella AIC
L'Aiuto AIC
Il calcolo della probabilità e dell'ESS non sono corretti, quindi anche il secondo, il terzo e il quarto AICc non sono corretti. La terza e la quarta formula utilizzano approssimazioni diverse della penalità, quindi non saranno d'accordo.
Si prega di consultare queste formule attuali, che concordano con l'articolo su 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 );