6
votes

Comment gérer un modèle robit à Stan?

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? XXX

Merci!


2 commentaires

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) . Il n'y a pas de data.list () dans r; Il devrait lire: df = liste (n = 100, y = y, x1 = x1, x2 = x2) .


Fwiw, @johnmyleswhite a un exemple de Jags de Robit Regression ici .


4 Réponses :


1
votes

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> xxx pré>

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);


0 commentaires

1
votes

Page 26 du Manuel de référence Stan 2.4:

y ~ bernoulli(Phi( beta_0 + beta_1 * x1 + beta_2 * x2 ))


2 commentaires

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



4
votes

Luc Coffeng m'a envoyé cette réponse sur le Liste de diffusion Stan Et je pensais que je devrais l'ajouter ici. Il a déclaré:

"Adoptez un GLM comme base pour votre régression Robit: substituer juste le terme d'erreur standard avec e ~ étudiant_t (7, 0, sigma_e) , où sigma_e ~ Cauchy (0, 2) ou quelle que soit l'échelle que vous pensiez bien (je ne vais pas aller au-delà de 5 de toute façon que la logit inverse de (-5,5) couvre la majeure partie de l'intervalle [0,1]. En plus de L'échelle de l'erreur T, vous pouvez également spécifier le DF de l'erreur T comme paramètre. Voir ci-dessous pour le code suggéré.

J'espère cependant que vos données contiennent plus d'informations que l'exemple de jouet Vous avez fourni, c'est-à-dire plusieurs observations par personne (comme ci-dessous). Avec une seule observation par personne / unité, le modèle est pratiquement impossible à identifier. "

Il a ensuite fourni l'exemple suivant: < Pré> xxx

Bob Carpenter a également brièvement commenté brièvement la question:

"[...] et oui, vous pouvez faire la même chose dans un cadre hiérarchique, mais vous devez Soyez prudent parce que la modélisation des degrés de liberté peut être délicate compte tenu de la balance s Off à l'infini lorsque vous approchez de la normalité. "

Répondre à la question de Bernd, Luc clarifié pourquoi il a écrit y ~ bernoulli_logit (10 ... dans le code modèle:

"Dans le code exemple, je vous ai fourni, 10 est la taille de l'échantillon. Vous avez peut-être remarqué que les données de jouet contiennent plusieurs observations par personne / unité (c.-à-d. 10 observations par unité).

Le manuel STAN fournit également des informations détaillées sur les arguments des fonctions et des états d'échantillonnage. "


4 commentaires

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 dans binomial logit (10, ... .


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) partie.



5
votes

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. xxx


3 commentaires

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).