Сбой R при запуске очень большого земснаряда в MuMIn - PullRequest
0 голосов
/ 24 сентября 2018

Я выполнял драгирование, используя пакет MuMIn очень большой глобальной модели в качестве трамплина с конечной целью получения значений важности каждой переменной.Земснаряд успешно работал за 2 дня, но позже мне понадобилось добавить 2 переменные, и после их добавления он не работал до конца.Он работал в течение 7 дней в первый раз, прежде чем R рухнул (я предполагаю), потому что, когда я проверил его в следующий раз, R выключился, и когда я снова запустил RStudio, сообщений об ошибках не было, и это было новое окно.Я снова запустил код, и на этот раз он выполнялся в течение 8 дней, прежде чем делать то же самое.

Я объясню свою глобальную модель и подмножества, чтобы было понятно, почему код выполняется так долго:игра с 19 переменными и 4 терминами взаимодействия (все числовые, за исключением «года», который является категоричным).Существуют определенные переменные, которые не могут появляться вместе в модели, потому что одна является альтернативной версией другой, поэтому я их поднастроил.Ситуация усложняется с помощью терминов взаимодействия, потому что, когда термин взаимодействия находится в модели, сглаженная версия термина не может быть основным эффектом, поскольку немодулированная версия термина автоматически включается и не может выглядеть как несглаженная версия термина какосновной эффект, когда член взаимодействия отсутствует в модели, поскольку уже может быть сглаженная версия члена.Любой из этих вариантов приведет к двойному представлению одного термина в модели, поэтому я также выделил эти опции.Вот код, показывающий глобальную модель и код для драга:

library(MuMIn)
options(na.action = "na.fail")

real.model2 <- gam(resqpa ~ factor(year) + s(elev) + factor(year)*elev + 
s(bf1) + s(bf2) + s(bf3) + s(open) + s(water) + s(bfbs1) + s(bfbs2) + 
s(bfbs3) + s(bs2) + s(bs3) + s(mix) + s(cs1) + s(cs2) + factor(year)*bfbs2 + 
factor(year)*bfbs3 + factor(year)*bs2 + factor(year)*bs3 + s(allbf) + s(ct1) 
+ s(ct2) + s(allcs), family=binomial(link="cloglog"))

fits6 <- dredge(real.model2, subset =  (!("s(allbf)" & "s(bf1)")) 
            & (!("s(allbf)" & "s(bf2)")) 
            & (!("s(allbf)" & "s(bf3)")) 
            & (!("s(ct1)" & "s(bf1)")) 
            & (!("s(ct1)" & "s(bfbs1)")) 
            & (!("s(ct2)" & "s(bf2)")) 
            & (!("s(ct2)" & "s(bfbs2)"))
            & (!("s(ct2)" & "s(bs2)"))
            & (!("s(allcs)" & "s(cs1)"))
            & (!("s(allcs)" & "s(cs2)"))
            & (!(`s(elev)` & "elev:factor(year)")) & (!elev  | `elev:factor(year)`) 
            & (!(`s(bfbs2)` & "bfbs2:factor(year)")) & (!bfbs2  | `bfbs2:factor(year)`) 
            & (!(`s(bfbs3)` & "bfbs3:factor(year)")) & (!bfbs3  | `bfbs3:factor(year)`) 
            & (!(`s(bs2)` & "bs2:factor(year)")) & (!bs2  | `bs2:factor(year)`) 
            & (!(`s(bs3)` & "bs3:factor(year)")) & (!bs3  | `bs3:factor(year)`))

После сбоя R во второй раз я запустил диагностику;однако отметка времени для ошибки не соответствовала времени, когда произошел сбой R, поэтому я не знаю, информативно это или нет.

24 Sep 2018 03:06:26 [rdesktop] ERROR system error 231 (All pipe instances 
are busy); OCCURRED AT: virtual void 
rstudio::core::http::NamedPipeAsyncClient::connectAndWriteRequest()

Это проблема с необходимостью большей вычислительной мощности или есть более краткий / более правильный способ написания этого кода, который позволит его завершить?Заранее спасибо за любую помощь с этим!

1 Ответ

0 голосов
/ 26 сентября 2018

Трудно сказать, что вызвало ошибку, если вы запускаете R через RStudio.Попробуйте запустить ваш R-скрипт на обычном R, в консоли, а не в RGui (или через R CMD batch), чтобы ваш вывод сохранился после сбоя.Также установите dredge аргумент trace на TRUE, чтобы вы могли видеть, какая модель вызывает проблему.

Другой способ - создать list всех вызовов модели через dredge(..., evaluate = FALSE), сверхкоторый вы можете потом зациклить, eval - вызовы.Вы можете сохранить все эти объекты модели в списке, но это создаст чрезвычайно большой объект, поэтому лучше каждый раз save записывать их на диск вместо хранения в памяти и / или создавать таблицы частичного выбора модели, которые можнослит с rbind позже.Преимущество этого подхода заключается в том, что вы можете перезапустить цикл после того, как он потерпел крах ранее (если вы save все необходимые данные на диске).

...