#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