pcountOpen()报错:参数行数不匹配问题求助
问题:pcountOpen模型运行报错"arguments imply differing number of rows: 102, 0"
问题背景
已创建用于pcountOpen()的unmarkedFramePCO数据框,但运行模型时触发行数不匹配错误,且已验证所有输入行长度一致。
数据框创建代码
y <- bird[,2:3] siteCovs <- bird[,c("cotton","corn","soy","rice","woodlot","develop")] obsCovs <- list(date = bird[ ,7:8], year = bird[,5:6]) umf <- unmarkedFramePCO(y = y, siteCovs = siteCovs, obsCovs = obsCovs, numPrimary = 4)
模型运行代码及错误信息
modelbird <- pcountOpen( pformula = ~ date + year, # 探测概率公式 lambdaformula = ~ cotton + corn + soy + rice + woodlot + develop, # 初始丰度公式 gammaformula = ~ 1, # 补充率公式 omegaformula = ~ 1, # 表观存活率公式 iotaformula = ~ 1, # 迁入率公式(如适用) data = umf, # 数据 K = 110 # 丰度求和上限 )
触发错误:
Error in data.frame(..., check.names = FALSE) : arguments imply differing number of rows: 102, 0
示例数据集
> head(bird) Nest_BoxID survey1 survey2 average highest point year1 year2 date1 date2 time1 time2 temp1 temp2 wind1 wind2 cotton corn soy rice woodlot 1 AMKE 1 30 52 41.0 52 2 2022 2022 150 168 0.2965278 0.2743056 22 79.2 3 0.0 0.004317789 0.2043754 0.4945308 0.231145653 0.006044905 2 AMKE A 21 22 21.5 22 1 2022 2022 150 186 0.3125000 0.2972222 25 28.4 3 1.8 0.004960317 0.4419643 0.5163690 0.006448413 0.000000000 3 AMKE C 33 55 44.0 55 2 2022 2022 151 170 0.3312500 0.3159722 26 71.7 5 4.8 0.004295197 0.2342835 0.3326825 0.393205779 0.000000000 4 AMKE 2 38 30 34.0 38 2 2022 2022 151 162 0.2805556 0.2743056 24 74.4 1 0.0 0.001485001 0.1986932 0.6875557 0.058212058 0.000000000 5 AMKE 3 40 18 29.0 40 2 2022 2022 153 160 0.2805556 0.2881944 22 71.5 4 2.2 0.039283651 0.1666667 0.3957250 0.337666089 0.008087811 6 AMKE 4 11 7 9.0 11 2 2022 2022 151 170 0.2930556 0.3430556 23 82.3 2 0.0 0.353552860 0.1545350 0.1577123 0.234257655 0.045927210 develop 1 0.05497985 2 0.02926587 3 0.03436158 4 0.04752005 5 0.03466205 6 0.04303871
问题排查与解决方案
核心原因:观测协变量与初级抽样期不匹配
unmarkedFramePCO要求观测协变量(obsCovs)的维度必须对应初级抽样期×次级抽样期的结构:
- 你设置了
numPrimary = 4,但当前y仅包含2列(对应2次次级抽样),没有覆盖4个初级期的探测数据; obsCovs中的date和year也仅各有2列,且所有年份均为2022,完全未匹配4个初级期的结构,导致模型运行时出现行数不匹配错误。
修复步骤
调整探测历史矩阵
y:
若每个初级期包含2次次级抽样,4个初级期对应的y应该是n行 × 8列的矩阵(4×2),而非当前的2列。需补充其余3个初级期的探测数据。匹配观测协变量维度:
obsCovs中的每个元素(如date、year)需对应n行 × 8列的矩阵,或者按初级期分组为包含4个元素的列表(每个元素对应1个初级期的2次抽样协变量)。验证数据框结构:
创建umf后,运行以下命令确认结构正确性:summary(umf)需确保
Number of primary periods为4,Number of secondary periods per primary与实际抽样次数一致,且所有协变量的行列数匹配。简化测试(可选):
若暂时无法补充数据,可先将numPrimary设为1,匹配现有数据的抽样期数量,验证模型能正常运行后再扩展到4个初级期。
内容的提问来源于stack exchange,提问作者Tyler
相关产品推荐
相关产品推荐

