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