【问题标题】:Issue with R Survey package with NA data when using svyby with covmat option使用带有 covmat 选项的 svyby 时,带有 NA 数据的 R 调查包出现问题
【发布时间】:2021-01-14 18:32:22
【问题描述】:

我想从调查数据(使用调查权重、psu 和分层)中获取子组均值之间的差异,但由于缺少观测值 (NA),我无法这样做。你介意帮助我吗?

我使用了“Survey”包,创建了一个调查设计,并使用 svyby 按子组(城市)对包含 NA(下例中的收入)的观察结果进行了分组。我还设置了 covmat = True 以便以后可以使用 svycontrast 来计算标准误差。但是,当我这样做时,我得到了 NA。

library(survey)
data <- data.frame(psu = 1:8, city = rep(1:2, 4), income = c(2:8, NA), weights = 1)
svy <- svydesign(id=~psu, data = data, weights =~weights)
svyby(~income,~city, svy, svymean, covmat=TRUE) 

  city income       se
1    1      5 1.195229
2    2     NA      NaN

然后我尝试添加各种 NA 删除,但它们似乎都不起作用。

> svyby(~income,~city, svy, svymean, covmat=TRUE, na.rm.by=T, na.rm.all=T) 
   city income       se
 1    1      5 1.195229
 2    2     NA      NaN
svyby(~income,~city, svy, svymean, covmat=TRUE, na.rm = T) 
Error in inflmats[[i]][idxs[[i]], ] <- infs[[i]] : 
  number of items to replace is not a multiple of replacement length

欢迎任何建议。

【问题讨论】:

    标签: r survey


    【解决方案1】:

    看起来像一个错误。

    一种解决方法是提前进行子集化:

    > data <- data.frame(psu = factor(1:8), city = rep(1:2, 4), income = c(2:8, NA), weights = 1)
    > svy <- svydesign(id=~psu, data = data, weights =~weights)
    > svyby(~income,~city, subset(svy,!is.na(income)), svymean, covmat=TRUE)->a
    > a
      city income       se
    1    1      5 1.195229
    2    2      5 1.007905
    > vcov(a)
             1        2
    1 1.428571 0.000000
    2 0.000000 1.015873
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多