#r #survey
#r #опрос
Вопрос:
Я довольно новичок в RStudio, но я пытаюсь изучить пакет опроса для рабочих целей. Я пытаюсь настроить веса svydesign
объекта с помощью trimWeights
функции. Это код, который я использую до сих пор.
library(survey)
library(tidyverse)
Sys.setenv(JAVA_HOME='C:\Program Files\Java\jre1.8.0_201')
library(xlsx)
allsurveys = read.csv('allsurveys.csv', stringsAsFactors = FALSE, fileEncoding="UTF-8-BOM")
> head(allsurveys)
case daytype family
1 36846 3 VA October WD No
2 36847 3 VA October WD No
3 36848 3 VA October WD No
4 36849 3 VA October WD No
5 36850 3 VA October WD Yes
6 36852 3 VA October WD No
daytype.table = read.csv('daytype_counts.csv', stringsAsFactors = FALSE, fileEncoding="UTF-8-BOM")
> head(daytype.table)
daytype freq
1 3 VA October WD 179786
2 3 VA October WE 58237
3 3 VA October WE Autumn Half-term SH 54578
4 3 VA October WD Autumn Half-term SH 70652
5 3 VA November WD 193441
6 3 VA November WE 98562
allsurveys$daytype = factor(allsurveys$daytype)
allsurveys$family = factor(allsurveys$family)
N = sum(daytype.table$freq)
na = nrow(allsurveys)
max.a = (3*N)/na
min.a = (0.3*N)/na
des.a = svydesign(ids = ~1,
strata = NULL,
fpc = rep(N,na),
data = allsurveys
)
ps.des.a <- postStratify(design = des.a, strata = ~daytype, population = daytype.table)
ps.des.c <- postStratify(design = des.c, strata = ~daytype, population = daytype.table)
ps.des.a.trim <- trimWeights(ps.des.a, lower=min.a, upper=max.c, strict=TRUE)
ps.des.c.trim <- trimWeights(ps.des.c, lower=min.c, upper=min.c, strict=TRUE)
trimWeights
Функция выполняется и создает новый svydesign
объект, но, похоже, верхний предел применяется неправильно. Если я посмотрю на веса, используя list(ps.des.a.trim$postStrata)
, я получу некоторые веса внизу, которые превышают те, которые max.a
я установил. Я не совсем уверен, что здесь происходит не так. Это потому, что я пытаюсь урезать веса на svydesign
, которые были взвешены с помощью postStratify
?
Комментарии:
1. Добавьте некоторые данные, чтобы мы могли видеть, что вы пытаетесь сделать.
2. Убрал несколько ненужных фрагментов кода. Файл allsurveys.csv содержит данные на уровне обращений, помеченные типом дня, когда был завершен опрос. daytype_counts.csv содержит частоту для каждого типа дня, который используется для взвешивания после стратификации. Надеюсь, это немного прояснит ситуацию.
Ответ №1:
Вы можете извлечь веса следующим образом :
weights(ps.des.a.trim)
На самом деле я заметил то же самое, на что вы ссылаетесь, и это было немного странно. Однако, если вы применяете svymean
функцию или подобные функции, результаты учитывают урезанные веса. Не старые.