PROC FREQ in SAS, come il suo nome, ci dà i conteggi di frequenza, così come altre statistiche che aiutano ad analizzare i dati. Ma la procedura Proc Freq può fare di più che dare solo il conteggio.
Contenuto della pagina
Cos’è PROC FREQ?
PROC FREQ è una procedura per analizzare il conteggio dei dati. Si usa per ottenere conteggi di frequenza per una o più variabili individuali o per creare tabelle a due vie (tabulazioni incrociate) da due variabili.
PROC FREQ si usa anche per eseguire test statistici su dati di conteggio.
PROC MEANS è un’altra procedura SAS, che potete usare per calcolare statistiche descrittive come trovare la media, la deviazione standard, i valori minimi e massimi, e molti altri calcoli statistici.
Proc freq potrebbe essere la prima procedura a cui penserete quando il risultato necessario è un conteggio. Per lo scopo di questo tutorial, ho preso l’esempio del dataset SASHELP.HEARTS. Qui, può essere usato per trovare il numero di soggetti con bp_status=’Normal’, contare il numero di soggetti MASCHI e FEMMINE nel dataset.
Ma se il risultato necessario non è necessariamente un conteggio? Proc freq può essere uno strumento utile per scopi diversi dal conteggio. I seguenti sono solo alcuni dei tipi comuni di domande che possono sorgere che rientrano in questa categoria:
- Quale percentuale di maschi e femmine hanno malattie cardiache?
- Qual è il numero di soggetti che sono morti a causa del colesterolo alto?
- Qual è la causa della morte dei soggetti?
- Chi sono i soggetti colpiti?
- Qualcuno dei soggetti ha record non unici?
Proc freq potrebbe non essere il primo metodo pensato per rispondere a domande come queste, ma può essere un’opzione molto veloce ed efficiente da usare.
Perché proc freq potrebbe essere un buon candidato per queste risposte veloci? In primo luogo, in questi casi, c’è meno digitazione rispetto ad altri metodi. Questo può far risparmiare tempo e ridurre gli errori di battitura.
Inoltre, ci possono essere già alcune freq in lavorazione per controllare un problema quando sorgono ulteriori domande. Quindi ottenere i risultati dai conteggi di frequenza esistenti piuttosto che dall’elaborazione dei dati può essere un logico passo successivo.
Infine, usando i dataset di output forniti da proc freq, ci sono elenchi facilmente disponibili di valori unici, combinazioni e conteggi.
Sintassi di PROC FREQ
PROC FREQ <options>; BY variables ; EXACT / <statistic-options> ; OUTPUT <OUT=sas dataset options> ; TABLES requests </options> ; TEST </options> ; WEIGHT variable </options> ;
Dichiarazioni di PROC FREQ
- BY Fornisce analisi separate per ogni gruppo BY
- EXACT Richiede test esatti.
- OUTPUT Richiede un set di dati di output.
- TABLES Specifica le tabelle e richiede le analisi.
- TEST Richiede i test per le misure di associazione e accordo.
- WEIGHT Identifica una variabile peso.
Opzioni PROC FREQ
PROC FREQ ha diverse possibili richieste di output. La più comune è l’opzione OUT= che è usata per creare un dataset SAS di una particolare tabulazione.
Le opzioni per la dichiarazione della tabella sono seguite da una barra. La “/” risolve l’ambiguità sul fatto che la parola che si sta usando sia un nome di variabile o una parola chiave SAS e quindi la “/” dice a SAS che gli argomenti per la tabella finiscono e qualsiasi cosa ci sia dopo le opzioni è per modificare il comportamento di default dell’istruzione.
Un altro esempio è l’opzione NOCOL che, se usata, richiede a SAS di non mostrare le percentuali delle colonne.
Esempio di PROC FREQ
Di seguito è riportato un uso di base della PROC FREQ in SAS, per ottenere il conteggio del numero di studenti osservati in ogni categoria di genere.
proc freq data=sashelp.class;table sex;run;
TABLES age*weight / CHISQ;
La dichiarazione di cui sopra richiede che il chi-quadro e le relative statistiche siano riportate per la tabulazione incrociata A*B.
Scenario 1. Qual è il numero di maschi e femmine con bp_status di Alto e Weight Status di Sovrappeso?
Per questo tipo di scenari, si potrebbero usare Sorts e data steps o proc SQL è un’altra opzione. Un passo di dati potrebbe essere il primo pensiero per una soluzione. Questo comporta in primo luogo l’ordinamento dei dati necessari utilizzando proc sort. Poi i record di interesse e di sesso unico devono essere selezionati (passo dati). Poi l’output del record (proc print).
Ma proc freq può rispondere a questa domanda in un blocco di codice senza un passo dati! Un proc freq può essere usato con un’istruzione WHERE per sottoporre lo stato di bp e di peso.
proc freq data=sashelp.heart;where bp_status='High' and weight_status='Overweight';tables sex /nocum;run;
Una dichiarazione TABLES del sesso può quindi essere utilizzata per ottenere una lista unica del genere incluso in quel sottoinsieme. L’opzione NOCUM viene utilizzata per escludere la frequenza cumulativa dal risultato.
Scenario 2: Quali prodotti sono stati influenzati dal valore di predizione?
Per questo scenario, ho utilizzato il dataset SASHELP.PRDSALE. Immaginiamo che sia stato trovato che ci sono alcuni prodotti in cui il prezzo di vendita effettivo è maggiore del prezzo previsto.
La prima domanda è probabile: Quali sono i prodotti che hanno un prezzo effettivo maggiore di quello previsto?
Ma questo è il tipo di domanda in cui i risultati possono portare a molte domande successive e l’ambito dell’indagine e dell’analisi può espandersi richiedendo ulteriori passaggi di codifica per arrivare alla causa principale del problema.
A prescindere dal metodo seguito, l’indagine inizierà con un dataset contenente sia i dati di laboratorio che la data del consenso informato per il confronto.
A questa domanda si può rispondere lavorando all’interno di una fase di dati o utilizzando il metodo proc freq.
Metodo del passo dati:
Lavorando all’interno di un passo dati, se il set di dati non è già ordinato, verrebbe prima un proc sort e poi un passo dati per selezionare i valori unici del prodotto di interesse.
proc sort data=sashelp.prdsale out=sale;by product;run;data unique_product(keep=product);set sale(where=(actual > predict));by product;if first.product;run;
Metodo proc freq:
Lavorando con un proc freq, potremmo semplicemente fare un freq con USUBJID nell’istruzione TABLES oltre ad usare l’istruzione WHERE per subset ai record con problema:
proc freq data=sashelp.prdsale;where actual gt predict;tables product /list missing nocum;run;
Tabelle di frequenza a senso unicoWay Frequency Tables
È possibile utilizzare PROC FREQ per produrre tabelle di frequenza/conteggio per categoria ed eseguire sui conteggi.
Usando l’opzione ORDER=FREQ
proc freq data=data.flighttravelers order=freq;table day_of_booking;run;
- PROC FREQ nell’esempio precedente include l’opzione ORDER=FREQ.
- L’utilizzo dell’opzione ORDER=FREQ permette di eseguire rapidamente un’analisi di quali categorie hanno più e meno conteggi.
- La colonna “Frequency” dà il conteggio del numero di volte che la variabile day_of_booking assume il valore nella colonna.
- La colonna “Percentuale” è la percentuale del totale.
- Le colonne “Frequenza cumulativa” e “Percentuale” riportano un aumento del conteggio e della percentuale per valori di day_of_booking.
Utilizzate questo tipo di analisi per conoscere la distribuzione delle categorie nel vostro set di dati.
Per esempio, in questi dati, 28 persone hanno prenotato voli di domenica.
Utilizzando l’opzione ORDER=FORMATTED.
Utilizzando l’opzione ORDER=FORMATTED puoi controllare l’ordine in cui le categorie saranno visualizzate nella tabella.
Prima di usare questa opzione, devi creare un formato personalizzato per definire l’ordine che vuoi nell’output.
proc freq order=formatted data=data.flighttravelers;tables day_of_booking;title "Example of PROC FREQ with Formatted Values";format day_of_booking $dayfmt.;run;
Creazione di una tabella di frequenza a senso unicoWay Frequency table da dati riassunti
Se i dati sono già riassunti si può usare l’istruzione WEIGHT per indicare le variabili che rappresentano il conteggio.
proc freq;weight count;title 'Reading Summarized Count data';tables category;run;
PESO COUNT dice a PROC FREQ che i dati della variabile COUNT sono conteggi. Anche se ci sono due record per CENTS, il programma è in grado di combinare il PESO in una singola categoria CENTS (252 CENTS).
Testare la bontà dell’adattamento usando PROC FREQ in SAS
PROC FREQ in SAS può anche essere usato per testare la bontà dell’adattamento per una tabella a una via. Un test di bontà di adattamento di una singola popolazione è un test che viene utilizzato per determinare se la distribuzione delle frequenze osservate nei dati del campione rappresenta il numero previsto di occorrenze per la popolazione.
Assumendo che il numero di osservazioni sia fisso.
Le ipotesi testate sono le seguenti:
- H:0 La popolazione segue la distribuzione ipotizzata.
- H: a La popolazione non segue la distribuzione ipotizzata.
Un test chi-quadro è uno dei test di bontà dell’adattamento. Una decisione può essere presa in base al p-value associato a tale statistica.
Un basso p-value indica che i dati non seguono la distribuzione ipotizzata, o teorica.
Se il p-value è sufficientemente basso (solitamente <0.05), si rifiuta l’ipotesi nulla.
La sintassi per eseguire un test di bontà dell’adattamento è la seguente:
PROC FREQ;
TABLES variabile / CHISQ TESTP=(lista di rapporti);
Esempio:
Una compagnia aerea opera voli giornalieri per diverse città indiane. Uno dei problemi di questa compagnia aerea sono le preferenze alimentari dei passeggeri. Il responsabile delle operazioni del capitano cuoco ritiene che il 35% dei loro passeggeri preferisca il cibo vegetariano, il 40% il cibo vegetariano. Il 20% preferisce cibo ipocalorico e il 5% richiede cibo per diabetici.
Un campione di 500 passeggeri è stato scelto a caso per analizzare le preferenze alimentari e i dati sono mostrati qui sotto.
Seguiremo un test CHI-SQURE per verificare se la credenza del capitano Cook è vera ad alpha=0.05
Tipo di cibo | Vegetariano | Non-Vegetariano | BassoCalorie | Diabetico |
---|---|---|---|---|
Numero di passeggeri | 190 | 185 | 90 | 35 |
Soluzione:
proc freq data=airlines order=data;weight no_of_passengers;title 'goodness of fit analysis';tables foodtype / nocum chisq testp=(0.35 0.40 0.20 0.05);run;
- I dati sono riassunti dal PESO Numero_di_passeggeri.
- L’ORDER=DATA è usato per ordinare i dati come nel dataset di input. Le frequenze sono basate sulla variabile Food_Type.
- Le dichiarazioni /NOCUM CHISQ e TESTP= sono usate per calcolare il test di bontà dell’adattamento.
- I rapporti del test sono basati sulla percentuale di progenie attesa da ciascuna delle quattro categorie.
- L’opzione NOCUM richiede una tabella senza la colonna cumulativa.
Nota: Devi usare l’opzione ORDER=DATA per assicurarti che i rapporti ipotizzati elencati nell’istruzione TESTP= corrispondano correttamente alle categorie nei dati di input.
Il valore p del test del chi-quadrato (p=7,4107) è maggiore del valore critico (a=0,05), quindi concludiamo che la credenza del Capitano Cook sulle preferenze alimentari è vera.
Test Chi-quadro di Indipendenza – Analisi di tabelle a due vie usando PROC FREQ in SAS
Utilizzando PROC FREQ in SAS possiamo eseguire il test Chi-quadro di indipendenza, testiamo se due o più gruppi sono statisticamente indipendenti o meno.
L’istruzione TABLES con due o più variabili elencate e separate da un asterisco crea una tabella di cross-tabulazione per mettere in relazione due variabili.
La tabella di cross-tabulazione è spesso chiamata tabella di contingenza.
Il conteggio del numero di occorrenze in un campione attraverso due variabili di raggruppamento crea una tabella di cross-tabulazione.
Nell’esempio seguente vogliamo determinare la relazione tra il crimine e il bere alcolici.
La variabile indipendente è il CRIME e la variabile dipendente è il DRINKER.
Quindi, la dichiarazione della tabulazione incrociata sarà
TABLES CRIME*DRINKER
L’ipotesi nulla e alternativa in questo caso è:
- h_0 : Le variabili sono indipendenti il che significa che non c’è associazione di crimine e consumo di alcol
- h_a : Le variabili sono dipendenti, il che significa che il tasso di criminalità dipende dal consumo di alcol
proc freq data=drinkers;weight count;tables crime*drinker/chisq expected norow nocol nopercent;title 'chi square analysis of a contingency table';run;
Di default, la tabella mostrerà quattro numeri in ogni cella: la frequenza complessiva, la percentuale complessiva, la percentuale di riga e la percentuale di colonna come segue.
L’EXPECTED specifica che i valori attesi devono essere inclusi nella tabella, e NOROW, NOCOL e NOPERCENT dicono a SAS di escludere questi valori dalla tabella.
Osservate le statistiche dell’output. Il valore del chi-quadrato è 49,5660 e p<0,0001.
Quindi, si rifiuta l’ipotesi nulla cioè non c’è associazione (indipendenza) e si conclude che c’è evidenza di una relazione tra stato di ubriachezza e tipo di reato commesso.
La maggior parte dei valori attesi sono vicini ai valori osservati, mentre nel caso di Fraud il valore osservato (63) è diverso da quello atteso (109.14).
Questa informazione porta alla conclusione che le persone coinvolte in frodi hanno meno probabilità di bere alcolici.
Calcolo del rischio relativo utilizzando PROC FREQ in SAS
Le tabelle di contingenza a due a due sono spesso utilizzate mentre si esamina una misura di rischio. In un test medico, questi tipi di tabelle sono costruiti quando una variabile rappresenta la presenza o l’assenza di malattia e l’altra indica qualche fattore di rischio.
Una misura di questo rischio in uno studio caso-controllo è chiamata odds ratio (OR).
In uno studio caso-controllo, un ricercatore prende un campione di soggetti e guarda indietro nel tempo per qualsiasi esposizione o non esposizione alla malattia.
In uno studio di coorte, i soggetti sono selezionati dalla presenza o assenza di rischio e poi osservati nel tempo per vedere se sviluppano un risultato, la misura di questo rischio è chiamata rischio relativo (RR).
Il rapporto ODDS è quante volte più probabile è la probabilità di trovare un’esposizione in qualcuno con la malattia rispetto a trovare l’esposizione in qualcuno senza la malattia.
Il rischio relativo indica quante volte più o meno probabile che una persona esposta sviluppi un risultato rispetto a una persona non esposta.
In entrambi i casi, una misura di rischio (OR o RR) uguale a 1 indica nessun rischio.
Una misura di rischio diversa da 1 rappresenta un rischio. Supponendo che l’esito studiato sia indesiderabile.
- Misura di rischio > 1 indica un rischio aumentato dell’esito.
- Misura di rischio <1 implica un rischio ridotto dell’esito.
- Misura di rischio = 1 indica nessun rischio.
In PROC FREQ, l’opzione per calcolare i valori per OR o RR è RELRISK e appare come opzione all’istruzione TABLES come mostrato qui:
TABLES CHOLESTROLDIET*OUTCOME / CHISQ RELRISK;
Esempio
proc freq data=HeartDisese order=data;title 'Case-Control Study of High Fat/Cholesterol Diet';TABLES CHOLESTROLDIET*OUTCOME / CHISQ RELRISK;exact pchi or;weight Total;run;
La frequenza ci dice quanti soggetti abbiamo nella dieta LOW Cholesterol con esito NO/YES Heart Disease.
Interpretando la prima riga, abbiamo 6 soggetti con colesterolo BASSO che non hanno malattie cardiache mentre 2 soggetti con colesterolo BASSO hanno malattie cardiache.
L’atteso indica il valore effettivo al valore osservato.
La percentuale è la percentuale complessiva che indica che tra tutti i soggetti il 26,09% delle persone sono nella dieta del colesterolo BASSO e non hanno la malattia di cuore.
ROW Percentuale ci dice la percentuale di soggetti che sono nella dieta del colesterolo BASSO non ha malattia di cuore su 8 soggetti che sono nella dieta del colesterolo BASSO. i.e 75% delle persone che sono in colesterolo LOW non hanno malattia di cuore.
COL Percentuale ci dice la percentuale di soggetti che non stanno avendo malattia di cuore è nella dieta del colesterolo LOW. cioè 6 su 10 che è 60%. mentre ci sono 80% delle persone che hanno la malattia di cuore sono nella dieta ad alto contenuto di colesterolo.
L’interpretazione del test CHI-SQUARE ci dice l’associazione di queste variabili tra ciò che era previsto e ciò che si osserva.
La statistica Chi-Square (4.9597) sono inferiori al valore P (0.0259) che dice che c’è un’associazione tra ciò che ci si aspettava e ciò che si osserva.
L’avvertimento
Una delle assunzioni del test CHI-SQUARE è che il valore osservato in ogni cella deve essere maggiore di 5. Nell’esempio precedente, abbiamo 4 e 2 che sono inferiori a 5. In questi casi, è più appropriato utilizzare il test esatto di Fisher.
Il test esatto di Fisher (0.0393) che è statisticamente significativo al 5% alfa. così possiamo dire che c’è un’associazione e forse una dieta ad alto contenuto di grassi è associata ad alto rischio per le malattie Hear.
L’affermazione esatta è per PICHI che significa P-value per le uscite CHI-SQUARE la tabella sottostante.
- text{Odds ratio} = frac {text{ods di esposizione in un gruppo}}{text{ods di esposizione non in un gruppo}}
- LARGE frac {6/2} {4/11} = 8.25
Odds ratio – 8.25 con limite di confidenza del 95% che significa che la probabilità di avere una malattia di cuore è 8 volte maggiore rispetto alle persone che non hanno una malattia di cuore
Il rischio relativo di 2.88 indica che la malattia di cuore è 2.88 volte maggiore nel gruppo ALTO GRASSO. (Rischio aumentato).
Il rischio relativo di 0,34 ci dice che, c’è un rischio diminuito (0,34 volte meno) di colesterolo BASSO e malattia di cuore.
Siccome abbiamo specificato ESATTO sul rapporto ODDs, otterremo l’ultima tabella come sotto.
L’odds ratio è lo stesso del precedente che è 8.25 ma dà anche il limite di confidenza esatto.
Scaricare Proc-Freq, file di esercizio,…