Comment créer un échantillon stratifié par l'état dans la R
Comment puis-je créer un échantillon stratifié dans R à l'aide de la "échantillonnage" package? Mon jeu de données de 355 000 observations. Le code fonctionne très bien jusqu'à la dernière ligne. Ci-dessous le code que j'ai écrit, mais je reçois toujours le message suivant: "Erreur dans le tri.liste(y) : "x" doit être atomique pour " trier.liste "Avez-vous appelé "trier" sur une liste?"
Merci de ne pas m'indiquer les messages les plus anciens sur Stackoverflow. J'ai fait des recherches, mais n'ont pas été en mesure de les utiliser. Merci.
## lpdata file has 355,000 observations
# Exclude Puerto Rico, Virgin Islands and Guam
sub.lpdata<-subset(lpdata,"STATE" != 'PR' | "STATE" != 'VI' | "STATE" != 'GU')
## Create a 10% sample, stratified by STATE
sort.lpdata<-sub.lpdata[order(sub.lpdata$STATE),]
tab.state<-data.frame(table(sort.lpdata$STATE))
size.strata<-as.vector(round(ceiling(tab.state$Freq)*0.1))
s<-strata(sort.lpdata,stratanames=sort.lpdata$STATE,size=size.strata,method="srswor")}
essayez de remplacer stratanames = tri.lpdata$ÉTAT par stratanames = "ÉTAT".
OriginalL'auteur vatodorov | 2012-03-14
Vous devez vous connecter pour publier un commentaire.
Sans connaître les strates de la fonction - un peu de codage peut faire ce que voulez:
HTH,
Kay
ps: le temps CPU sur mon reliques ordinateur portable est de 0,09!
à l'aide de votre jeu de données, on peut faire : la taille des < table(d$strate) *p; strat <- strates(d, stratanames = "strate", size = taille, method = "srswor"); dsample <- getdata(d, strat); table(dsample$strate)
Merci pour la solution. Je vais aller avec elle.
Votre exemple fonctionne, mais si, quand j'ai utiliser des données réelles, je reçois le message d'erreur "Erreur de tri.liste(y) : "x" doit être atomique pour " trier.liste"", Voici un exemple de code avec les données: de la bibliothèque(à l'étranger); les voitures<-lire.delim("stat.berkeley.edu/classes/s133/data/...); les noms(les voitures); p = 0,1; dsample <- données.image(); taille < table(cars$Pays)*p; strat <- strates(voitures, stratanames = "Pays", size = taille, method = "srswor"); dsample <- getdata(voitures, strat); table(dsample$voitures);
OriginalL'auteur Kay
J'ai dû faire quelque chose de similaire l'année dernière. Si c'est quelque chose que vous n'avez beaucoup, vous pouvez utiliser une fonction comme celle ci-dessous. Cette fonction permet de spécifier le nom du bloc de données, vous êtes d'échantillonnage de, la variable qui est la variable ID, qui est l'strates, et si vous voulez utiliser "ensemble.la graine". Vous pouvez enregistrer à la fonction de quelque chose comme "stratifié.R" et le charger quand vous en avez besoin. Voir http://news.mrdwab.com/2011/05/20/stratified-random-sampling-in-r-from-a-data-frame/
p
n'est pas définie n'importe où dans le code...merci pour cette remarque. Je pense que j'étais juste en s'appuyant sur l'autre réponse, où
p
est dans l'espace de travail, et j'ai oublié de le fixer dans cette copie de la fonction. Maintenant résolu (j'espère!).OriginalL'auteur A5C1D2H2I1M1N2O1R2T1