Указание пользовательских весов для непараметрической оценки пространственно изменяющегося относительного риска в spatstat

Есть ли способ указать веса в relrisk.ppp функции в spatstat (версия 1.63-3)?

Функция relrisk.ppp вызывает функцию density.ppp, которая позволяет пользователям указывать свои собственные веса.

Например, давайте построим на предоставленных spatstat.data::urkiola данных, где вместо отдельных деревьев местоположениями являются древовидные насаждения, и у нас есть вторая числовая метка для частоты появления деревьев в каждой точке-местоположении:

urkiola_new <- spatstat.data::urkiola
urkiola_new$marks <- data.frame("type" = urkiola_new$marks, "freq" = rpois(urkiola_new$n, 3))

f1 <- spatstat::relrisk(urkiola_new, weights = urkiola_new$marks$freq)

При использовании urkiola_new в вызове relrisk urkiola_new перехватывается stopifnot(is.multitype(X)) в relrisk.ppp. Затем я попытался указать веса отдельно как вектор, используя исходные данные urkiola,

f2 <- spatstat::relrisk(urkiola, weights = urkiola_new$marks$freq)

но был пойман предупреждением от функции pixellate.ppp внутри внутренней функции density.ppp:

Error in pixellate.ppp(x, ..., padzero = TRUE) : length(weights) == npoints(x) || length(weights) == 1 is not TRUE

Та же ошибка возникает, когда я конвертирую веса в список

urkiola_weights <- split(urkiola_new$marks$freq, urkiola_new$marks$type)

f3 <- spatstat::relrisk(urkiola, weights = urkiola_weights)

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


person Ian Buller    schedule 05.05.2020    source источник
comment
Просто подсказка: не используйте $ для извлечения данных из объекта и, особенно, не используйте $ для присвоения значений компонентам объекта. Это может повредить внутреннюю структуру. Например, присвоение X$marks <- value приводит к повреждению внутренней структуры X. Для этого используйте marks(X) <- value.   -  person Adrian Baddeley    schedule 06.05.2020
comment
@AdrianBaddeley Спасибо за важный совет!   -  person Ian Buller    schedule 06.05.2020


Ответы (1)


Функция relrisk.ppp в настоящее время не предназначена для обработки весов. В справочной статье для relrisk.ppp веса не упоминаются.

Приведенный выше пример не работает, потому что relrisk.ppp применяет density.ppp отдельно к подшаблонам точек каждого типа, а дополнительный аргумент weights является неправильной длиной для этих подшаблонов.

Я отвечу на этот вопрос как на запрос функции, чтобы добавить эту возможность в relrisk.ppp. Это должно быть сделано в ближайшее время.

Обновление: теперь это реализовано в версии для разработки, spatstat 1.64-0.018 доступно в репозитории github spatstat < / а>

person Adrian Baddeley    schedule 06.05.2020
comment
Отличные новости! Я ценю быстрый ответ. - person Ian Buller; 06.05.2020
comment
Обновление: это реализовано в последней общедоступной версии spatstat, которая будет опубликована на CRAN как spatstat 1.64-1. - person Adrian Baddeley; 13.05.2020
comment
Фантастика! Спасибо за добавление этой функции. - person Ian Buller; 15.05.2020