J'essaie de développer un code OxMetrics pour un modèle logit multinomial (ou conditionnel) (comme décrit dans http://data.princeton.edu/wws509/notes/c6s2.html). Je suis nouveau à OxMetrics et j'ai encore du mal à comprendre comment fonctionne la routine d'optimisation (MaxBFGS).OxMetrics - Modèle logit conditionnel
Toute aide est plus que bienvenue!
// FUNCTION FOR MULTINOMIAL LOGIT MODELLING
//X = Independent variables (e.g. product features)
//Y = Dependent variable (i.e. discrete choices (0/1))
//N = Total number of individuals (N=500)
//T = Number of observations (choice tasks) per respondent (T=20)
//J = Number of products per task (J=2 => choice between two options)
//sv => starting values
//llik => model log-likelihood
LOGIT(const sv, const llik, X, Y, N, T, J)
{
decl num, den, prbj, prbi, maty;
num = reshape(exp(X*sv[0:6]), N*T, J);
den = sumr(num);
prbj = num ./ den;
maty = reshape(Y .== 1, N*T, J);
prbi = sumr(prbj .* maty);
llik[0] = -sumc(log(prbi));
return llik[0];
}
main()
{
decl data, N, T, J, X, Y, sv, dFunc, fit;
data = loadmat("C:/Users/.../Data/data.csv");
X = data[][33] ~ data[][5:10];
Y = data[][12];
N = 500;
T = 20;
J = 2;
sv = <0;0;0;0;0;0;0>;
println ("\nEstimating using MaxBFGS");
fit = MaxBFGS(LOGIT, X=X, Y=Y, N=N, T=T, J=J, &sv, &dFunc, 0, TRUE);
println (MaxConvergenceMsg(fit), " at parameters ", sv', "with function value ", double(dFunc));
}
mise en œuvre de Nice, et thks de la partager. Une petite idée pour l'améliorer: vous pouvez encapsuler votre code dans une classe pour éviter les variables globales comme indiqué dans 'probit3.ox'. Par ailleurs, vous devriez adopter un exemple spécifique de convention de nommage (https://en.wikipedia.org/wiki/Naming_convention_%28programming%29): puisque la variable 'Halton' est une matrice, vous pouvez utiliser' mHalton' où 'm' se trouve pour la matrice.Idem utilise 'iN' au lieu de' N' où 'i' représente un entier,' v' un vecteur, 'd' un double .... Cela rend le code beaucoup plus lisible. – Malick