Variabili: trasformazioni (3)¶
Nota
Per le espressioni vedi anche Espressioni
interaction¶
Combina i livelli di due o più fattori in un’unica variabile. I livelli considerati sono quelli etichettati (levels).
Argomenti:
- sep: il separatore delle etichette dei livelli che vengono concatennati (default : ”)
- label: l’etichetta della variabile
- drop: eliminare le combinazioni che non hanno casi (default: false)
1 2 3 4 | interaction newvar => [varlist], :sep => "string", :label => "label"
interaction :mcrsexeta => [:mcr, :sesso, :eta], :drop => true # Il separatore di default per le etichette è ": "
interaction :sexeta => [:sesso, :eta], :sep => " - ", :label => "CLASSI DI ETA' PER SESSO"
|
expand¶
Genera un set di variabili dummy da una o più variabili. Le nuove variabili vengono etichettate con l’etichetta del livello corrispondente. I livelli considerati sono quelli etichettati (levels).
Argomenti:
- label: specifica l’etichetta delle variabili create
- zero => true|false: indica se effettuare il padding con lo zero nei nomi delle variabili create
1 2 3 4 | expand :eta => :age_ # genera: age_1, age_2, age_3, ecc.
varlist = expand [:sesso, :area, s(:x_,3)] => :p_, :label => "SOCIODEMO"
md varlist
|
compress¶
Genera una variabile singola da più variabili. Il caso più comune è la ricostruzione di una variabile singola a partire da variabili dummy che in realtà non sono multiple.
Se non si specifica il parametro :codes, viene utilizzato il codice 1. E’ possibile utilizzare anche un codice diverso per ciascuna variabile.
I valori vengono attribuiti seguendo l’ordine in cui sono state elencate le variabili. In caso di sovrapposizione, i nuovi valori sovrascrivere le precedenti assegnazioni.
1 2 3 4 5 | compress varlist => [newvar, "label"], :codes => value|valuelist
compress s(:eta_,5) => [:eta, "ETA'"]
compress s(:eta_,5) => [:eta, "ETA'"], :codes => 1
compress s(:eta_,5) => [:eta, "ETA'"], :codes => [1,2,3,4,5]
|
split_vars¶
Crea nuove variabili uguali alle variabili di partenza, ma che contengono solo i gruppi di casi definiti da una data variabile. Restituisce un vettore con i nomi delle variabili create.
Argomenti:
- :names: definisce un modello per i nomi delle nuove variabili: %{group} è il segnaposto per il livello della variabile che definisce i gruppi, %{var} è il segnaposto per il nome della variabile di origine. Se :names non viene specificato, i nomi vengono generati automaticamente secondo il modello %{var}_NomeVariabileGruppi_%{group}.
- :labels: definisce un modello per le etichette delle variabili: %{group} è il segnaposto per l’etichetta del livello della variabile che definisce i gruppi, %{var} è il segnaposto per l’etichetta della variabile di origine. Se :labels non viene specificato, viene utilizzato il template: %{var} [%{group}].
1 2 3 4 5 6 7 8 9 10 11 12 | split_vars variable_group => variables_list, :names => template, :labels => template
# crea delle copie delle variabili per ciascun livello di :sesso
split_vars :sesso => [:d1,:d2]+s(:d7_,10), :names => "%{var}_sex%{group}", :labels => "%{group}: %{var}"
# assegna a varlist l'elenco delle variabili create
varlist = split_vars :sesso => [:d1,:d2]+s(:d7_,10)
# genera variabili per il pannello
create :tt, :value => 1, :label => "Totale"
split_vars :sesso => [:tt, :area, :eta], :names => "%{var}_s%{group}", :labels => "%{var}"
panels.add "Maschi" => [:tt_s1, :area_s1, :eta_s1], "Femmine" => [:tt_s2, :area_s2, :eta_s2]
|
same_base¶
Rende omogenee le basi di una variabile o di un set di variabili rispetto a un’altra variabile o set di variabili.
Argomenti:
- varlist1 => varlist2: i due elenchi di variabili o variabili singole: le prime sono le variabili da modificare, le seconde quelle che definiscono la base
- varlist: se si indica un solo elenco di variabili, la base viene definita dall’insieme di casi che hanno almeno un valore nel set di variabili
- :value: il valore da assegnare (default 0)
- :drop: true elimina i valori validi nei casi che non sono compresi nella base del gruppo di confronto; false (default) non elimina nessun valore
1 2 3 4 | same_base :d5 => :d1, :value => 9
same_base :d5 => s(:d7_,10), :drop => true
same_base s(:d7_,10)
same_base s(:d7_,10) => s(:q10_,5)
|
base_resp¶
Rende omogenee le basi di un set di variabili considerando validi solo i casi che hanno almeno un valore maggiore di 0 su una delle variabili. Nelle multiple mette a blank i casi che hanno solo valori zero nel set di variabili.
Argomenti:
- varlist: l’elenco delle variabili
1 2 3 4 5 6 | # eventuali casi che hanno zero su tutte le variabili concorrono a definire la base
md s(:v12_,1..8), "Tabella a base valori validi (0/1)"
# considero nella base solo i casi che hanno almeno una citazione
base_resp s(:v12_,1..8)
md s(:v12_,1..8), "Tabella a base citazioni (1)"
|
mc_to_md¶
Trasforma un set di variabili multicategory in un set di variabili multidicotomy. Restituisce l’elenco delle variabili create.
1 2 3 4 | mc_to_md varlist => new_vars_root
mc_to_md s(:d5_,10) => :x5_
mc_to_md s(:d5_,10) => 'x5.'
|
md_to_mc¶
Trasforma un set di variabili multidicotomy in un set di variabili multicategory. Restituisce l’elenco delle variabili create.
md_to_panel¶
Trasforma un set di variabili multidicotomy in nuove variabili adatte ad essere utilizzate nel pannello. Le variabili generate hano un unico codice etichettato con l’etichetta della variabile originaria. E’ possibile specificare sia un elenco di variabili di destinazione, sia la radice del nome delle nuove variabili. Se non viene specificato l’elenco delle variabili di destinazione, i nomi delle variabili vengono generate automaticamente. Se non viene specificato il codice delle variabili multidicotomy, viene utilizzato il valore 1. Restituisce l’elenco delle variabili create.
1 2 3 4 5 6 7 8 | md_to_panel varlist, label, new_varlist, code
md_to_panel s(:v10_,1..3,8,9), "POSSESSO BENI", :beni_, 1
# poi, nel pannello
panels.add :sesso, s(:beni_,5), :area
# oppure direttamente nell'istruzione panels.add anche senza specificare i nomi
panels.add :sesso, md_to_panel(s(:v10_,1..3,8,9), "POSSESSO BENI"), :area
|
if_any, net_if_any¶
Crea una nuova variabile che è ugnale a 1 se almeno una delle variabili contiene il valore indicato e 0 in caso contrario. I casi considerati sono solo quelli che contengono almeno un valore valido nel set delle variabili.
La variante net_if_any identifica la variabile come net per il conteggio corretto del numero di risposte nelle tabelle multiple.
1 2 | if_any variables_list, code, new_var, label
if_any [:d7_2, :d7_3], 1, :x7, "EMOZIONI"
|
if_all, net_if_all¶
Crea una nuova variabile che è ugnale a 1 se tutte le variabili contengono il valore indicato e 0 in caso contrario. I casi considerati sono solo quelli che contengono almeno un valore valido nel set delle variabili.
La variante net_if_all identifica la variabile come net per il conteggio corretto del numero di risposte nelle tabelle multiple.
1 2 | if_all variables_list, code, new_var, label
if_all s(:d7_,5..8), 1, :x7, "Sia ... sia ..."
|
if_none, net_if_none¶
Crea una nuova variabile che è ugnale a 1 se tutte le variabili non contengono il valore indicato e 0 in caso contrario. I casi considerati sono solo quelli che contengono almeno un valore valido nel set delle variabili.
La variante net_if_none identifica la variabile come net di mancate risposte per il conteggio corretto del numero di risposte nelle tabelle multiple.
1 2 | if_none variables_list, code, new_var, label
if_none s(:d7_,10), 1, :x7
|
if_only, net_if_only¶
Crea una nuova variabile che è ugnale a 1 se almeno una delle variabili del primo set contiene il valore indicato mentre nessuna delle variabili dell’altro set lo contengono. Il secondo set può anche contenere tutto l’insieme delle variabili, pTabs provvederà a sottrarre le variabili del primo set.
La variante net_if_only identifica la variabile come net per il conteggio corretto del numero di risposte nelle tabelle multiple.
1 2 | if_only variables_list_1, code, variables_list_2, new_var, label
if_only [:d7_3,:d7_5], 1, s(:d7_,1..10), :x7, "Solo 3 o 5"
|
combine¶
VERSIONE 2.5.2.101
Calcola il totale (somma logica) tra diversi set di variabili. I set di variabili possono essere composti da una batteria di variabili multiple o da una variabile singola. Non tutti i codici devono essere necessariamente presenti in tutte le variabili, ma a parità di codice, l’item deve essere lo stesso.
- var|root, var|root, ...: un elenco di variabili singole o radici di variabili multiple da sommare
- :codes => []|n1..n2: un Array o un Range con i codici da considerare nelle singole e nelle multiple (non vanno inseriti i codici non risponde|non sa|ecc.)
- :into => root: la radice del set di variabili multiple che deve essere generato
- :noresp => [code, label]: (opzionale) il codice del non risponde da generare nel nuovo set di variabili
- :label => "": (opzionale) l’etichetta complessiva della variabile multipla
1 2 3 4 | # spontanea :s1, singola
# spontanea :m2, multipla
# sollecitata :m3 multipla
combine :s1, :m2_, :m3_, :codes => 1..12, :noresp => [99, "Non indica"], :into => :x4_, :label => "CONOSCENZA TOTALE"
|
overall¶
Calcola il totale (somma logica) tra diversi set di variabili multiple.
Sono disponibili due sintassi diverse.
Argomenti sintassi 1:
- varlist => [varlist, varlist, ...]: un hash con come chiave il set di variabili finali che verranno create e come valori i set di variabili da sommare
- :noresp => {varname => label}: (opzionale) un hash con il nome della variabile e l’etichetta. Calcola il numero di casi che non hanno nessuna citazione nelle variabili finali. I casi considerati sono solo quelli che contengono almeno un valore valido nel set delle variabili.
- :labels => []: (opzionale) un vettore con le etichette degli items. Se non specificato, le etichette sono ricavate dalle variabili originarie
1 2 | # spontanea + sollecitata
overall s(:x7_,1..10) => [s(:d7a_,1..10), s(:d7b_,1..10)], :noresp => {:x7_99 => "Nessuno di questi"}
|
Argomenti sintassi 2:
- name: la radice del nome delle variabili finali
- template: la stringa con i segnaposti per le due sequenze necessarie per comporre i nomi delle variabili.
Le sequenze possono essere vettori di numeri o vettori di stringhe:
- %{s}: il segnaposto per l’identificatore dei diversi set di variabili (:sets)
- %{i}: il segnaposto per l’identificatore degli items all’interno di ciascun set di variabili (:items)
- :sets => []: un vettore con la sequenza che identifica i diversi set di variabili (%{s})
- :items => []: un vettore con la sequenza che identifica gli items all’interno di ciascun set di variabili (%{i})
- :noresp => {code => label}: (opzionale) un hash con il codice e l’etichetta. Calcola il numero di casi che non hanno nessuna citazione nelle variabili finali. I casi considerati sono solo quelli che contengono almeno un valore valido nel set delle variabili.
- :labels => []: (opzionale) un vettore con le etichette degli items. Se non specificato, le etichette sono ricavate dalle variabili originarie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # spontanea + sollecitata
overall :t7_, "%{s}_%{i}",
:sets => ["d7a", "d7b"],
:items => 1..10,
:noresp => {99 => "n.a."}
# batterie di item riferite a oggetti diversi
overall :tot3_, "d3_%{s}_%{i}",
:sets => 1..7,
:items => 1..5,
:noresp => {9 => "n.a."}
# batterie di item riferite a oggetti diversi
overall :tot4_, "d4_%{s}_%{i}",
:sets => ["1", "2", "3a", "3b", "3c", "4"],
:items => [1, 2, 3, 4, 5],
:labels => ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"],
:noresp => {9 => "Nessuno di questi"}
|
Suggerimento
Un vettore di stringhe come ["1", "2", "3a", "3b", "3c", "4"] può anche essere creato più velocemente con questa sintassi: %w(1 2 3a 3b 3c 4).
reduce¶
Applica una funzione a un set di variabili e crea una nuova variabile o inserisce i dati in una variabile esistente.
La funzione riceverà come argomenti la lista dei valori (o dei pesi) delle variabili specificate.
1 2 3 | reduce :q8, :max, s(:q8_,10)
reduce :q10, :sum, s(:q10_,10), :labels => false
reduce :q12, :sum, s(:q12_,10), :w => [1, 2, 8, 15, 30, 46], :labels => false
|
autorecode¶
Ricodifica automaticamente una variabile stringa in una variabile categoriale.
La variabile stringa originaria verrà sovrascritta e salvata in una copia.
Argomenti:
- vars => varlist: l’elenco delle variabili da ricodificare
- sort => :a|:d: (opzionale, default :a) l’ordine dei livelli risultanti: :a ordine aspendente; :d ordine discendente
- drop => false|true: (opzionale, default false) false salva una copia della variabile originaria; true elimina la variabile originaria
- root => "string": (opzionale, default __string__) prefisso per la copia della variabile originaria
- levels => {}: (opzionale) i livelli delle variabili; eventuali voci aggiuntive verranno codificate oltre i livelli definiti
- ignore => "string": (opzionale) caratteri da ignorare nelle stringhe di dati
- ignore_symbol => true|false: (opzionale, default true) ignora simboli presenti nelle stringhe di dati: -+*=<>\[\](){}|\/,.;:°^!?
- ignore_number => false|true: (opzionale, default false) ignora numeri presenti nelle stringhe di dati
- ignore_space => false|true: (opzionale, default false) ignora spazi presenti nelle stringhe di dati
derotate¶
Attenzione
Funzionalità in test. Verificare il risultato.
Scambia le risposte tra diversi set di variabili secondo la rotazione di appartenenza di ciascun caso.
Argomenti:
- Le rotazioni possono essere definite in due modi:
- da una variabile numerica che indica l’appartenenza del record a una rotazione (cella).
- :rot => {varname => [[],[],...]}: specifica la variabile che contiene l’identificativo della rotazione e lo schema delle rotazioni come vettore multidimensionale
- da una serie di variabili numeriche che identificano l’oggetto di ciascun set di domande somministrate.
Il numero di queste variabili deve essere uguale al numero di set di variabili da derotare.
- :rot => varlist: specifica l’elenco delle variabili che contendono l’identificativo dell’item oggetto della valutazione
- da una variabile numerica che indica l’appartenenza del record a una rotazione (cella).
- :init: le variabili da derotare
- :init => [[:a1, :b1, :c1], [:a2, :b2, :c2], ...]: indicate esplicitamente come vettore multidimensionale
- :init => ["a%", "b%", "c%"]: un vettore con dei nomi che contengono il segnaposto % per il numero di ciascuna serie
- :final: le variabili di destinazione
- :final => [[:x1, :y1, :z1], [:x2, :y2, :x2], ...]: indicate esplicitamente come vettore multidimensionale
- :final => ["x%", "y%", "z%"]: un vettore con dei nomi che contengono il segnaposto % per il numero di ciascuna serie
- se omesso verranno sovrascritte le variabili iniziali (le serie di variabili iniziali e quelle finali devono coincidere)
- :prefix => "stringa": se viene omesso :final e :init è indicato come lista con il segnaposto, la stringa di caratteri verrà anteposta al nome delle variabili iniziali per formare le variabili finali
Nell’esempio, le ipotetiche domande a, b e c vengono ripetute per tre volte per testare tre diversi oggetti. Le domande vengono somministrate ai vari soggetti in quattro diverse sequenze. E’ da notare che il numero di oggetti da testare e il numero di permutazioni non sono necessariamente uguali.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Metodo 1: con id rotazione
# :rotazione è la variabile che identifica la rotazione/cella
rotazione
1 2
2 4
3 3
4 1
5 1
6 2
...
# rschema contiene l'elenco delle permutazioni utilizzate (deve corrispondere ai livelli della variabile :rotazione)
rschema = [ [1,2,3], # per :rotazione = 1
[2,3,1], # per :rotazione = 2
[3,1,2], # per :rotazione = 3
[1,3,2] ] # per :rotazione = 4
derotate :init => ["a%","b%"]+s("c%_#",10), :prefix => 'x', :rot => {:rotazione => rschema}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Metodo 2: con variabili sequenza
# le variabili :ro1, :ro2 e :ro3 contengono la sequenza degli elementi (l'ordine dei test)
ro1 ro2 ro3
1 2 3 1
2 1 3 2
3 3 1 2
4 1 2 3
5 1 2 3
6 2 3 1
...
derotate :init => ["a%","b%"]+s("c%_#",10), :prefix => 'x', :rot => s(:ro,3)
|