对于你的情况,我会做
umf<-unmarkedFrameOccu(y=detect, siteCovs= lepiSiteCovars,
obsCovs=list(lepiObsCovars=lepiObsCovars))
关于为什么会起作用的详细信息如下。unmarkedFrameOccu 的手册指出您可以使用数据框,但它有些奇怪:
obsCovs:要么是在站点内变化的协变量“data.frame”的命名列表,要么是具有站点主要顺序的 RxJ 行的“data.frame”。
我使用库中的示例对其进行了测试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)