Ponderazione

weight!

weight! pondera i dati in base a una variabile di pesi.

1
2
 # pondera i dati sulla variabile ipf
 weight! :ipf

Disattiva la ponderazione

1
 weight_

Attenzione

La variabile di ponderazione è una proprietà del dataset non del report, viene attivata/disattivata solo per il dataset attivo in quel momento.

Espansione

Malgrado sia possibile utilizzare direttamente come peso una variabile di espansione (con media differente da 1), la sintassi seguente permette l’attivazione della statistica tcount_x e il calcolo corretto dello standard error (v. inoltre più sotto serr_base).

E’ possibile utilizzare il peso per espandere i dati, indicando:

  • un numero intero che rappresenta la numerosità totale di casi a cui espandere i record del dataset. Per ciascuna tabella pTabs calcolerà il coefficiente di espansione dividendo il numero dato per il numero dei record totale del dataset
  • un numero decimale che rappresenta una costante da moltiplicare a ciascuna osservazione. Per ciascuna tabella pTabs moltiplicherà direttamente questo coefficiente di espansione senza effettuare altri calcoli
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
 # pondera i dati sulla variabile ipf espandendo il totale casi a 2000
 # (i casi verranno moltiplicati per un coefficiente pari a 2000 diviso il numero dei casi)
 weight! :ipf => 2000

 # pondera i dati sulla variabile ipf e li espande moltiplicandoli per 2.45
 weight! :ipf => 2.45

 # usa un coefficiente calcolato (.to_f permette di tenere i decimali nella divisione)
 weight! :ipf => 2000 / nrows.to_f

 # pondera i dati sulla variabile ipf e li espande moltiplicandoli per 2000 (essendo 2000.0 un float)
 weight! :ipf => 2000.0

Quando la statistica tcount_x non è attiva, i valori assoluti dei totali e delle celle verranno mostrati espansi. Quando invece la statistica tcount_x è attiva (tcount_x!), i valori assoluti dei totali e delle celle appariranno ponderati e non espansi, mentre verrà aggiunta una riga con i totali espansi.

Attenzione

In caso di utilizzo di istruzioni che modificano il numero di record del dataset (select, union, ecc.), utilizzare un coefficiente decimale e non un intero, altrimenti pTabs calcolerà il coefficiente di espansione con il nuovo numero di record presenti nel dataset.

Ponderazioni diverse per colonna

E’ possibile indicare una variabile di ponderazione differente per ciascuna variabile del pannello/colonna del totale:

  • eventuali variabili di pannello duplicate devono essere considerate una sola volta
  • la prima variabile si riferisce alla colonna del totale (anche quando si disattiva il totale di colonna con ctotal_)
  • indicando nil al posto del nome di una variabile, la corrispondente variabile di pannello non verrà ponderata
  • se si indicano meno variabili di ponderazione rispetto alle variabili di pannello, l’ultima variabile verrà riciclata (con weight.action :message)
  • se si indicano più variabili di ponderazione rispetto alle variabili di pannello, le variabili in più verranno ignorate (con weight.action :message)
  • nel caso di non corrispondenza del numero di variabili, verrà comunque emesso un warning con l’indicazione delle variabili di ponderazione utilizzate (con weight.action :message)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
 panels.add :x100, :area
 panels.add :sesso, :eta

 # 5 variabili perchè la prima variabile di ponderazione si riferisce al totale
 weight! :w1, :w2, :w3, :w4, :w5

 # la colonna del totale non verrà ponderata
 # peso1 verrà applicato a x100
 # peso2 verrà applicato alle restanti varibili del pannello
 # le variabili sono meno di quelle di pannello quindi verrà emesso un warning
 weight! nil, :peso1, :peso2
- le variabili di ponderazione dovrebbero essere 4 e non 3
- TOT => (-); x100 => peso1; area => peso2; sesso => peso2; eta => peso2

:exp => [] permette di indicare dei valori (base o coefficiente) per l’espansione:

1
2
panels.add :tot, :tot_w1, :tot_w2, :user, :user_w1, :user_w2, :tipo, :tipo_w1, :tipo_w2
weight! [:p0, :p1, :p2}*3, :exp => [4000.0, 2000.0, 2000.0]*3

weight?

weight? stampa l’elenco delle variabili di ponderazione e restituisce un array con l’elenco delle variabili di ponderazione.

weighted?

weighted? restituisce true se è attiva la ponderazione e false se non è attiva.

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 :sesso, :eta
 weight! nil, :w1, :w2, :w3
 cat :d1
- le variabili di ponderazioni dovrebbero essere 3 e non 4
- TOT => (-); sesso => w1; eta => w2
1
2
3
4
 weight.action :message
 panels.add :sesso, :eta
 weight! :w1, :w2
 cat :d1
- le variabili di ponderazioni dovrebbero essere 3 e non 2
- TOT => w1; sesso => w2; eta => w2
1
2
3
4
5
 weight.action :error
 panels.add :sesso, :eta
 panels.add :area
 weight! :w1, :w2
 cat :d1
!!! Syntax error nell'istruzione <weight!>: le variabili di ponderazione dovrebbero essere 5 e non 4 !!!

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
 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
 weight_

 # equivalente dell'esempio precedente, ma realizzato con un ciclo di ripetizione
 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
 weight_
  • 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
# il pannello è costituito da variabili inizializzate a 1: :t0, :t1, :t2, :t3
create :t0, :value => 1, :label => "NON PONDERATO"
create :t1, :t2, :t3, :value => 1, :label => "PONDERAZIONI"
levels :t1 => ["Peso 1"]
levels :t2 => ["Peso 2"]
levels :t3 => ["Peso 3"]

ctotal_
panels.add :t0, :t1, :t2, :t3
weight! nil, nil, :w1, :w2 # <= considerare anche la colonna del totale

# in questo modo è molto semplice generare tutte le tabelle seguenti con questo pannello
ord :d5
md s(:d7_,10), "D7"

Consiglio

Per la creazione di variabili di ponderazione si veda Raking.

serr_base

Il parametro di configurazione serr_base permette di specificare la modalità del calcolo dell’errore standard della media nel caso di dati ponderati.

  • :raw: utilizza il numero di casi non ponderati
  • :weight: utilizza il numero di casi ponderati (generati dalla variabile di ponderazione impostata)
  • :expansion: utilizza il numero di casi espansi (generati dalla variabile di ponderazione impostata e dal valore di numerosità totale definito)

Attenzione

Utilizzando come variabile di ponderazione una variabile di espansione (con media differente da 1), il calcolo dell’errore standard verrà comunque effettuato in base al numero di casi espansi anche se è stato specificato :weight.