J'ai des problèmes de performances en utilisant le MCMCglmm
package dans R pour exécuter un modèle d'effets mixtes. Le code ressemble à ceci:
MC1<-MCMCglmm(bull~1,random=~school,data=dt,family="categorical"
, prior=list(R=list(V=1,fix=1), G=list(G1=list(V=1, nu=0)))
, slice=T, nitt=iter, ,burnin=burn, verbose=F)
Il y a environ 20 000 observations dans les données et elles sont regroupées dans environ 200 écoles. J'ai supprimé toutes les variables inutilisées de la trame de données et supprimé tous les autres objets de la mémoire, avant d'exécuter. Le problème que j'ai, c'est qu'il faut beaucoup de temps pour s'exécuter, à moins que je ne réduise les itérations à un nombre inacceptable. Avec 50 000 itérations, cela prend 5 heures et j'ai de nombreux modèles différents à exécuter. Je voudrais donc savoir s'il existe des moyens d'accélérer l'exécution du code ou d'autres packages que je pourrais utiliser. J'utilise MCMCglmm
parce que je veux des intervalles de confiance pour les effets aléatoires.
D'un autre côté, j'espérais obtenir un nouveau PC plus tard cette année, mais avec un peu de chance, je pourrai peut-être le présenter, alors je me demandais comment dépenser au mieux un montant limité d'argent sur du nouveau matériel - plus de RAM , CPU plus rapide, etc. En regardant le gestionnaire de tâches, je ne pense pas que la RAM soit le problème (elle ne dépasse jamais 50% de la consommation physique), mais l'utilisation du CPU ne dépasse pas non plus 50%, ce qui me semble étrange . Ma configuration actuelle est un Intel Core i5 à 2,66 GHz, 4 Go de RAM, un disque dur à 7 200 tr / min. Est-il raisonnable d'obtenir le processeur le plus rapide possible, au détriment de la RAM supplémentaire? Je me suis également interrogé sur l'effet de la taille du cache du processeur de niveau 3 sur des problèmes de calcul statistique comme celui-ci?
Mise à jour: Après avoir demandé sur méta SO, on m'a conseillé de reformuler la question et de poster sur Superuser. Pour ce faire, je dois donner plus de détails sur ce qui se passe "sous le capot" dans MCMCglmm. Ai-je raison de penser que la majeure partie du temps de calcul est consacrée à l'optimisation - je veux dire trouver le maximum d'une fonction compliquée? L'inversion de matrice et / ou d'autres opérations d'algèbre linéaire sont-elles également une opération courante qui pourrait provoquer des goulots d'étranglement? Toute autre information que je pourrais donner à la communauté des super-utilisateurs serait très appréciée.
la source
lmer()
modèles à de grands ensembles de données peut prendre un certain temps, surtout si vous devez le faire plusieurs fois. Une réponse à votre question peut résider dans le calcul parallèle, bien que d'autres utilisateurs (par exemple @DirkEddelbuettel) seraient beaucoup plus utiles que moi avec cela. Il est également possible que vous obteniez de meilleures réponses sur stackoverflow.glmer
(comme vous le savez dans mes autres messages) et cela prend environ 20 secondes, mais le problème est qu'il ne donne pas d'intervalle de confiance ou d'erreurs standard, et d'après ce que j'ai lu sur une archive de liste de diffusion, l'auteur dulme4
indique que la distribution d'échantillonnage des effets aléatoires peut être très biaisée, de sorte que ces statistiques ne sont pas déclarées. En fait, j'ai trouvé deMCMCglmm
si loin que dans mon cas, ils approchent de la normale (pas que cela aide beaucoup - je dis juste). Serait-il préférable que je demande de le migrer vers SO?Réponses:
Pourquoi ne pas l'exécuter sur le service de cloud computing EC2 d'Amazon ou un service similaire?
MCMCpack
est, si je me souviens bien, principalement implémenté en C, donc ça ne va pas aller beaucoup plus vite à moins que vous ne réduisiez la complexité de votre modèle, les itérations, etc. Avec EC2, ou des services de cloud computing similaires, vous pouvez avoir plusieurs instances à tout spécifications que vous désirez et exécutez tous vos modèles à la fois.la source