'spatstat' 'конверт'-объект не может быть оценен dclf.test (ошибка: неправильное количество строк)

У меня есть пространственно-временные данные о заселении кустарников из-за очень большого количества особей, ограниченных тремя полигональными трансектами (шириной 5 м, длиной 60-100 м, расположенными на расстоянии ~30 м друг от друга). Я анализирую данные в «спатстате» версии 1.58-2.

Я хочу оценить кластеризацию между особями, как в целом (все отмеченные на карте особи), так и в последующих когортах (рекруты по сравнению с установленными за 7 последующих периодов) по «pcfinhom» и «pcfcross.inhom». Я создал 'конверты'-объекты с аргументами 'savefuns = T' и 'savepatterns = T' для последующей оценки DCLF-тестом, например:

T_all_PCFi_gl<-envelope(T_all_ppp,fun=pcfinhom,nsim=39,verbose=T, simulate=expression(rpoispp(den_tr[["T_all"]])), #density in all transects correction="trans",global=T, savefuns = T, savepatterns = T)

Однако, если я хочу проверить результаты DCLF-тестом,

dclf.test(T_all_PCFi_gl)

Я все еще получаю это сообщение об ошибке:

Error in data.frame(r = rvals, obs = fX, mmean = m, lo = lo, hi = hi):arguments imply differing number of rows: 55, 56

Я проследил проблему до объекта «конверт», где у «simfun» есть еще одно наблюдение, чем у самого фрейма данных, но что я делаю неправильно? Как я могу исправить это и заставить DCLF-тест работать правильно?

Самое странное, что это происходит не во всех 7 объектах-конвертах pcfcross.inhom, а, по-видимому, только в тех, у которых количество особей больше (>700).

Это моя ошибка (если да, то где в коде?), или это ошибка?

Заранее большое спасибо за ответ! (извините, что не выложил данные, но они должны быть опубликованы в статье)

EDIT: Вот результат трассировки (,3):
> traceback(,3) 8: stop(gettextf("arguments imply differing number of rows: %s", paste(unique(nrows), collapse = ", ")), domain = NA) 7: data.frame(r = rvals, obs = fX, mmean = m, lo = lo, hi = hi) 6: (function (Y, ..., rvals = NULL, observed = NULL, theory = NULL, funX = NULL, nsim = NULL, nsim2 = NULL, jsim = NULL, jsim.mean = NULL, type = c("pointwise", "global", "variance"), alternative = c("two.sided", ... 5: do.call(envelope.matrix, resolve.defaults(list(Y = as.matrix(df)), aargh, list(type = etype, csr = csr, funX = Y, Yname = Yname, weights = wt), .StripNull = TRUE)) 4: envelope.envelope(X, ..., savefuns = TRUE, savepatterns = savepatterns, Yname = Xname, verbose = verbose) 3: envelope(X, ..., savefuns = TRUE, savepatterns = savepatterns, Yname = Xname, verbose = verbose) 2: envelopeTest(X, ..., exponent = 2, alternative = alternative, rinterval = rinterval, leaveout = leaveout, scale = scale, clamp = clamp, interpolate = interpolate, Xname = Xname) 1: dclf.test(colcl_b1_pcf, alternative = "greater")

Изменить 2: после обновления до версии 1.58-2.042:

> dclf.test(colcl_b5_pcf)
Error in (function (Y, ..., rvals = NULL, observed = NULL, theory = NULL,  
: 
nrow(funX) == nrow(Y) is not TRUE`

> traceback(,3)
8: stop(simpleError(msg, call = sys.call(-1)))
7: stopifnot(nrow(funX) == nrow(Y))
6: (function (Y, ..., rvals = NULL, observed = NULL, theory = NULL, 
   funX = NULL, nsim = NULL, nsim2 = NULL, jsim = NULL, jsim.mean = NULL, 
   type = c("pointwise", "global", "variance"), alternative = 
c("two.sided", 
...
5: do.call(envelope.matrix, resolve.defaults(list(Y = as.matrix(df)), 
   aargh, list(type = etype, csr = csr, funX = Y, Yname = Yname, 
       weights = wt), .StripNull = TRUE))
4: envelope.envelope(X, ..., savefuns = TRUE, savepatterns = savepatterns, 
   Yname = Xname, verbose = verbose)
3: envelope(X, ..., savefuns = TRUE, savepatterns = savepatterns, 
   Yname = Xname, verbose = verbose)
2: envelopeTest(X, ..., exponent = 2, alternative = alternative, 
   rinterval = rinterval, leaveout = leaveout, scale = scale, 
   clamp = clamp, interpolate = interpolate, Xname = Xname)
1: dclf.test(colcl_b5_pcf)

person JSulavik    schedule 22.02.2019    source источник


Ответы (1)


Вероятно, это ошибка в spatstat, но я не смог ее воспроизвести. Без ваших данных я не смогу найти ошибку.

Пожалуйста, перезапустите пример и после возникновения ошибки введите traceback(,3) и запишите распечатанный вывод. Это может помочь мне отследить ошибку.

Вы также можете попробовать включить аргумент ginterval в вызов envelope. Проблема, вероятно, связана с правилом по умолчанию для расчета ginterval.

person Adrian Baddeley    schedule 23.02.2019
comment
Большое спасибо за ответ и совет! Я проверю аргумент 'ginterval' и вернусь с выводом из 'traceback(,3)'. - person JSulavik; 25.02.2019
comment
Я указал от ginterval до c(0,15) в envelope-вызове; это помогло для всего набора данных envelope-объект (больше нет ошибки в dclf.test), но, к сожалению, не для подмножеств. См. вывод traceback(,3) в отредактированном вопросе (вывод слишком длинный для комментария). - person JSulavik; 25.02.2019
comment
В команде конверта попробуйте опустить аргумент «глобальный», а затем повторите попытку dclf.test для полученного объекта. - person Adrian Baddeley; 25.02.2019
comment
Установите последнюю разрабатываемую версию spatstat (версия 1.58-2.041) с github и повторите попытку. - person Adrian Baddeley; 26.02.2019
comment
Большое спасибо! Я попробую как обновиться до версии 1.58-2.041, так и запустить envelope с global = F. - person JSulavik; 26.02.2019
comment
Запуск envelope с global = F в spatstat-версии 1.58-2 (т.е. CRAN-версии) работал нормально, т.е. в последующих dclf.test ошибок не было. проверить, могу ли я использовать global = T. - person JSulavik; 27.02.2019
comment
Я обновился до spatstat версии 1.58-2.042 с GitHub. К сожалению, после повторного запуска команды envelope с global = T произошла ошибка, аналогичная/идентичная предыдущей (см. Edit 2). - person JSulavik; 27.02.2019
comment
На вопрос ответил @AdrianBaddeley: видимо, это ошибка, исправленная в spatstat версии 1.58-2.043. - person JSulavik; 08.03.2019