2017-08-11 4 views
0

J'ai un fichier contenant des données de sondage. Par exemple, le fichier ressemble à ceci:Poids de sondage et poids de boostrap pour obtenir les chiffres et les CI

IDNUMBER AGE SEX NumPrescr OnPrescr SURV_WGT BSW1 BSW2....BSW500 

    123456  22  1  6   1   ... ... ...  ... 

Ici, OnPrescrp est une variable binaire indiquant si oui ou non les sujets est sur les médicaments d'ordonnance et BSW1 - BSW500 sont les poids bootstrap et SURV_WGT est le poids survery par sujet. Il y a environ 20000 entrées.

Je suis chargé de créer des tableaux de diverses statistiques dans certaines catégories de groupes d'âge-genre. Par exemple, combien d'hommes de 17 à 24 ans prennent des médicaments sur ordonnance? Et j'ai besoin d'un compte N et 95% CI pour chacun de ces types de calculs. Je ne connais pas du tout les méthodes d'enquête. D'après ce que je comprends, je ne peux pas simplement ajouter le nombre de personnes dans chaque catégorie pour obtenir le nombre final N pour chaque question/catégorie (c.-à-d., Je ne peux pas ajouter tous les hommes de 17 à 24 qui utilisent la prescription meds). Au lieu de cela, je dois prendre en compte les poids de survery et les poids bootstrap lors de la construction de mon compte final N et des intervalles de confiance.

m'a alors dit dans STATA c'est une commande d'une ligne:

svyset [pw=SURV_WGT], brr(bsw1-bsw500) 

Je travaille en R cependant. Quelle est la commande équivalente dans R et que fait exactement la commande ci-dessus? PS: Mon échantillon d'environ 20000 individus est un échantillon d'une population d'environ 35 millions d'individus.

Répondre

0

Vous voulez utiliser le package survey dans R. Ce sera votre meilleur ami pour l'analyse de l'enquête pondérée/complexe R.

install.packages("survey")

Le paquet survey a deux étapes à votre analyse. Le premier est la création de l'objet svydesign, qui stocke des informations sur la conception de votre sondage, y compris les pondérations, les poids, les données, etc. Utilisez ensuite un nombre illimité de fonctions d'analyse pour exécuter ces analyses (par exemple, svymean, svyby - pour le sous-groupe analyse, svyglm, et beaucoup plus). En fonction de votre question, vous avez des poids d'enquête et des poids de réplication (bootstrap). Tandis que la fonction svydesign plus courante est utilisée pour les enquêtes avec un seul ensemble de poids, vous voulez utiliser svrepdesign, ce qui vous permettra de spécifier les poids de sondage et les poids de réplication. Consultez la documentation, mais voici ce que vous pouvez faire:

mydesign <- svrepdesign(data = mydata, 
         weights = ~SURV_WGT, 
         repweights = "BSW[0-9]+", 
         type = "bootstrap", 
         combined.weights = TRUE) 

Vous devriez lire la documentation, mais brièvement: data sera votre trame de données, weights prend votre seul vecteur de poids de l'enquête, le plus souvent comme une formule, repweights est génial en ce sens qu'il accepte une chaîne regex qui identifie toutes les colonnes de poids répliquées dans vos données par nom de colonne, type indique à la conception quels sont vos poids répliqués (comment ils ont été dérivés), combined.weights est logique pour savoir si les poids répliqués contiennent des poids d'échantillonnage - Je suppose que c'est vrai mais ce n'est peut-être pas le cas. A partir de cet objet de conception, vous pouvez ensuite lancer l'analyse. Par exemple., calculons le nombre moyen d'ordonnances par sexe:

myresult <- svyby(~NumPrescr, # variable to pass to function 
        by = ~SEX, # grouping 
        design = mydesign, # design object 
        vartype = "ci", # report variation as confidence interval 
        FUN = svymean # specify function from survey package, mean here 
       ) 

Hope this helps! EDIT: si vous voulez regarder quelque chose par groupe d'âge, comme vous le suggérez, vous devez créer une variable de caractère ou de facteur codée pour chaque groupe d'âge et utiliser cette nouvelle variable dans votre appel svyby.

+0

Juste une question rapide. Que se passe-t-il si les comptes sont trop bas? Une erreur sera-t-elle créée? Par exemple, disons que notre groupe d'âge-sexe est composé de 17-24 ans. Le nombre de ces mâles (et IC à 95%) utilisant med3 pourrait être proche de 0. L'utilisation ci-dessus du paquet d'enquête produira-t-elle une erreur dans de tels cas ou simplement l'entrée NA? – jmac

+0

Je ne suis pas sûr de comprendre votre question. Même s'il n'y a qu'une seule observation dans le groupe, cela produira une moyenne et des IC (s'il y a une observation, ce sera le même nombre). Le poids dans ce cas n'aura pas d'importance car c'est la seule observation. Une fois que vous avez plus d'une observation, les poids joueront un rôle dans lequel les observations influencent la statistique (dans ce cas-ci) plus ou moins au sein de ce groupe. Si vous voulez savoir ce que sont les Ns pondérés, utilisez 'svytable'. – deco

+0

Je pense que je comprends maintenant! Juste une dernière question rapide. Je veux également calculer la médiane, l'IQR et la gamme pour les différents groupes d'âge-sexe. Le code correct serait-il de remplacer NumPrescr par AGE et d'utiliser age_sex_group pour la partie "by", puis de changer svymean dans "FUN"? Si oui, y a-t-il des fonctions d'enquête dans l'enquête sur les paquets qui calculent la fourchette médiane, interquartile et la fourchette? Merci beaucoup! – jmac