R survey - 多级设计的两相函数和警告

R survey - twophase function and warnings with multistage designs

我想使用 R 包 survey 指定具有分层三阶段抽样设计的两阶段设计对象。当多个阶段传递给 twophase 函数的 id 参数时,我收到以下警告:

Warning messages:
1: In `[<-.factor`(`*tmp*`, i, value = 1L) : invalid factor level, NA generated

此警告消息的来源可能是什么?

下面是一个使用 simulated data.

的可重现示例
> library(survey)
> load('./simdata.RData')
> str(simdata)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   3690 obs. of  10 variables:
 $ strat  : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
 $ block  : int  7 7 7 7 7 9 9 9 9 9 ...
 $ house  : int  510 512 516 523 536 578 583 592 595 619 ...
 $ ind    : int  999 1003 1013 1026 1049 1138 1149 1167 1171 1214 ...
 $ P.block: num  0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 ...
 $ P.house: num  0.18 0.18 0.18 0.18 0.025 0.18 0.18 0.18 0.18 0.18 ...
 $ P.ind  : num  0.357 0.357 0.357 0.357 0.357 ...
 $ phase2 : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
 $ age    : num  42.7 21.5 32.2 36.9 44.1 ...
 $ bmi    : num  31.1 25.9 23.7 28.9 23.7 ...
> 
> twophase.design = twophase(id=list(~block+house+ind,~1),
+                            strata=list(~strat,NULL),
+                            probs=list(~P.block+P.house+P.ind,NULL),
+                            subset=~phase2,
+                            data=simdata,method='full')
There were 50 or more warnings (use warnings() to see the first 50)
> 
> head(warnings())
Warning messages:
1: In `[<-.factor`(`*tmp*`, i, value = 1L) : invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, i, value = 1L) : invalid factor level, NA generated
3: In `[<-.factor`(`*tmp*`, i, value = 1L) : invalid factor level, NA generated
4: In `[<-.factor`(`*tmp*`, i, value = 1L) : invalid factor level, NA generated
5: In `[<-.factor`(`*tmp*`, i, value = 1L) : invalid factor level, NA generated
6: In `[<-.factor`(`*tmp*`, i, value = 1L) : invalid factor level, NA generated

谢谢!


更新:

我在用另一组 simulated data 尝试 twophase 时也收到以下错误消息:

> load('./simdata1.RData')
> str(simdata1)
'data.frame':   3468 obs. of  10 variables:
 $ strat  : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
 $ block  : int  4 9 9 9 9 9 9 9 9 9 ...
 $ house  : int  435 586 587 594 613 619 619 621 634 634 ...
 $ ind    : int  854 1157 1158 1170 1203 1213 1214 1218 1242 1243 ...
 $ P.block: num  0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 ...
 $ P.house: num  0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 0.18 ...
 $ P.ind  : num  0.55 0.55 0.357 0.55 0.357 ...
 $ phase2 : logi  TRUE FALSE FALSE FALSE FALSE FALSE ...
 $ age    : num  47.8 54 38 69.4 33.2 ...
 $ bmi    : num  28 50.5 35.8 37.5 27.1 ...
> twophase.design = twophase(id=list(~block+house+ind,~1),
+                            strata=list(~strat,NULL),
+                            probs=list(~P.block+P.house+P.ind,NULL),
+                            subset=~phase2,
+                            data=simdata1,method='full')
Error in Dcheck_subset(strata[uid, stage], insubset, probs[uid, stage],  : 
  subscript out of bounds

这是一个错误。

正在使用

twophase.design = twophase(id=list(~block,~1),
strata=list(~strat,NULL), 
probs=list(~I(P.block*P.house*P.ind, NULL),
subset=~phase2, data=simdata1, method='full')

将很好地近似于预期的设计——因为在第 1 阶段没有给出有限总体校正,第 1 阶段的设计被视为有放回抽样,只有第一阶段的抽样会影响标准错误。

修复将在调查包的版本 3.35-1 中