Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум врачей-аспирантов _ Медицинская статистика _ Анализ медицинских данных в R и SAS

Автор: hot_assay 26.03.2014 - 17:47

Здравствуйте!
Буду благодарен за рекомендации по использованию R и SAS в анализе данных клинических исследований (хотя бы минимальные, общего характера, с учётом того, что пользователю, привыкшему к Graphical user interface, нужно въехать в специфику рассматриваемо ПО laugh.gif )) . Интересуют преимущества данных систем по сравнению с другими (например, Statsoft STATISTICA). Какие модули необходимо иметь для решения медицинских задач? Заменяют ли R и SAS друг друга в плане фукционала? Отдельное спасибо за ссылки с практическими примерами по рассматриваемому вопросу.

Автор: p2004r 26.03.2014 - 18:56

Цитата(hot_assay @ 26.03.2014 - 17:47) *
Здравствуйте!
Буду благодарен за рекомендации по использованию R и SAS в анализе данных клинических исследований (хотя бы минимальные, общего характера, с учётом того, что пользователю, привыкшему к Graphical user interface, нужно въехать в специфику рассматриваемо ПО laugh.gif )) . Интересуют преимущества данных систем по сравнению с другими (например, Statsoft STATISTICA). Какие модули необходимо иметь для решения медицинских задач? Заменяют ли R и SAS друг друга в плане фукционала? Отдельное спасибо за ссылки с практическими примерами по рассматриваемому вопросу.


Вы забыли описать что за медицинские задачи предполагается решать.

Что за готовые расширения среды имеются в R лучше всего читать вот тут
http://cran.r-project.org/web/views/

Медицина представлена например http://cran.r-project.org/web/views/ClinicalTrials.html . Хотя есть и фармакокинетика и анализ медицинских изображений различной природы и .... многое другое, вплоть до отдельного репозитария по биоинформатике smile.gif

Автор: hot_assay 27.03.2014 - 05:34

Цитата(p2004r @ 26.03.2014 - 19:56) *
Вы забыли описать что за медицинские задачи предполагается решать.

Спасибо за ссылки!
В том-то и дело, что не хотелось акцентировать внимание на каких-то частных задачах, меня интересует универсальность указанного выше ПО. Навскидку - стандартный набор инструментов (описательная статистика, таблицы сопряжённости, дисперсионный анализ, непараметрика и т.п.), многомерные методы, биоэквивалентность и фармакокинетическое моделирование (+графические возможности в плане построения кинетических кривых). И всё-таки: что лучше - R или SAS? (по совокупности критериев - универсальность, удобство работы и т.д.)

Автор: DoctorStat 27.03.2014 - 09:59

Цитата(hot_assay @ 27.03.2014 - 06:34) *
И всё-таки: что лучше - R или SAS? (по совокупности критериев - универсальность, удобство работы и т.д.)
SAS - всеми признанный пакет для статистических расчетов, а R - пакет программ, написанный студентами в перерыве между лекциями.

Автор: TheThing 27.03.2014 - 10:44


1) Первая и, наверное, самая главная причина, почему люди предпочитают SAS - это история, традиция и привычка. SAS работает начиная с 1970 года, R - значительно моложе. За эти годы в фармацевтических компаниях и банках было написано столько кода, что придется потратить десятилетия, чтобы переписать это на R. Никто этого делать не будет, поэтому все "серьезные" организации и конторы с историей работали и будут работать в SAS.

2) Качество литературы все таки на голову выше в SAS - про R в последние годы вышло довольно много хороших книг, однако в целом, еще не дотягивает до SAS - если в R отдельные книги хороши, то в SAS каждая книга - шедевр.

3) Функционал R поразительно возрастает с помощью пакетов, однако есть обалденные пакеты, а есть - откровенная лажа, поэтому Вам необходимо искать и хорошо искать, чтобы быть уверенным в корректном анализе. За качество функционала SAS отвечает SAS Institute - монстр с многолетней историей.

4) Для анализа данных за последние 15 лет, которые могут занимать несколько десятков гигабайт, в SAS можно обработать на машине с 4 Гб памяти, R - все данные хранит в ОЗУ, поэтому здесь могут возникнуть проблемы. И хотя есть обходные пути, которые позволяют обработать данные в R, которые занимают больше памяти, чем имеется на машине, над этим приходится шаманить, а в SAS все работает out-of-the-box.

5) Если в R что-то полетит или однажды он сойдет с ума у Вас на компе, разруливать эту ситуацию и форматировать жесткий диск будете Вы сами, а в SAS Вам всегда окажут техническую помощь в любое время суток SAS Institute.

6) SAS имеет несколько корявый синтаксис, но это дело привычки - за 30 лет пользования Вы этого не заметите.

7) Вы в курсе про стоимость SAS?

Не сочтите за рекламу SAS - сам пользуюсь и буду сидеть на R laugh.gif

Автор: p2004r 27.03.2014 - 10:52

Цитата(DoctorStat @ 27.03.2014 - 09:59) *
SAS - всеми признанный пакет для статистических расчетов, а R - пакет программ, написанный студентами в перерыве между лекциями.
Наращивание мозгов бесплатно => http://doctorstat.narod.ru


Похоже когда количество мозгов превышает некий критический уровень и становится так просторно, что заводятся виртуалы smile.gif

Автор: p2004r 27.03.2014 - 10:53

Цитата(TheThing @ 27.03.2014 - 10:44) *
1) Первая и, наверное, самая главная причина, почему люди предпочитают SAS - это история, традиция и привычка. SAS работает начиная с 1970 года, R - значительно моложе. За эти годы в фармацевтических компаниях и банках было написано столько кода, что придется потратить десятилетия, чтобы переписать это на R. Никто этого делать не будет, поэтому все "серьезные" организации и конторы с историей работали и будут работать в SAS.

2) Качество литературы все таки на голову выше в SAS - про R в последние годы вышло довольно много хороших книг, однако в целом, еще не дотягивает до SAS - если в R отдельные книги хороши, то в SAS каждая книга - шедевр.

3) Функционал R поразительно возрастает с помощью пакетов, однако есть обалденные пакеты, а есть - откровенная лажа, поэтому Вам необходимо искать и хорошо искать, чтобы быть уверенным в корректном анализе. За качество функционала SAS отвечает SAS Institute - монстр с многолетней историей.

4) Для анализа данных за последние 15 лет, которые могут занимать несколько десятков гигабайт, в SAS можно обработать на машине с 4 Гб памяти, R - все данные хранит в ОЗУ, поэтому здесь могут возникнуть проблемы. И хотя есть обходные пути, которые позволяют обработать данные в R, которые занимают больше памяти, чем имеется на машине, над этим приходится шаманить, а в SAS все работает out-of-the-box.

5) Если в R что-то полетит или однажды он сойдет с ума у Вас на компе, разруливать эту ситуацию и форматировать жесткий диск будете Вы сами, а в SAS Вам всегда окажут техническую помощь в любое время суток SAS Institute.

6) SAS имеет несколько корявый синтаксис, но это дело привычки - за 30 лет пользования Вы этого не заметите.

7) Вы в курсе про стоимость SAS?

Не сочтите за рекламу SAS - сам пользуюсь и буду сидеть на R laugh.gif


"Дед Мороз существует!" ТМ

Автор: p2004r 27.03.2014 - 10:57

Цитата(hot_assay @ 27.03.2014 - 05:34) *
Спасибо за ссылки!
В том-то и дело, что не хотелось акцентировать внимание на каких-то частных задачах, меня интересует универсальность указанного выше ПО. Навскидку - стандартный набор инструментов (описательная статистика, таблицы сопряжённости, дисперсионный анализ, непараметрика и т.п.), многомерные методы, биоэквивалентность и фармакокинетическое моделирование (+графические возможности в плане построения кинетических кривых). И всё-таки: что лучше - R или SAS? (по совокупности критериев - универсальность, удобство работы и т.д.)


R универсален настолько насколько универсален язык программирования. Все упомянутые баззворд присутствуют по ссылке, Вам надо только прочитать эти 15 страниц реферата текущих возможностей R. Даже если я прочитаю их ещё раз в слух, это вряд ли Вам поможет smile.gif

Автор: TheThing 27.03.2014 - 12:45

Цитата(p2004r @ 27.03.2014 - 11:53) *
"Дед Мороз существует!" ТМ


Вы не согласны с моими аргументами? Если нет, объясните, пжста, почему smile.gif

А вообще, в русскоязычном комьюнити подобные темы размножаются на многие страницы - это такие же холивары, как какой язык лучше С++ или C#? И пока наши умельцы будут спорить, что лучше R или SAS, профи на западе выучат R+SAS+mysql+немного Perl'a + разбавят Python - это стандартная солянка data scientist за бугром. А если человеку этого всего не нужно в ежедневной работе, то достаточно будет и Экселя.

Автор: DoctorStat 27.03.2014 - 12:53

Цитата(TheThing @ 27.03.2014 - 11:44) *
Не сочтите за рекламу SAS - сам пользуюсь и буду сидеть на
Ваш комментарий лучший. К сожалению на этом сайте нет "лайков". Вместо лайка прикрепляю сердечко.
Теперь немного негатива про SAS. Это ее цена, на которую обращал внимание участник под ником Игорь, который почему-то перестал появляться на форуме. Купить лицензию SAS можно только на 1 год, потом ее можно продлевать за дополнительную плату. Грубо говоря, через год ваша программа перестает работать и просит денег. Вам это понравится ?

Автор: hot_assay 27.03.2014 - 16:34

Всем большое спасибо за информацию!
Возникает резонный вопрос - а какова стоимость R?
Или это free software?

Автор: DrgLena 27.03.2014 - 18:04

Ответ есть не только в сети, но и на этом форуме!

Автор: p2004r 27.03.2014 - 22:33

Цитата(TheThing @ 27.03.2014 - 12:45) *
Вы не согласны с моими аргументами? Если нет, объясните, пжста, почему smile.gif

А вообще, в русскоязычном комьюнити подобные темы размножаются на многие страницы - это такие же холивары, как какой язык лучше С++ или C#? И пока наши умельцы будут спорить, что лучше R или SAS, профи на западе выучат R+SAS+mysql+немного Perl'a + разбавят Python - это стандартная солянка data scientist за бугром. А если человеку этого всего не нужно в ежедневной работе, то достаточно будет и Экселя.


0. Имея в руках фактически Схему вспоминать о Питоне и прочих перлах просто неприлично (а регексы и так доступны в самом R) smile.gif Потребность в любой базе данных тоже сильно преувеличенна ввиду наличия куда более эффективных возможностей самого R (plyr, reshape & company), скорее понадобится использование mapreduce, чем окаменелого SQL

1. "S is one of several statistical computing languages that were designed at Bell Laboratories, and first took form between 1975?1976." © smile.gif Ну а потыренные возможности из APL представляют собой вообще первые диалоговые многопользовательские системы анализа данных.

2. Что касается размера обрабатываемых данных. а) В R есть возможность не только отправить на обработку данные _любого_ размера, но и дождаться результата данной обработки --- это реализация SPMD. б) вариант "просто запустить на обработку" тоже доступен -- ff: memory-efficient storage of large data on disk and fast access functions и куча аналогов (в этом случае даже синтаксис несколько усложниться, хотя SAS догнать не удастся smile.gif )

3. Что касается вообще идеи проприетарного неизвестного полностью в подробностях своей реализации алгоритма анализа в научной работе... Ну у меня нет слов smile.gif круче только делать ссылки на учебники smile.gif

4. Я _очень_ быстро читаю, но дочитать всю литературу о использовании R я просто физически не в состоянии smile.gif

Автор: p2004r 27.03.2014 - 22:36

Цитата(hot_assay @ 27.03.2014 - 16:34) *
Всем большое спасибо за информацию!
Возникает резонный вопрос - а какова стоимость R?
Или это free software?


это как захочется Вам, все пути открыты smile.gif

или по выше приведенной ссылке на сайт проекта, или http://www.revolutionanalytics.com/

Автор: TheThing 28.03.2014 - 11:17

Цитата(p2004r @ 27.03.2014 - 22:33) *
0. Имея в руках фактически Схему вспоминать о Питоне и прочих перлах просто неприлично (а регексы и так доступны в самом R) smile.gif Потребность в любой базе данных тоже сильно преувеличенна ввиду наличия куда более эффективных возможностей самого R (plyr, reshape & company), скорее понадобится использование mapreduce, чем окаменелого SQL

1. "S is one of several statistical computing languages that were designed at Bell Laboratories, and first took form between 1975?1976." © smile.gif Ну а потыренные возможности из APL представляют собой вообще первые диалоговые многопользовательские системы анализа данных.

2. Что касается размера обрабатываемых данных. а) В R есть возможность не только отправить на обработку данные _любого_ размера, но и дождаться результата данной обработки --- это реализация SPMD. б) вариант "просто запустить на обработку" тоже доступен -- ff: memory-efficient storage of large data on disk and fast access functions и куча аналогов (в этом случае даже синтаксис несколько усложниться, хотя SAS догнать не удастся smile.gif )

3. Что касается вообще идеи проприетарного неизвестного полностью в подробностях своей реализации алгоритма анализа в научной работе... Ну у меня нет слов smile.gif круче только делать ссылки на учебники smile.gif

4. Я _очень_ быстро читаю, но дочитать всю литературу о использовании R я просто физически не в состоянии smile.gif


0. Питон + Pandas могут обрабатывать огромные массивы данных значительно быстрее и эффективнее чем R, грустно, но факт. Я привел эту солянку не из своих собственных размышлений, а после просмотра многих требований по вакансии data scientist на западе. Вы можете (и я могу) использовать только R в своей работе, этого никто не запрещает, но этого недостаточно, чтобы получить data analytics например в google, а я все таки всегда ориентировался на западные тенденции, поскольку они лет на 200 впереди наших. К тому же на западе, Вы найдете намного быстрее и более оплачиваемую работу, если Вы знаете SAS, а не R (грустно, но тоже факт). Нужна кому-то эта вакансия или не нужна - это след. вопрос, может у нас (или у Вас) в стране data scientis и так жируют..

1. R и S - это ведь не на 100% одно и тоже (хотя даже S вышел позже SAS). В своем 1 пункте я писал, что огромные институты использовали SAS и написали кучу кода, которую не будут переводить на R. Разве это не объясняет, почему люди не будут переходить на R? Вы пишите про S, но это ведь не объясняет почему люди используют SAS smile.gif

2. Я также написал, что есть обходные пути обработки - можно дождаться (а можно и не дождаться) - но это все доп. пакеты, доп. функции, в SAS это работает по-умолчанию, просто разные модели хранения данных.

3. Иногда, наверное, лучше выбрать неизвестный проприетарный алгоритм от SAS, который был апробирован в течении 30 лет, чем известный open source от дяди Васи (Вы же согласны с тем, что среди 5000 пакетов есть и пакеты от Васей? smile.gif )

4. Всю и не нужно, я говорю о тенденциях, в общем, литература по SAS более качественная. Возьмите рандомную выборку того и другого и проведите анализ - это уже сделали люди (не из SAS) и пришли к выводу, что документация лучше в SAS. По своим собственным наблюдениям я тоже так считаю.

Я уважаю Вашу любовь к R (сам его очень люблю smile.gif ), но Вы подаете информацию так, как-будто в R нет недостатков и это единственное, что нужно знать data scientist. Это ведь не так..

Автор: p2004r 29.03.2014 - 10:49

Цитата(TheThing @ 28.03.2014 - 11:17) *
0. Питон + Pandas могут обрабатывать огромные массивы данных значительно быстрее и эффективнее чем R, грустно, но факт. Я привел эту солянку не из своих собственных размышлений, а после просмотра многих требований по вакансии data scientist на западе. Вы можете (и я могу) использовать только R в своей работе, этого никто не запрещает, но этого недостаточно, чтобы получить data analytics например в google, а я все таки всегда ориентировался на западные тенденции, поскольку они лет на 200 впереди наших. К тому же на западе, Вы найдете намного быстрее и более оплачиваемую работу, если Вы знаете SAS, а не R (грустно, но тоже факт). Нужна кому-то эта вакансия или не нужна - это след. вопрос, может у нас (или у Вас) в стране data scientis и так жируют..

1. R и S - это ведь не на 100% одно и тоже (хотя даже S вышел позже SAS). В своем 1 пункте я писал, что огромные институты использовали SAS и написали кучу кода, которую не будут переводить на R. Разве это не объясняет, почему люди не будут переходить на R? Вы пишите про S, но это ведь не объясняет почему люди используют SAS smile.gif

2. Я также написал, что есть обходные пути обработки - можно дождаться (а можно и не дождаться) - но это все доп. пакеты, доп. функции, в SAS это работает по-умолчанию, просто разные модели хранения данных.

3. Иногда, наверное, лучше выбрать неизвестный проприетарный алгоритм от SAS, который был апробирован в течении 30 лет, чем известный open source от дяди Васи (Вы же согласны с тем, что среди 5000 пакетов есть и пакеты от Васей? smile.gif )

4. Всю и не нужно, я говорю о тенденциях, в общем, литература по SAS более качественная. Возьмите рандомную выборку того и другого и проведите анализ - это уже сделали люди (не из SAS) и пришли к выводу, что документация лучше в SAS. По своим собственным наблюдениям я тоже так считаю.

Я уважаю Вашу любовь к R (сам его очень люблю smile.gif ), но Вы подаете информацию так, как-будто в R нет недостатков и это единственное, что нужно знать data scientist. Это ведь не так..


0. Никакой пандас считать быстрее лежащей в его основе библиотеки lapack не в состоянии даже теоретически smile.gif Безусловно есть хитрые схемы потоковых вычислений с очень хитрыми рекурсивными алгоритмами позволяющими полностью задействовать возможности кеширования данных современными процессорами и добится пиковой производительности процессора. Но это никакого отношения к питону не имеет, весь такой код низкоуровневый, и его гораздо вероятнее написать как вставку сишного кода в R smile.gif

Также могу заметить что питон и рядом не стоял с производительностью вот этого --- http://r-statistics.livejournal.com/41800.html Вы к сожалению не прочитали ничего из моего предыдущего поста. Этим я считаю что тема "может ли R обрабатывать большие данные и делать это быстро" закрыта smile.gif

Но чаще всего все упирается в забавные "техники программирования" которые большинство с неимоверным упорством использует, хотя достаточно прочитать "Введение в R" и начать жить нормальной хм... жизнью Вот наиболее спектакулярный и свежий пример http://stackoverflow.com/questions/2908822/speed-up-the-loop-operation-in-r

1. SAS 1970го и SAS 2014 это тоже далеко "не одно и тоже", но вот сессия анализа в APL системе и сессия анализа в R практически неотличима http://flibusta.net/b/156597 Прочитайте этюд с анализом "тормозного пути автомобиля"

2. Ничего не понял, "R весь состоит из пакетов, а SAS монолитный кусок" .... лучшечемгрузиныТМ? smile.gif Ну покупайте у Революшен готовое решение на базе R где всё встроено. Все равно на порядок дешевле SAS будет. Или купите за те же деньги нормального программиста, и он Вам напишет макросы расширяющие синтаксис R для прозрачной работы именно так как Вам хочется. (хотя таких расширений, декларативно описывающих практически любой анализ, уже просто тонны существует).

3. Это уж простите никогда не будет правдой.

4. Какие могут быть "тенденции", если пользователь не в состоянии успеть прочитать имеющийся пул литературы? Просто потому что её становится больше пока он читает то что есть ? smile.gif Литература по R это не сборник рецептов, это советы как грамотно "говорить на R". Научившись говорить человек использует язык для того чтобы описать все свои действия по анализу данных. Причем именно "описать" в отличии от императивных языков. И именно "говорить" поскольку R так же выразителен в своей предметной области. Любой алгоритм сводится в паре строк (смотрите пример выше с циклами).


По поводу "любви к R" вот мой ответ ---
http://molbiol.ru/forums/index.php?showtopic=102724&view=findpost&p=1468917

Автор: TheThing 15.09.2014 - 13:59

Не с целью продолжения холивара на тему языков программирования, а просто обыденный случай.

Решил глянуть, как реализован пакет MDR в R - все хорошо, практически ничем по фичам не уступает аналогу GUI на JAVA http://sourceforge.net/projects/mdr/. Но ВРЕМЯ выполнения!! Массив из 250 наблюдений 25 предикторов - время анализа в R: 221 секунда, MDR Java: 1.2 секунд; массив 250 наблюдений 50 предикторов - R: 1950 секунд!!!, Java: 3,9 секунды. Ну и так далее...50 предикторов в генетических исследованиях - это очень мало, следовательно MDR в R пока сложно пользоваться (мне хотелось еще прикрутить алгоритм в shiny, там вообще браузер зависнет навека (((. Подобные пакеты,как mbMDR и другие работают также..

Решил взять другой пример, вычислить массивный полином (100) 500 000 раз. Код в R (время выполнения 4 минуты)

trpol2 <- function(n,x) {
mu <<- 10.0
pu <<- 0.0
pol <<- 1:100
tp1 <<- 2.0
tm1 <<- 1/2.0
for (i in 1:n) {
for (j in 1:100) {
mu <<- (mu + tp1) * tm1
pol[j] <<- mu
}
s <<- 0.0;
for (j in 1:100) {
s <<- x*s + pol[j];
}
pu <- s+pu;
}
print(pu)
}

trpol2(500000,0.2)

Код на Java, время выполнения в браузере! http://www.browxy.com/ - 2 секунды.

public class HelloWorld {
static public void main(String argv[]) {
float mu = (float)10.0;
float x,s;
float pu = (float)0.0;
int su, i, j, n;
float pol[] = new float[100];

n = 500000;
x = (float)0.2;
for(i=0; i<n; i++) {
for (j=0; j<100; j++) {
mu = (mu + (float)2.0) / (float)2.0;
pol[j] = mu;
}
s = (float)0.0;
for (j=0; j<100; j++) {
s = x*s + pol[j];
}
pu += s;
}
System.out.println(pu);
}
}

Самое смешное, код на Python, время выполнения 6 секунд:

n = 500000
x = 0.2

def t(x):
mu = 10.0
pu = 0.0
pol =[0] * 100
r = range(0,100)

for i in range(0,n):
for j in r:
pol[j] = mu = (mu + 2.0) / 2.0
su = 0.0
for j in r:
su = x * su + pol[j]
pu = pu + su
print pu

t(x)

Немного расстроился..Ладно с этими полиномами, но мне реально хотелось работать с многофакторным уменьшением размерности в R, видимо, не судьба.. weep.gif

Автор: Вале а 11.10.2014 - 16:33

Цитата(DoctorStat @ 27.03.2014 - 10:59) *
SAS - всеми признанный пакет для статистических расчетов, а R - пакет программ, написанный студентами в перерыве между лекциями.


ну Френка Харрела, написавшего пакеты по регрессиям для R, я б студентом не назвал, его Regression Modeling Strategies уже классика

Автор: p2004r 13.10.2014 - 13:10

Цитата(TheThing @ 15.09.2014 - 13:59) *
Не с целью продолжения холивара на тему языков программирования, а просто обыденный случай.


да да, конечно smile.gif

1) если так непосильно писать векторизированный код, а писать портянки с рекурсивными форами "массивного полинома" чувствуете себя в силе, то в Вашем распоряжении Rcpp и практически без изменений "код на ява" (в силу весьма ограниченного объема использования возможностей языка smile.gif ) можно вставить в инлайн вставку кода c++ smile.gif


2) никакого примера о тормозах MDR в письме нет -- и комментировать собственно нечего.

Автор: TheThing 23.10.2014 - 07:09

Цитата(p2004r @ 13.10.2014 - 13:10) *
1) если так непосильно писать векторизированный код, а писать портянки с рекурсивными форами "массивного полинома" чувствуете себя в силе, то в Вашем распоряжении Rcpp и практически без изменений "код на ява" (в силу весьма ограниченного объема использования возможностей языка smile.gif ) можно вставить в инлайн вставку кода c++ smile.gif


Значит, чтобы решить задачу с полиномом (а таких примеров множество), человек должен знать как R так и с++? В вышеприведенном примере я использовал базовые возможности языка Java, Python и т.д., не пользуясь никакими сторонними библиотеками. Хотелось бы увидеть Вашу PRO-версию векторизированного родного R кода, которая бы могла составить конкуренцию хотя бы Python по скорости выполнения..

Цитата
2) никакого примера о тормозах MDR в письме нет -- и комментировать собственно нечего.


Прокомментируйте, пожалуйста и запаситесь терпением:

library(MDR)
data(mdr2)

fit.cv<-mdr.cv(data = mdr2, K = 3, cv = 10, ratio = NULL, equal = "HR", genotype = c(0, 1, 2))

Эта база имеет всего лишь 100 предикторов, у меня в реальной работе их тысячи. На Java и в SAS у меня это занимает секунды, а сколько у Вас в R? smile.gif

Автор: p2004r 23.10.2014 - 19:35

Цитата(TheThing @ 23.10.2014 - 07:09) *
Значит, чтобы решить задачу с полиномом (а таких примеров множество), человек должен знать как R так и с++? В вышеприведенном примере я использовал базовые возможности языка Java, Python и т.д., не пользуясь никакими сторонними библиотеками. Хотелось бы увидеть Вашу PRO-версию векторизированного родного R кода, которая бы могла составить конкуренцию хотя бы Python по скорости выполнения..


Ваш <s>питоновский</s> эровский код, на самом деле не так тормозной как Вы тут нам описываете. Просто кроме своего питона надо знать минимальные возможности продукта который Вы собрались облажать.

<pre>
> system.time(trpol2(500000,0.2))
[1] 1250000
пользователь система прошло
202.948 9.268 210.290
> trpol2c <- cmpfun(trpol2)
> system.time(res<-trpol2c(500000,0.2))
[1] 1250000
пользователь система прошло
40.648 0.992 41.505
</pre>

улучшив Ваш результат в 5 раз, ковыряться в "мегапримере" с точки зрения дальнейшей "оптимизации" мне простите не интересно.

Автор: p2004r 23.10.2014 - 20:49

Цитата(TheThing @ 23.10.2014 - 07:09) *
Прокомментируйте, пожалуйста и запаситесь терпением:

library(MDR)
data(mdr2)

fit.cv<-mdr.cv(data = mdr2, K = 3, cv = 10, ratio = NULL, equal = "HR", genotype = c(0, 1, 2))

Эта база имеет всего лишь 100 предикторов, у меня в реальной работе их тысячи. На Java и в SAS у меня это занимает секунды, а сколько у Вас в R? smile.gif


внутри mdr.cv() как и любой другой кроссвалидации находится <s>неонка</s> цикл. В этом легко убедится набрав просто mdr.cv.

Данный цикл Вы должны заменить (в нем нету ни глобального присваивания, ни прочих императивных извратов), как истинный питонист на foreach(). Оная конструкция прекрасно параллелится и на кластеры, и на некластеры. Делать это за Вас мне тоже неинтересно.

Автор: TheThing 23.10.2014 - 21:07

Цитата(p2004r @ 23.10.2014 - 19:35) *
Ваш <s>питоновский</s> эровский код, на самом деле не так тормозной как Вы тут нам описываете. Просто кроме своего питона надо знать минимальные возможности продукта который Вы собрались облажать.


Питон - не мой и я вовсе не собирался "облажать" какой-либо из продуктов (Вы не найдете такого ни в одном из моих постов).
Я привел примеры нативного кода каждого из языков для решения определенной задачи и получил результаты, а в Ваших комментариях (в этой ветке) считывается масса негатива, что не способствует конструктивному общению.


Автор: TheThing 23.10.2014 - 21:21

Цитата(p2004r @ 23.10.2014 - 20:49) *
внутри mdr.cv() как и любой другой кроссвалидации находится <s>неонка</s> цикл. В этом легко убедится набрав просто mdr.cv.

Данный цикл Вы должны заменить (в нем нету ни глобального присваивания, ни прочих императивных извратов), как истинный питонист на foreach(). Оная конструкция прекрасно параллелится и на кластеры, и на некластеры. Делать это за Вас мне тоже неинтересно.


С чего Вы взяли, что я истинный питонист?
Вы же сказали, что я не привел никакого кода в R по поводу метода MDR, поэтому обсуждать собственно нечего. Я привел пример своего ужасного неоптимизированного кода и в результате получил ответ чисто теоретического характера, а также что Вам это неинтересно. Почему просто не помочь сообществу в решении абсолютно конкретной задачи конкретным решением?

Автор: p2004r 23.10.2014 - 22:03

Цитата(TheThing @ 23.10.2014 - 21:21) *
С чего Вы взяли, что я истинный питонист?
Вы же сказали, что я не привел никакого кода в R по поводу метода MDR, поэтому обсуждать собственно нечего. Я привел пример своего ужасного неоптимизированного кода и в результате получил ответ чисто теоретического характера, а также что Вам это неинтересно. Почему просто не помочь сообществу в решении абсолютно конкретной задачи конкретным решением?


хватит троллить, у вас нет к этому призвания. вы получили исчерпывающий совет, переписать единственный цикл в доступной вам функции. тон которым вы "просите" "помочь сообществу", а вернее себе, не оставляет никаких шансов что кто то кинется вам помогать.

переписать цикл кроссвалидации в неустраивающей вас процедуре тривиальная операция, и её код намного меньше занимает места, чем ваши упражнения в остроумии на этом форуме.

Автор: p2004r 23.10.2014 - 22:16

Цитата(TheThing @ 23.10.2014 - 21:07) *
Питон - не мой и я вовсе не собирался "облажать" какой-либо из продуктов (Вы не найдете такого ни в одном из моих постов).
Я привел примеры нативного кода каждого из языков для решения определенной задачи и получил результаты, а в Ваших комментариях (в этой ветке) считывается масса негатива, что не способствует конструктивному общению.


ваш "r-код" дословная калька вашего же питоновского примера, он был также механистично ускорен в пять раз, что вас в этом не устраивает господин тролль?

PS что еще по вашим же словам вы собрались "облажать"(С)?

Автор: TheThing 23.10.2014 - 23:29

Цитата(p2004r @ 23.10.2014 - 22:03) *
тон которым вы "просите" "помочь сообществу", а вернее себе, не оставляет никаких шансов что кто то кинется вам помогать.


Поверьте, что количество моих постов и личных сообщений, где я помог людям, значительно превосходят те случаи, когда я просил о помощи smile.gif
В этом вопросе мне помощь не нужна, я пользуюсь прекрасной реализацией MDR на Java, был интерес, как пользоваться этим алгоритмом в R, но благодаря Вам - интерес пропал, видимо это у нас взаимно smile.gif

Автор: p2004r 24.10.2014 - 11:33

Цитата(TheThing @ 23.10.2014 - 23:29) *
Поверьте, что количество моих постов и личных сообщений, где я помог людям, значительно превосходят те случаи, когда я просил о помощи smile.gif
В этом вопросе мне помощь не нужна, я пользуюсь прекрасной реализацией MDR на Java, был интерес, как пользоваться этим алгоритмом в R, но благодаря Вам - интерес пропал, видимо это у нас взаимно smile.gif


понятно. видимо крутость этих "личных сообщений" недостаточно очевидна для окружающих, что бы вы не могли удержаться от поливания грязью и провокаций на этом форуме.

PS

вот код в mdr() который вызывает проблему

counts[, 1] <- apply(case, 1, compare, mat = part, k = k)
counts[, 2] <- apply(ctrl, 1, compare, mat = part, k = k)

поскольку

case <- cbind(rep(1, g^k), expand.grid(rep(geno, k)))
ctrl <- cbind(rep(0, g^k), expand.grid(rep(geno, k)))

решить это очень просто заменив apply() на эквивалент работающий параллельно --- например parApply(cl, X, MARGIN, FUN, ...)

Или возможно эффективными окажуться
parRapply(cl, x, fun, ...)
parCapply(cl, x, fun, ...)

В результате сколько машин вы поднимете в кластере, столько и будет эффективноть ваших расчетов. В пределе она сойдется к скорости рассылки case и ctrl между нодами кластера.

PPS заметьте, что это не "личное сообщение" и действительно полезно всем.

PPPS

я рыдал (С)

Код
> compare
function (mat, vec, k)
{
    b <- 1
    match <- 1:dim(mat)[1]
    while (b <= (k + 1)) {
        match <- match[mat[match, b] == as.numeric(vec[b])]
        b <- b + 1
    }
    return(length(match))
}
<environment: namespace:MDR>

Автор: Вале а 24.10.2014 - 17:48

Вы смотрели научно-художественный боевик "R против Python: Битва титанов" smile.gif

Автор: p2004r 24.10.2014 - 19:48

Код
function (mat, vec, k)
{
    b <- 1
    match <- 1:dim(mat)[1]
    while (b <= (k + 1)) {
        match <- match[mat[match, b] == as.numeric(vec[b])]
        if (length(math)==0) break   ### !!!!!!!
        b <- b + 1
    }
    return(length(match))
}


но на удивление эта фигня довольно оптимально работает smile.gif

после профилирования кода получается, что реальное ускорение возможно получить только на clusterApplyLB(или иной разумный сплит массива на обработку) вставленных вместо обычных apply(), иначе высокие накладные расходы на пересылку.

PS Оказывается всё уже написали http://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf на стр.11 реализация apply() поверх %dopar% с настраиваемым числом (увеличивать до загрузки всех ядер) передаваемых в неё колонок (поэтому исходную матрицу транспонировать надо будет)


Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)