Come selezionare un campione di quote da un set di datiCiao a tutti
Sto lavorando a una ricerca che implica lavorare su un campione rappresentativo. Ho già raccolto dati, ma devo selezionare un sottoinsieme che soddisfi i criteri di rappresentazione che sono 4: Il campione deve avere le seguenti quote da soddisfare:
-
in base al genere: 50% maschi e 50% femmine.
-
in base all'età: 1/3 dai 18 ai 30 anni, 1/3 dai 31 ai 50 anni e 1/3 oltre i 51 anni.
-
in base al livello di reddito familiare: 1/3 da basso, 1/3 da medio 7 e 1/3 da alto.
1/5 della popolazione studiata da ciascuna delle cinque regioni della città (Nord, Sud, Centro, Est e Ovest)
Come posso creare questo campione?
Sto utilizzando JMP pro 17
Accesso ai datiFusione e pulizia dei datiRe: Come selezionare un campione di quote da un set di datiSembra un esercizio da manuale: c'è un capitolo con la soluzione?
Re: Come selezionare un campione di quote da un set di datiNO
In realtà stavo discutendo di questo problema con un collega per iniziare l'analisi dei dati di un progetto con questa tecnica di campionamento delle quote.Re: Come selezionare un campione di quote da un set di datiQuesto è un problema complesso. Quanto è grande la tabella dati da cui stai estraendo i dati? Che dimensione del campione stai estraendo? Hai 90 combinazioni delle tue 4 colonne. Tu e il tuo collega avete trovato un'idea su come affrontare il problema?
Re: Come selezionare un campione di quote da un set di datiE non vuoi selezionare i dati campione in base alla quota effettiva della distribuzione, ma in base alla frazione artificiale?
Che ne dici di una donna, > 51 anni, reddito elevato, del nord?
Dovrebbe essere 1/2 * 1/3 * 1/3 * 1/5? (*)
È molto facile da calcolare, ma forse è troppo restrittivo e non è voluto?
Si pensi solo al caso in cui nella distribuzione originale non ci sia alcuna donna, con più di 51 anni, con reddito elevato e residente a nord.
D'altro canto: se devono essere soddisfatti solo 1/2, 1/3, 1/3 e 1/5, si potrebbero creare casi estremi con 0 dati campione per le donne, > 51 anni, reddito elevato, nord.
Re: Come selezionare un campione di quote da un set di datiNon è elegante e non sono nemmeno sicuro che funzionerà, ma potrebbe. Puoi creare colonne 0,1 per ciascuno dei tuoi criteri e poi combinarle in una singola colonna 0,1 dove 1 significa che tutte le singole colonne dei criteri erano =1. Ciò fornirà il sottoinsieme desiderato. E, se vuoi una selezione casuale da tali righe, usa semplicemente una colonna di convalida stratificata da quella colonna 0,1. Come ho detto, non è elegante ma potrebbe funzionare.
Re: Come selezionare un campione di quote da un set di datitabella dati - caso ideale:
New Table( "quota_samples",
Add Rows( 100000 ),
Compress File When Saved( 1 ),
New Column( "gender",
Character,
Formula( Match( Floor( Random Uniform() * 2 ), 0, "M", "F" ) ),
Compact(),
Set Selected
),
New Column( "income",
Character,
Formula(
Match( Floor( Random Uniform() * 3 ), 0, "low", 1, "medium", "high" )
),
Compact()
),
New Column( "region",
Character,
Formula(
Match( Floor( Random Uniform() * 5 ),
0, "N",
1, "S",
2, "W",
3, "E",
"C"
)
)
),
New Column( "age",
Character,
Formula(
Match( Floor( Random Uniform() * 3 ), 0, "young", 1, "medium", "old" )
)
)
)
Re: Come selezionare un campione di quote da un set di datiPer una tabella ideale di questo tipo (se le probabilità del tuo set di dati corrispondono alle frazioni desiderate), puoi selezionare campioni casuali (campioni casuali per variante o un numero specifico di campioni per variante) oppure una combinazione di tutti e 3...
otterrai sempre i sottogruppi con la frazione richiesta (1/2, 1/3, 1/3 e 1/5)

// random sampling : full data set
if(not(current data table() << has column ("cum_prob")),New Column( "cum_prob",
Formula(
Col Rank( random uniform()) / (
Col Number( 1 ))
)
));
// random sampling : per variant
if(not(current data table() << has column ("cum_prob_indiv")),New Column( "cum_prob_indiv",
Formula(
tmp = random uniform(); // tmp =1; // **)
Col Rank( tmp, :gender, :income, :region, :age ) / (
Col Number( tmp, :gender, :income, :region, :age ))
)
));
// force ratios: 1/2, 1/3, 1/3, 1/5
if(not(current data table() << has column ("rank_indiv")),
New Column( "rank_indiv",
Formula( Col Rank( random uniform(), :gender, :income, :region, :age ) )
));
Graph Builder(
Size( 518, 448 ),
Show Control Panel( 0 ),
Graph Spacing( 4 ),
Variables( X( :gender ), X( :income ), X( :region ), X( :age ) ),
Elements( Position( 1, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 2, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 3, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 4, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Local Data Filter(<BR /> Title( "how many samples do you want ? " ),
Add Filter(
columns( :cum_prob, :cum_prob_indiv, :rank_indiv )
)
)
);
**) Invece di usare CDF con random uniform() , si può randomizzare l'ordine delle righe e usare CDF di "1".
Re: Come selezionare un campione di quote da un set di datiL'ultima opzione funziona anche per tabelle meno sistematiche come quella riportata di seguito.
L'unica limitazione è che se i campioni per una variante specifica sono pochi, esiste un limite chiaro al numero di campioni che possono essere selezionati.
Segue la semplice regola:
Se per una delle varianti (A) ci sono solo N campioni, prendi quelli e scegli casualmente lo stesso numero di campioni dalle altre varianti.
In realtà, per la variante "A", questo NON è campionamento.
Quindi, forse dovresti scegliere solo M << N campioni, casuali tra tutte le varianti.
È possibile adottare la stessa logica (JSL), limitandosi a impostare N su un valore inferiore.
variants = {};
For Each( {gender}, {"F", "M"},
For Each( {age}, {"young", "medium", "old"},
For Each( {income}, {"low", "medium", "high"},
For Each( {region}, {"N", "S", "E", "W", "C"},
Insert Into( variants, Concat Items( {gender, age, income, region} ) )
)
)
)
);
Eval(
Eval Expr(
new table(
"unfair",
add rows( 100000 ),
New Column( "variant",Character,
formula(
variants = As constant(Expr( variants ));
Try(
variants[Floor( Random Normal( 45, 30 ) )],
"F young medium C"
);
)
),
New column ("gender",Character, formula(Word(1,:variant))),
New column ("age",Character, formula(Word(2,:variant))),
New column ("income",Character, formula(Word(3,:variant))),
New column ("region",Character, formula(Word(4,:variant))),
)
)
);
Re: Come selezionare un campione di quote da un set di datiHo passato parecchio tempo a riflettere su questa domanda, e non sono arrivato a una buona risposta. Ho generato una tabella dati di esempio simile a @hogi . Di seguito è riportata la modifica a @hogi JSL con il mio codice che ho usato. In pratica, penso che sia più facile da leggere e, nel caso di Age, rappresenta meglio la distribuzione come affermato da @Samira .
New Table( "Samp",
Add Rows( 100000 ),
Compress File When Saved( 1 ),
New Column( "gender",
Character,
Set Each Value( Match( Random Integer( 1, 2 ), 1, "Male", "Female" ) ),
Compact()
),
New Column( "income",
Character,
Set Each Value(
Match( Random Integer( 1, 3 ), 1, "Low", 2, "Medium", "High" )
),
Compact()
),
New Column( "region",
Character,
Set Each Value(
Match( Random Integer( 1, 5 ),
1, "North",
2, "South",
3, "West",
4, "East",
"Ccentre"
)
)
),
New Column( "age",
Character,
Set Each Value(
temp = Random Integer( 18, 80 );
If(
temp <= 30, "Young",
temp <= 50, "Middle Age",
"Old"
);
)
)
)
Re: Come selezionare un campione di quote da un set di datiGrazie per la tua risposta
L'idea è di condurre la ricerca su un campione rappresentativo della popolazione residente nell'intera città
Re: Come selezionare un campione di quote da un set di datiGrazie mille per i tuoi sforzi
Il tuo suggerimento mi ha dato una buona idea per esplorare il mio dataset in modo efficace usando prima il filtro dati locale nel generatore di grafici. Per i miei dati sembra che con alcune combinazioni (come gli uomini di mezza età che vivono nella regione centrale con reddito IM) il campione sia 0
L'idea di creare un campione rappresentativo in questo modo sembra ora non essere pratica. La tecnica di campionamento che avrebbe dovuto essere usata fin dall'inizio è una delle tecniche di campionamento probabilistico. Potrebbe essere il campionamento casuale stratificato, usando solo le 5 regioni come strati. Quindi viene raccolto un campione casuale da ogni strato.
Re: Come selezionare un campione di quote da un set di datiGrazie mille per il tuo tempo e i tuoi sforzi
L'idea di creare un campione rappresentativo in questo modo sembra ora non essere pratica. La tecnica di campionamento che avrebbe dovuto essere usata fin dall'inizio è una delle tecniche di campionamento probabilistico. Potrebbe essere il campionamento casuale stratificato, usando solo le 5 regioni come strati. Quindi viene raccolto un campione casuale da ogni strato.
Re: Come selezionare un campione di quote da un set di datiGrazie per la tua risposta
Penso che tu abbia ragione,
L'idea di creare un campione rappresentativo in questo modo sembra ora non essere pratica. La tecnica di campionamento che avrebbe dovuto essere usata fin dall'inizio è una delle tecniche di campionamento probabilistico. Potrebbe essere il campionamento casuale stratificato, usando solo le 5 regioni come strati. Quindi viene raccolto un campione casuale da ogni strato.
Re: Come selezionare un campione di quote da un set di datiSembra un approccio ragionevole
Re: Come selezionare un campione di quote da un set di datiQuindi, quello che hai chiesto nel post originale è:
campionamento casuale stratificato sproporzionato , giusto?
E gli strati sono i 90 sottogruppi di genere x età x reddito x regione.
Re: Come selezionare un campione di quote da un set di datiDopo aver esaminato attentamente diverse tecniche di campionamento nei libri di testo, ho scoperto che la mia idea originale non si adattava a nessuna di esse. Per ottenere un campione rappresentativo dovresti scegliere una delle tecniche di campionamento probabilistico (che offrono a ogni intervistato della popolazione in studio la stessa probabilità o possibilità di essere incluso nel campione). Queste tecniche includono 4 tipi:
- – Campionamento casuale semplice
- –Campionamento sistematico
- – Campionamento a grappolo
- –Campionamento stratificato
Ecco perché penso che il campionamento stratificato avrebbe potuto essere utilizzato per ottenere il campione di studio dall'inizio ( utilizzando solo le 5 regioni come strati. Quindi , viene raccolto un campione casuale da ogni strato). Le tecniche di campionamento stratificato, a cluster e a quote richiedono la classificazione della popolazione in gruppi reciprocamente esclusivi , il che non è il caso della mia domanda. Ecco perché penso che la mia domanda originale non sia corretta in primo luogo.
:
Re: Come selezionare un campione di quote da un set di datiHm, se confrontiamo questo caso con il DOE...
In un DOE ben progettato non si sceglie nemmeno un (singolo) campione da ciascuno dei 90 sottoinsiemi.
[1 campione da ciascuno dei 90 sottoinsiemi: "fattoriale completo" -> troppo costoso"]
Quindi, forse insieme a una certa semplificazione del modello, qui va bene anche usare un set di dati con voci mancanti in alcuni punti di intersezione? E un passo avanti, forse rimuovendo intenzionalmente (alcuni punti dati da) alcuni punti di intersezione, si può ottenere qualcosa di utile tra dati di input stratificati e un DOE bilanciato?
@Victor_G potrebbe avere un suggerimento?
Re: Come selezionare un campione di quote da un set di dati
Re: Come selezionare un campione di quote da un set di datiPer l'approccio "campionamento casuale - per variante" da
https://community.jmp.com/t5/Discussions/How-to-Select-a-quota-sample-from-a-data-set/mp/821078/highlight/true#M100011
Ho creato uno snippet JSL per stratificare dati arbitrari: basta selezionare le colonne e fare clic su OK.
librecall può essere scaricato qui: Libreria di funzioni di richiamo
Names Default To Here( 1 );
verbose=0;
//Include( ".\libRecall_v2.jsl" );
objects = {"si^myCols", "s^Ncolumns", "s^Nfolds"};
values = {{}, {1}, {5}};
Try( // issue with projects
librecall:genArrays( objects, values, "Stratify", verbose )
);
dt = Current Data Table();
nw = New Window( "K Fold Creator",
<<TYPE></TYPE>Re: Come selezionare un campione di quote da un set di datiCiao @hogi e @Samira ,
Ho appena letto velocemente il post e le risposte e non ho ancora capito al 100% il tuo obiettivo, poiché un set di dati "rappresentativo" può avere implicazioni diverse:
Vuoi comprendere meglio e modellare una risposta/fenomeno basato su dati demografici (età, sesso, posizione geografica, ecc.) oppure vuoi un campione "rappresentativo" per fare inferenze/generalizzazioni sulla popolazione?
- Nel primo caso, poiché si desidera collegare la risposta/fenomeno ad attributi specifici, è meglio disporre di un set di dati bilanciato, ovvero con livelli bilanciati per età, sesso, posizione geografica, ecc., per semplificare la modellazione e l'interpretazione dei risultati.
Utilizzando un approccio DoE, sia creando il tuo progetto personalizzato "da zero" e trovando la persona giusta corrispondente ai diversi attributi, sia creando il tuo progetto D-Optimal grazie a un approccio Candidate Set con dati demografici raccolti, ti aiuterai a studiare e analizzare i diversi fattori demografici nel modo più indipendente e individuale possibile.
- Nel secondo caso, poiché vuoi generalizzare i risultati del campione alla popolazione, devi avere un campione rappresentativo (tanto "parziale" quanto la popolazione) della tua popolazione. Quindi forse non avrai 50/50 maschi/femmine, poiché la popolazione potrebbe essere distorta a 40/60, ad esempio, quindi devi rispettare questa specificità demografica.
Potrebbe essere utile usare un approccio stratificato sui dati demografici che hai raccolto sulle tue 5 regioni. Potresti dover considerare due aspetti: la creazione di campioni delle tue regioni in base alla loro popolazione (assicurati che la proporzione del tuo campione rispetto alla popolazione della regione sia la stessa, quindi una regione altamente/densamente popolata avrà più persone nel set di dati campione) e in base ai dati demografici (sesso, età, ecc...).
In entrambi i casi, consiglierei di raccogliere quanti più dati possibili sulle popolazioni delle tue 5 regioni, per comprendere meglio e informare il tuo metodo di creazione del campione.
Per inciso, puoi anche trovare letteratura sulla segmentazione dei dati demografici, non sono sicuro che la segmentazione per età proposta qui sia davvero utile a causa delle diverse fasce di età: 18-30 (12 anni), 31-50 (19 anni), 51+ (20+ anni?). Inoltre, come definisci il livello di reddito familiare basso/medio e alto? In base all'analisi o a soglie/criteri predefiniti?
Alcuni esempi sulla segmentazione demografica: https://xperiencify.com/what-is-demographic-segmentation/
Spero che questa risposta possa fornire qualche idea,