У меня есть пространственно-временные данные для колонизации кустов из-за очень большого числа особей, ограниченных тремя полигональными разрезами (шириной 5 м, длиной 60-100 м, разнесенными на расстоянии ~ 30 м друг от друга).Я анализирую данные в «spatstat» версии 1.58-2.
Я хочу оценить кластеризацию между индивидуумами, как общей (все картированные особи), так и в последующих когортах (новобранцы против установленных в 7 последующих периодах), 'pcfinhom' & 'pcfcross.inhom'.Я создал 'envelope' -объекты с аргументами '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).
Это моя ошибка (если да, где в коде?), или это ошибка?
Большое спасибо заранее за ответ!(Я извиняюсь за то, что не загружаю данные, но они должны быть опубликованы в статье)
РЕДАКТИРОВАТЬ: Вот вывод из traceback (, 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)