Почему попытки отфильтровать / подмножество объекта racked survey design завершаются неудачей?

#r #survey

#r #опрос

Вопрос:

Я пытаюсь отфильтровать строки в объекте разработки опроса, чтобы исключить определенное подмножество данных. В приведенном ниже примере, который состоит из данных опроса из нескольких школ, я пытаюсь исключить данные из школ округа Аламеда, Калифорния.

Удивительно, но когда объект разработки опроса включает веса, созданные сгребанием, попытки отфильтровать или подмножествовать данные заканчиваются неудачей. Я думаю, что это ошибка, но я не уверен. Почему наличие сглаженных весов изменяет результат попытки отфильтровать или подмножить данные?

 library(survey)

data(api)

# Declare basic clustered design ----
cluster_design <- svydesign(data = apiclus1,
                            id = ~dnum,
                            weights = ~pw,
                            fpc = ~fpc)

# Add raking weights for school type ----
pop.types <- data.frame(stype=c("E","H","M"), Freq=c(4421,755,1018))
pop.schwide <- data.frame(sch.wide=c("No","Yes"), Freq=c(1072,5122))

raked_design <- rake(cluster_design,
                     sample.margins = list(~stype,~sch.wide),
                     population.margins = list(pop.types, pop.schwide))

# Filter the two different design objects ----
subset_from_raked_design <- subset(raked_design, cname != "Alameda")

subset_from_cluster_design <- subset(cluster_design, cname != "Alameda")

# Count number of rows in the subsets
# Note that they surprisingly differ
  nrow(subset_from_raked_design)
#> [1] 183
  nrow(subset_from_cluster_design)
#> [1] 172
  

Эта проблема возникает независимо от того, как вы пытаетесь подмножить данные. Например, вот что происходит, когда вы пытаетесь использовать индексацию строк для подмножества только первых 10 строк:

 nrow(cluster_design[1:10,])
#> 10
nrow(raked_design[1:10,])
#> 183
  

Ответ №1:

Такое поведение является результатом того факта, что survey пакет пытается помочь вам избежать статистической ошибки.

Для особенно сложных проектов, включающих калибровку / последующую стратификацию / рейкинг, оценки для подгрупп не могут быть просто вычислены путем фильтрации данных извне интересующей подгруппы населения; такой подход приводит к вводящим в заблуждение стандартным ошибкам и доверительным интервалам.

Итак, чтобы вы не столкнулись с этой статистической проблемой, survey пакет не позволяет вам полностью удалять записи за пределами интересующего вас подмножества. Вместо этого он, по сути, принимает к сведению, какие строки вы хотите игнорировать, а затем корректирует веса вероятности, чтобы они были фактически равны нулю.

В примере из этого вопроса вы можете видеть, что в строках, которые должны были быть отфильтрованы, их значение в subset_from_raked_design$prob объекте равно Inf (что фактически означает, что соответствующим строкам в данных присваивается нулевой вес).

 subset_from_raked_design$prob[1:12]
#> Inf Inf Inf Inf Inf Inf
#> Inf Inf Inf Inf Inf 
#> 0.01986881 ....

raked_design$prob[1:12]
#> 0.01986881 0.03347789 0.03347789 0.03347789 0.03347789 0.03347789
#> 0.03347789 0.03347789 0.03347789 0.02717969 0.02717969
#> 0.01986881 ....
  

Комментарии:

1. спасибо, что написали это так четко.. связанный код gist.github.com/ajdamico/9b3232a1d986b3460baaa90f5fed3402