Ciao. Vorrei sapere come JMP calcola AICc nella piattaforma di distribuzione o nella funzione Fit Censored? Ricercare wiki suggerisce che dovrebbe essere questo formato:
AICc = 2k - 2*Ln(maxverosimiglianza) + (2k^2 + 2k)/(n - k - 1)
dove n = # datapoint, k = # parametri di adattamento.
Tuttavia, in questo argomento vengono fornite altre 2 formule diverse.
AICc2 = n* ln (s/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 verificarne la 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
Formula1 in post AICc = -763
Formula2 in 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 concorda con le altre. Soprattutto, non sono d'accordo con il valore dato 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 vorrei confrontarle con quelle esistenti in JMP.
FTR, utilizzando JMP Pro 15.2.1 su un Mac con sistema operativo Catalina.
Grazie.
Il calcolo della probabilità e SSE non sono corretti, quindi anche il secondo, il terzo e il quarto AICc sono errati. 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 in 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 );Ecco il link diretto all'Help su AIC a cui sono arrivato selezionando il ? strumento e quindi cliccando sulla tabella AIC
L'Aiuto AIC