Salut. J'aimerais savoir comment JMP calcule l'AICc dans la plate-forme de distribution ou dans la fonction Fit Censored ? La recherche sur wiki suggère que ce devrait être ce format:
AICc = 2k - 2*Ln(maxvraisemblance) + (2k^2 + 2k)/(n - k - 1)
où n = # point de données, k = # paramètres d'ajustement.
Cependant, dans ce sujet 2 autres formules différentes sont fournies.
AICc2 = n* Ln (sse/n) + 2 *k + ( 2 *k^ 2 + 2 *k)/(n - k - 1 );
où sse est la somme des carrés de leurs résidus entre les données et la distribution ajustée
Et l'autre formule dans le même sujet :
AICc3 = n* Ln (sse/n) + (n*(n+k))/(nk- 2 );
Je n'ai trouvé aucune de ces formules pour s'accorder les uns avec les autres. Pour vérifier leur cohérence, j'ai implémenté ce 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);Mes résultats:
Plate-forme de distribution AICc = +285
Formule du wiki AICc = +5,51
Formule1 en post AICc = -763
Formule2 en post AICc = -661
Étant donné que les données initiales sont générées à partir d'une fonction aléatoire, vos résultats peuvent varier quelque peu. Néanmoins, il devrait être évident qu'aucune de ces formules ne s'accorde avec une autre. Plus important encore, ils ne sont pas d'accord avec la valeur donnée dans la plateforme de distribution.
Alors, est-ce que quelqu'un sait comment la plate-forme de distribution calcule l'AICc ? J'en ai besoin car j'ai développé certaines de mes propres distributions et j'aimerais les comparer à celles qui existent dans JMP.
FTR, à l'aide de JMP Pro 15.2.1 sur un Mac avec Catalina OS.
Merci.
Le calcul de la vraisemblance et du SSE sont incorrects, de sorte que les deuxième, troisième et quatrième AICc sont également incorrects. Les troisième et quatrième formules utilisent des approximations différentes de la pénalité, elles ne seront donc pas d'accord.
S'il vous plaît voir ces formules actuelles, qui sont d'accord avec l'article de 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 );Voici le lien direct vers l'aide sur AIC auquel j'ai accédé en sélectionnant le ? outil puis en cliquant sur la table AIC
L'aide AIC