Противоречивые прогнозы от predict.gbm() 2.1.4 и 2.1.3

Этот вопрос связан с моим предыдущим сообщением здесь.

Я отследил проблему, и, похоже, она связана с той версией gbm, которую я использую. Последняя версия 2.1.4 демонстрирует проблему в моей системе (R 3.4.4, а также 3.5; обе в Ubuntu 18.04), тогда как версия 2.1.3 работает так, как ожидалось:

mydata <- structure(list(Count = c(1L, 3L, 1L, 4L, 1L, 0L, 1L, 2L, 0L, 0L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 0L, 2L, 3L, 1L, 4L, 3L, 0L, 4L, 1L, 2L, 1L, 1L, 0L, 2L, 1L, 4L, 1L, 5L, 3L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 2L, 0L, 0L, 1L, 1L, 1L, 0L, 3L, 1L, 1L, 0L, 3L, 1L, 1L, 1L, 1L, 2L, 3L, 2L, 2L, 0L, 0L, 3L, 5L, 1L, 2L, 1L, 1L, 0L, 0L, 1L, 2L, 1L, 3L, 1L, 1L, 0L, 2L, 2L, 1L, 3L, 3L, 2L, 0L, 0L, 1L, 2L, 1L, 0L, 2L, 0L, 0L, 4L, 4L, 2L), Treat1 = structure(c(10L, 14L, 8L, 2L, 3L, 12L, 1L, 10L, 6L, 2L, 11L, 11L, 15L, 1L, 8L, 3L, 13L, 9L, 9L, 11L, 1L, 8L, 14L, 5L, 10L, 8L, 15L, 11L, 7L, 6L, 13L, 11L, 7L, 1L, 1L, 2L, 7L, 12L, 5L, 1L, 8L, 1L, 9L, 8L,12L, 14L, 12L, 7L, 8L, 14L, 3L, 3L, 5L, 1L, 1L, 11L, 6L, 5L, 5L, 13L, 9L, 3L, 8L, 9L, 13L, 9L, 7L, 9L, 2L, 6L, 10L, 3L, 11L, 4L, 3L, 15L, 12L, 6L, 4L, 3L, 8L, 8L, 11L, 1L, 11L, 2L, 11L, 5L, 12L, 6L, 8L, 14L, 1L, 9L, 9L, 10L, 10L, 5L, 14L, 3L), .Label = c("D", "U", "R", "E", "C", "Y", "L", "O", "G", "T", "N", "J", "V", "X", "A"), class = "factor"), Treat2 = structure(c(15L, 13L, 7L, 8L, 2L, 5L, 15L, 4L, 2L, 7L, 6L, 2L, 3L, 14L, 10L, 7L, 7L, 14L, 11L, 7L, 6L, 1L, 5L, 13L, 11L, 6L, 10L, 5L, 3L, 1L, 7L, 9L, 6L, 10L, 5L, 11L, 15L, 9L, 7L, 11L, 10L, 2L, 3L, 3L, 5L, 11L, 8L, 6L,4L, 5L, 15L, 8L, 8L, 2L, 2L, 10L, 4L, 1L, 10L, 11L, 10L, 8L, 7L, 7L, 8L, 14L, 16L, 11L, 10L, 9L, 3L, 15L, 13L, 1L, 11L, 11L, 9L, 7L, 10L, 9L, 3L, 7L, 5L, 13L, 3L, 14L, 10L, 10L, 15L, 13L, 15L, 12L, 14L, 11L, 5L, 4L, 2L, 3L, 11L, 10L), .Label = c("B", "X", "R", "H", "L", "D", "U", "Q", "K", "C", "T", "V", "J", "E", "F", "A"), class = "factor"), Near = c(0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0), Co1 = c(2, 5, 1, 1, 0, 1, 1, 2, 1, 2, 5, 2, 1, 0, 1, 2, 6, 3, 3, 1, 2, 2, 3, 0, 1, 0, 1, 0, 2, 1, 0, 1, 2, 3, 1, 2, 2, 0, 0, 2, 3, 3, 1, 1, NA, 2, 0, 2, 1, NA, 1, 1, 0, 1, 2, 0, 2, 1, 1, 1, 2, 3, 1, 0, 4, 0, 0, 0, 2, 2, 1, 1,2, 0, 1, 2, 1, 0, 0, 0, 0, 2, 1, 2, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 5, 1), Co2 = c(1, 1, 2, 2, 4, 1, 3, 0, 5, 2, 2, 4, 1, 1, 2, 1, 2, 3, 0, 2, 3, 3, 0, 3, 1, 0, 1, 1, 1, 2, 0, 1, 1, 1, 2, 3, 2, 2, 3, 0, 0, 0, 1, 2, NA, 1, 1, 1, 0, 2, 1, 1, 2, 5, 0, 2, 1, 4, 1, 1, 3, 0, 1, 1, 1, 1, NA, 0, 2, 1, 1, 3, 2, 1, 2, 1, 3, 1, 2, 0, 1, 5, 2, 2, 1, 2, 3, 4, 3, 1, 1, 0, 5, 1, 1, 0, 1, 1, 2, 0)), .Names = c("Count", "Treat1", "Treat2", "Near", "Co1", "Co2"), row.names = c(1759L, 959L, 1265L, 1504L, 630L, 1905L, 1885L, 1140L, 1187L, 1792L, 1258L, 1125L, 756L, 778L, 1718L, 1797L, 388L, 715L, 63L, 311L, 1492L, 1128L, 629L, 536L, 503L, 651L, 1684L, 1893L, 721L, 1440L, 1872L, 1444L, 1593L, 143L, 1278L, 1558L, 1851L, 1168L, 1829L, 386L, 365L, 849L, 429L, 155L, 11L, 1644L, 101L, 985L, 72L, 459L, 1716L, 844L, 1313L, 77L, 1870L, 744L, 219L, 513L, 644L, 831L, 338L, 284L, 211L, 1096L,243L, 1717L, 1881L, 1784L, 1017L, 992L, 45L, 707L, 489L, 1267L, 1152L, 1819L, 995L, 510L, 1350L, 1700L, 56L, 1754L, 725L, 1625L, 319L, 1818L, 1287L, 1634L, 953L, 1351L, 1787L, 923L, 917L, 484L, 886L, 390L, 1531L, 679L, 1811L, 1736L), class = "data.frame")

detach("package:gbm", unload = TRUE )
remove.packages("gbm")
require(devtools)

install_version("gbm", version = "2.1.3")

set.seed(12345)
require(gbm)

n.trees <- 10000

m1.gbm <- gbm(Count ~ Treat1 + Treat2 + Near + Co1 + Co2, data = mydata, distribution = "poisson", n.trees = n.trees)

head(predict(m1.gbm, newdata = mydata, n.trees = n.trees, type = "response"))
[1] 0.8620154 2.8210216 0.8800267 3.7808341 0.4749737 0.3716022

predict(m1.gbm, newdata = head(mydata), n.trees = n.trees, type = "response")
[1] 0.8620154 2.8210216 0.8800267 3.7808341 0.4749737 0.3716022

...как и ожидалось. Тем не мение,

detach("package:gbm", unload = TRUE )
remove.packages("gbm")

install.packages("gbm", dependencies = TRUE)
# I had to restart R after this, otherwise the following line failed with:
# Loading required package: gbm
# Error: package or namespace load failed for ‘gbm’ in get(method, envir = home):
# lazy-load database '/home/container/R/x86_64-pc-linux-gnu-library/3.5/gbm/R/gbm.rdb' is corrupt 
require(gbm)

m1.gbm <- gbm(Count ~ Treat1 + Treat2 + Near + Co1 + Co2, data = mydata, distribution = "poisson", n.trees = n.trees)

head(predict(m1.gbm, newdata = mydata, n.trees = n.trees, type = "response"))
[1] 0.7524109 2.8789957 0.7843470 4.1724821 0.4525449 0.2036923

predict(m1.gbm, newdata = head(mydata), n.trees = n.trees, type = "response")
[1] 2.2216079 1.2806235 0.9109426 2.2842149 2.4828922 0.6124778

... что демонстрирует проблему в моем предыдущем посте.

Я нахожу это довольно удивительным, так как gbm — хорошо известный пакет, хотя я вижу, что виньетка была обновлена ​​в прошлом месяце, так что, возможно, последняя версия была выпущена совсем недавно. Мне не удалось найти точную дату на здесь. Как лучше всего поступить здесь?


person Robert Long    schedule 08.10.2018    source источник
comment
Похоже, это не единственная проблема, связанная с обновлением с 2.1.3 до 2.1.4: гбм #27; Я не знаю, связана ли эта ошибка с этой, но, тем не менее, я ожидаю, что она больше подходит как отчет об ошибке, чем вопрос программирования на SO.   -  person r2evans    schedule 08.10.2018
comment
Еще два замечания: (1) пожалуйста, не включайте код, вызывающий побочные эффекты, такой как remove.packages, в пример кода; оставлять его закомментированным — это нормально, но иметь это в коде — плохая практика, когда кто-то бездумно копирует ваш код на свою консоль и что-то теряет (эй, вот USB-накопитель на улице, может быть, я подключите его к моему ноутбуку и проверьте во время работы над диссертацией). (2) я рекомендую против использовать require всегда, если только вы не зафиксируете его возвращаемое значение и не сделаете с ним что-то; вместо этого используйте library. Ссылки: stackoverflow.com/a/51263513/3358272   -  person r2evans    schedule 08.10.2018
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он касается уже сообщенного gbm ошибка.   -  person desertnaut    schedule 08.10.2018
comment
@desertnaut да ... ошибка, о которой сообщили 21 час назад, примерно в то же время, когда был задан этот вопрос, имеет странную близкую причину. мне кажется, это оп здесь, кто на самом деле открыл вопрос ...   -  person Félix Adriyel Gagnon-Grenier    schedule 09.10.2018
comment
Мы должны перестать перемещать стойки ворот в таких случаях. ОП здесь проявил должную осмотрительность, и я не вижу причин, по которым их вопрос должен быть закрыт для этого.   -  person Makoto    schedule 09.10.2018
comment
@Makoto OP действительно сделал это в предыдущем вопросе с самостоятельным ответом (возможно, вы его пропустили ?); учитывая этот вопрос и проблему Github, возможно, нынешняя не имеет особого смысла, но рад услышать, возможно, разные мнения...   -  person desertnaut    schedule 10.10.2018
comment
@desertnaut: Я знал о вопросе ОП с тех пор, как они опубликовали об этом на Meta. Это похоже на совершенно правильный поток — задайте вопрос, обнаружите, что он связан с другой проблемой, задайте другой вопрос об этой конкретной проблеме.   -  person Makoto    schedule 10.10.2018
comment
@Makoto Я понимаю вашу точку зрения, и, возможно, это довольно маргинальный случай; в любом случае, я действительно проголосовал за то, чтобы закрыть вопрос в первую очередь (после того, как я проголосовал за предыдущий вопрос и его ответ), но мой голос был только один - поэтому у нас есть система голосования, не так ли? это?   -  person desertnaut    schedule 10.10.2018
comment
@Makoto, и я до сих пор не вижу другого способа ответить на конкретный вопрос (Как лучше поступить здесь?), кроме как перейти на предыдущую версию и рассмотреть возможность открытия вопроса @ Github, ответ на который уже был предложен в предыдущем ОП. вопрос...   -  person desertnaut    schedule 10.10.2018