coxph method="exact" - long run time

8 views
Skip to first unread message

Amichai Perlman

unread,
Aug 1, 2016, 3:57:42 PM8/1/16
to Israel R User Group
שלום,

אני מקוה שהשאלה הבאה מתאימה לפורום.

אני מנסה להריץ ניתוח COX ב R, על נתוני מחקר שאוסף מידע על קשישים אחת לשנה. לשם כך אני מעוניין להשתמש ב  discrete time cox. לצורך כך אני משתמש בפונקציית coxph מחבילת survival.

 יש לי נתונים על כ-2300 קשישים, עם ממוצע של כ7 שנות מעקב (כלומר יש כ15000 תצפיות. אני לא מכווץ את התצפיות מכיוון שאני משתמש במודל בו יש משתנים שהם time varying). 

כשאני מריץ את coxph במתודת efron זה לוקח שתי שניות להריץ. אך מכיוון שציר הזמן שלי לא רציף (שכן תיעוד הנתונים מבוצע אחת לשנה לפי תכנית קבועה) מה שגם מוביל מן הסתם להרבה "אירועים" חופפים (tied) להבנתי הניתוח צריך להתאים לdiscrete time, מה שאומר שאני צריך להשתמש בcoxph במתודת exact. שימוש במתודה הזו לוקח המון המון זמן. למעשה חיכיתי מספר שעות ללא תגובה, ואז ראיתי שאלה בstackexchange שדיברה על מעל 24 שעות עבור 200 אנשים וקצת התייאשתי.

אני עובד עם מחשב asus CORE i5 עם 4GB RAM, 64bit מערכת ווינדוס 10. 
אני משתמש בR גירסה 3.23 בממשק RSTUDIO בגירסה שמתאימה ל 64bit.

כשאני בודק כמה זיכרון זמין עבור R בעזרת memory.limit() אני מקבל 3961, כך שלהבנתי כמעט הכל זמין. אך בפועל בזמן שR מריץ את הקוד, אז לפי הTASK MANAGER של ווינדוס R ממשיך להשתמש בכמות פחות או יותר קבועה של זכרון (כ-170 MB). 

השאלה שלי כיצד ניתן לגרום לR להריץ את הפונקציה מהר יותר? האם יש דרך לגרום לו להשתמש במשאבים הקיימים בצורה טובה יותר?  חשבתי לנסות להריץ את זה על AWS עם מחשב וירטואלי עם יותר זכרון או מעבדים, אבל השאלה האם זה יעזור לי? הרי גם ככה נראה שR מנצל רק חלק קטן מהRAM.

אני משתמש בפונקציה הסטנדרטית של coxph, כך שהפקודה נראית כך:
 coxph(Surv(time1, time2, event) ~ antihyp_all_rx.x + age_at_visit.y + msex + educ, data=finaldata, method = "exact")

כל משוב יתקבל בברכה

עמיחי

Jonathan Rosenblatt

unread,
Aug 1, 2016, 4:15:39 PM8/1/16
to israel-r-user-group
בשביל להבין איך R מנהל את הזכרון, כדאי לקרוא את זה. בפרט- הזיכרון הזמין הוא תוצאה של המו"מ בין R ובין מערכת ההפעלה. כנראה שלא כל הזכרון שלך יעמוד לרשות R. מאידך, לפי התיאור שלך נשמע שזכרון אינו הבעייה אלא כח החישוב....

הפתרון המתבקש למגבלת חישוב, הוא לבדוק אם לפונקציה יש גרסה מקבילית. אם כן, תוכל להשתמש בכל 4 הליבות של ה- i5 שברשותך, או לפתוח מכונה ב- AWS עם הרבה יותר ליבות (פעם אחרונה שבדקתי, היו שם מכונות עם 32 ליבות, אבל זה בטח עלה מאז). 

במקרה (היותר סביר לדאבוני), שלפונקציה אין גרסה מקבילית, כדאי לחשוב על הסטטיסטיקה של הבעייה ולחפש קיצורי דרך. אשאיר את הבמה למומחי ניתוח ההישרדות עם רעיונות בנושא.



--
You received this message because you are subscribed to the Google Groups "Israel R User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to israel-r-user-g...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
--
Jonathan Rosenblatt
Dept. of Industrial Engineering and Management
Ben Gurion University of the Negev

Reply all
Reply to author
Forward
0 new messages