Je voudrais courir une régression logistique robuste (Robit) à Stan. Le modèle est suggéré dans la "analyse des données en utilisant la régression et les méthodes de régression et multisevel" de Gelman & Hill (2006, p. 124), mais je ne sais pas comment la mettre en œuvre. J'ai vérifié Le référentiel GitHub's de Stan et Le manuel de référence , mais malheureusement je suis toujours embrouillé. Voici un seul code que j'ai utilisé pour modéliser une régression logistique régulière. Que dois-je y ajouter pour que les erreurs suivent, disent une distribution t T avec 7 degrés de liberté? Par une chance, ce serait la même procédure si j'exécute une analyse multiniveaux? Merci! p> p>
4 Réponses :
Mise à jour: Ma traduction d'un exemple de JohnMyleswhswhite de Stan Synthax ne fonctionne pas. Je ne comprends pas bien Stan Synthax pour traduire le code. Peut-être que quelqu'un peut aider? Ci-dessous la réponse d'origine.
Si vous vérifiez le EXEMPLE JOHNMYLESWHITE , mentionné par jbaums, vous pouvez voir que l'élément de code important est le suivant: p> Comme vous pouvez le constater, inscrit à l'aide d'Invlogit pour calculer des probabilités, il utilise la distribution t (en fait, le t cumulatif). Dans Stan, il suffit d'utiliser: p> df_inv ~ uniform(0, 0.5);
df <- 1 / df_inv;
sigma_z <- sqrt((df-2)/df);
Page 26 du Manuel de référence Stan 2.4:
y ~ bernoulli(Phi( beta_0 + beta_1 * x1 + beta_2 * x2 ))
Si je ne me trompe pas, Phi est pour la distribution normale et l'OP a demandé à T distribution.
J'explique que dans ma réponse, et Stan a une fonction étudiant_t_cdf code>
Si vous pouviez fournir un lien à la réponse sur la liste de diffusion Stan, je vous accorderai la prime. Et, je n'ai pas la signification du 10 code> dans
binomial logit (10, ... code>.
Merci pour votre commentaire, Bernd. Le lien a été ajouté ci-dessus et je leur ai également demandé de clarifier ce point.
A ajouté le commentaire de Luc à la réponse principale.
Merci, a du sens. Je n'ai pas lu le code très soigneusement et négligé le rbinom (100,10, pr) code> partie.
Je dois manquer quelque chose, mais j'ai eu du mal à adapter la solution que Danilofreire a posé de Luc. Donc, je viens de traduire un modèle de Jags.
Je pense que c'est correct, malgré la recherche d'un peu différent de la solution de Luc. p>
Merci pour la réponse, Paulstey. Ici, votre code fonctionne parfaitement et je ne sais pas si je devrais accepter la réponse de Luc ou le vôtre comme le plus utile. Vos fonctionnent bien!
Merci, Danilofreeire. Comme je l'ai dit, je ne peux pas réclamer aucun niveau de connaissances profondément à ce sujet, mais je n'ai tout simplement pas compris le modèle de Luc. Celui-ci est une adaptation plus directe des modèles Robits que j'ai écrits dans Jags. Et je ne peux pas dire grand chose à propos de la vitesse non plus, car le modèle de Luc utilise du code vectoriel.
Cela ressemble à la bonne réponse à moi. Les 0 et 1 dans les derniers arguments sont l'emplacement et l'échelle, ce qui définit donc une échelle à 1. La quantité de robustesse serait alors contrôlée par les degrés de paramètre de liberté NU. Je devrais avertir tout le monde que nos CDF ne sont pas très rapides comparés à la logit ou même probit (phi).
Désolé, je ne connais pas la réponse, mais vous voudrez peut-être corriger votre code dans la ligne
df = data.list (n = 100, y = y, x1 = x1, x2 = x2) code>. Il n'y a pas de
data.list () code> dans r; Il devrait lire:
df = liste (n = 100, y = y, x1 = x1, x2 = x2) code>.
Fwiw, @johnmyleswhite a un exemple de Jags de Robit Regression ici a>.