Ponderazione¶
weight¶
Pondera i dati in base a una variabile di pesi. [1]
1 2 3 4 5 | # pondera i dati sulla variabile ipf
weight! :ipf
# disattiva la ponderazione dei dati
weight_
|
E’ possibile indicare una variabile di ponderazione differente per ciascuna variabile del pannello. Eventuali variabili di pannello duplicate devono essere considerate una sola volta.
1 2 3 4 5 | panels.add :_t, :sesso, :eta
panels.add :_t, :area, :titolo
# solo 5 variabili di ponderazione perché :_t è indicata due volte
weight! :w1, :w2, :w3, :w4, :w5
|
Pannello di confronto tra ponderazioni¶
E’ possibile realizzare una tabella con un pannello che mette a confronto ponderazioni differenti.
- Metodo 1 con htjoin. Utile quando si deve produrre solo una tavola.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # :ipf1, :ipf2 e :ipf3 sono tre diverse variabili di ponderazione
# quattro tabelle con ponderazione differente unite in un'unica tabella tramite htjoin
weight_
htjoin "Tabella di confronto tra ponderazioni", "PONDERAZIONI" do
cat :voto, "Non ponderato"
weight! :ipf1
cat :voto, "Peso 1"
weight! :ipf2
cat :voto, "Peso 2"
weight! :ipf3
cat :voto, "Peso 3"
end
# equivalente dell'esempio precedente, ma realizzato con un ciclo di ripetizione
weight_
htjoin "Tabella di confronto tra ponderazioni", "PONDERAZIONI" do
4.times do |i|
cat :voto, i == 0 ? "Non ponderato" : "Peso #{i}"
weight! "ipf#{i+1}"
end
end
|
- Metodo 2 con pannello esplicito e corrispondenti variabili di ponderazione. Utile quando questo pannello va utilizzato per tante tavole.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # il peso per la colonna "Non ponderato" è una variabile inizializzata a 1: :ipf0
# il pannello è costituito da variabili inizializzate a 1: :t0, :t1, :t2, :t3
create :ipf0, :t0, :t1, :t2, :t3
value [:ipf0, :t0, :t1, :t2, :t3], 1
factor :t0 => ["PONDERAZIONI", ["Non ponderato"]], # oppure se si vuole una colonna separata dalle altre: ["NON PONDERATO", ['']],
:t1 => ["PONDERAZIONI", ["Peso 1"]],
:t2 => ["PONDERAZIONI", ["Peso 2"]],
:t3 => ["PONDERAZIONI", ["Peso 3"]]
panels.add :t0, :t1, :t2, :t3
weight! :ipf0, :ipf1, :ipf2, :ipf3
# in questo modo è molto semplice generare tutte le tabelle seguenti con questo pannello
cat :voto
ord :d5
md s(:d7_,1..10)
|
wby¶
wby è un sottocomando delle tabelle che permette di specificare la/le variabile/i di ponderazione per una specifica tabella.
1 2 3 | cat :d1 do
wby :peso1
end
|
weight.action¶
weight.action permette di indicare quale azione intraprendere nel caso di mancata corrispondenza tra il numero di variabili di pannnello e il numero di variabili di ponderazione (nel caso siano più di una).
- :error: genera un errore in caso di mancata corrispondenza e arresta il programma
- :message: stampa un messaggio di avvertimento nel log e scarta eventuali variabili in eccesso e riutilizza l’ultima variabile di ponderazione per le variabili di pannello aggiuntive
- :none: come message ma non stampa nessun avvertimento
Il comportamento predefinito è indicato nel parametro di configurazone :weights_vars_action.
1 2 3 4 | weight.action :message
panels.add :_t, :sesso, :eta
weight.by :w1, :w2, :w3, :w4
cat :d1
|
- Il numero di variabili di ponderazione è superiore al numero di variabili di pannello,
- le variabili in più verranno escluse:
- ._tot => w1; sesso => w2; eta => w3
1 2 3 4 | weight.action :message
panels.add :_t, :sesso, :eta
weight.by :w1, :w2
cat :d1
|
- Il numero di variabili di ponderazione è inferiore al numero di variabili di pannello,
- l'ultima variabile di ponderazione verrà utilizzata anche per le restanti variabili di pannello:
- ._tot => w1; sesso => w2; eta => w2
1 2 3 4 5 | weight.action :error
panels.add :_t, :sesso, :eta
panels.add :_t, :area
weight.by :w1, :w2
cat :d1
|
- Errore nella sintassi del comando <weight!>: Il numero di variabili di ponderazione non corrisponde al numero di variabili di pannello:
- (2) w1, w2
- (4) ._tot, sesso, eta, area.
rake¶
Genera delle variabili di ponderazione dei dati in base alle distribuzioni marginali.
Package R: Survey
Eventuali variabili già esistenti verranno sovrascritte.
Se l’istruzione filter è attiva, rake opererà solo sul quel sottoinsieme di casi.
Parametri¶
- names: la lista dei nomi delle variabili di ponderazione che devono essere create: la variabile di ponderazione con media 1, più eventuali altre variabili di espansione. (default: ipf)
- counts: la lista delle numerosità totali dei casi delle variabili di espansione.
- population: un hash con i marginali delle variabili di ponderazione, nel formato: nome_var => [marginali]. I valori vengono interpretati come proporzioni. Le variabili non devono avere casi mancanti. Il numero di marginali di ciascuna variabile deve corrispondere al numero di livelli della variabile.
- pw: il nome della variabile peso di partenza.
- if_na: comportamento in caso di valori mancanti nelle variabili di ponderazione:
- :error: (il default) interrompe l’esecuzione
- :na: assegna peso uguale a NA (valore mancante)
- valore: assegna peso uguale a valore
- if: filtro per selezionare un sottoinsieme di casi da ponderare [2]. Ha il sopravvento rispetto a un eventuale filtro impostato con l’istruzione filter.
- if_not: valore del peso da assegnare ai casi esclusi dal filtro (altrimenti viene lasciato il valore preesistente o NA se la variabile di ponderazione non esiste già)
- xls: esporta le variabili di ponderazione create in un file Excel 97-2003
- xlsx: esporta le variabili di ponderazione create in un file Excel 2007
- sav: esporta le variabili di ponderazione create in un file SPSS
- xpt: esporta le variabili di ponderazione create in un file XPORT per SAS
- fwf: esporta le variabili di ponderazione create in un file di testo in formato fisso (Fixed Width Format). Oltre ai dati viene salvato anche un file con il tracciato record (.info).
- id: specifica l’identificativo dei record da utilizzare nel file di esportazione. I dati saranno ordinati sull’id.
- print: :all|:brief|:none controlla la stampa nel log dell’output. (default: :all)
- maxit: controlla il numero di iterazioni. (default: 10)
- epsilon: convergence is declared if the maximum change in a table entry is less than epsilon. If epsilon<1 it is taken to be a fraction of the total sampling weight. (default: 0.001)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # genera solo il peso per la ponderazione
rake :names => :peso,
:population => { :sesso => [150, 150], :eta => [25, 75, 150, 50] },
:xls => "ipf", :id => :ser_no
# genera 3 variabili di ponderazione
rake :names => [:ipf, :espcam, :espuni],
:counts => [320, 45000],
:population => { :sesso => [150, 150],
:eta => [25, 75, 150, 50] ,
:area => [75, 75, 75, 75] },
:print => :all,
:id => :ser_no,
:fwf => "ipf", :sav => "ipf"
# pondera in due step i dati
rake :names => :ipf, ... :if => {:campio => 1}
rake :names => :ipf, ... :if => {:campio => 2}
|
Output¶
*** Raking ***
# n. -ideale- % n. -sample- % (s.-i.) n. -pond.- % (p.-i.)
Maschio 1 150 50.00 154 51.33 1.33333 150 50.04 0.04219
Femmina 2 150 50.00 146 48.67 -1.33333 150 49.96 -0.04219
=== totale sesso 0 300 100.00 300 100.00 0.00000 300 100.00 0.00000
14-17 anni 1 25 8.33 46 15.33 7.00000 25 8.34 0.01011
18-24 anni 2 75 25.00 86 28.67 3.66667 75 24.96 -0.03623
25-30 anni 3 150 50.00 116 38.67 -11.33333 150 50.01 0.01179
31-34 anni 4 50 16.67 52 17.33 0.66667 50 16.68 0.01433
=== totale eta 0 300 100.00 300 100.00 0.00000 300 100.00 0.00000
Nord Ovest 1 75 25.00 93 31.00 6.00000 75 25.00 0.00000
Nord Est 2 75 25.00 50 16.67 -8.33333 75 25.00 0.00000
Centro 3 75 25.00 70 23.33 -1.66667 75 25.00 0.00000
Sud 4 75 25.00 87 29.00 4.00000 75 25.00 0.00000
=== totale area 0 300 100.00 300 100.00 0.00000 300 100.00 0.00000
# n sum min max range median mean sd se esp
ipf 1 300 300 0.4031 2.0312 1.6281 0.9916 1.0000 0.3725 0.0215 1.0000
espcam 2 300 320 0.4300 2.1666 1.7367 1.0577 1.0667 0.3973 0.0229 1.0667
espuni 3 300 4500 6.0464 30.4682 24.4218 14.8737 15.0000 5.5869 0.3226 15.0000
Efficienza: 87.9 %
Valori di ritorno¶
rake restituisce un oggetto contenente le statistiche della ponderazione, che, se assegnato a una variabile, può essere utilizzato nello script per condizionarne l’esecuzione. L’oggetto disponde dei metodi :efficiency, :n, :sum, :min, :max, :range , :median, :mean, :sd, :se, :esp che restituiscono le statistiche relative alla prima variabile di ponderazione. E’ inoltre possibile accedere alle statistiche delle altre variabili di ponderazione con la sintassi variabile["nome_peso"]: per es. result["ipf2"].esp
1 2 3 4 5 6 7 8 9 10 11 12 | # prima ponderazione
result = rake :names ...
if result.min < 0.3 || result.max > 3
# nuova ponderazione, con meno variabili marginali o con classi più aggregate
result = rake :names ...
end
# se i valori non sono ancora soddisfacenti
raise "Attenzione: valori dei pesi troppo alti: #{result.min} <> #{result.max}" if result.min < 0.3 || result.max > 3
# oppure considerando l'efficienza
if result.efficiency < 60
...
|
Note
[1] | I nuovi metodi sono da peferire rispetto a weight.by e weight.off, in quanto possono essere utilizzati anche all’interno delle istruzioni vjoin, hjoin e htjoin. |
[2] | Per le espressioni vedi anche Espressioni |