R Ошибка без пометки: obsCovData не имеет строк M*obsNum
Я новичок в R и пытаюсь смоделировать вероятность заселения для своего вида (Lepilemur). У меня есть 21 сайт, 2 ковариаты сайта и 3 ковариаты наблюдения. Мой код выглядит следующим образом:
lepi<-read.csv("Lepilemur2.csv", header=T)
nSites<- 21
lepiDetects<- lepi[,2:4]
lepiSiteCovars<-as.data.frame(lepi[,5:6])
lepiObsCovars<-as.data.frame(lepi[,7:9])
detect<-apply(lepiDetects, 2, function(x){as.numeric(as.character(x))})
umf<-unmarkedFrameOccu(y=detect, siteCovs= lepiSiteCovars, obsCovs=lepiObsCovars)
Однако, когда я запускаю последнюю строку кода, я получаю следующую ошибку: Ошибка в validObject(.Object): недопустимый объект класса "unmarkedFrame": obsCovData не имеет строк M*obsNum
В моей глобальной среде говорится, что у меня есть 21 наблюдение трех переменных.
Мы будем очень признательны за любую помощь, которую вы можете мне предложить.
Спасибо,
Баффи
1 ответ
Для вашего случая я бы сделал
umf<-unmarkedFrameOccu(y=detect, siteCovs= lepiSiteCovars,
obsCovs=list(lepiObsCovars=lepiObsCovars))
Подробности о том, почему это сработает, следующие. В руководстве для unmarkedFrameOccu говорится, что вы можете использовать фрейм данных, но в этом есть что-то странное:
obsCovs: либо именованный список ковариат "data.frame", которые различаются внутри сайтов, либо "data.frame" со строками RxJ в порядке возрастания сайта.
Протестировал на примере из библиотеки unmarked
, моделируем некоторые данные:
library(unmarked)
R <- 4 # number of sites
J <- 3 # number of visits
y <- matrix(c(
1,1,0,
0,0,0,
1,1,1,
1,0,1), nrow=R, ncol=J, byrow=TRUE)
site.covs <- data.frame(x1=1:4, x2=factor(c('A','B','A','B')))
obs.covs <- list(
x3 = matrix(c(
-1,0,1,
-2,0,0,
-3,1,0,
0,0,0), nrow=R, ncol=J, byrow=TRUE),
x4 = matrix(c(
'a','b','c',
'd','b','a',
'a','a','c',
'a','b','a'), nrow=R, ncol=J, byrow=TRUE))
Пример из виньетки работает со списком:
umf <- unmarkedFrameOccu(y=y, siteCovs=site.covs,
obsCovs=obs.covs)
Но если мы сделаем что-то похожее на ваш пример, мы получим ошибку:
x4_df <- data.frame(obs.covs$x4)
umf <- unmarkedFrameOccu(y=y, siteCovs=site.covs,
obsCovs=x4_df)
Error in validObject(.Object) :
invalid class “unmarkedFrame” object: obsCovData does not have M*obsNum rows.
Итак, мы должны сделать:
x4_list <- list(x4=data.frame(obs.covs$x4))
umf <- unmarkedFrameOccu(y=y, siteCovs=site.covs,
obsCovs=x4_list)