• Non ci sono risultati.

Alcune istruzioni R per le tabelle di contingenza

N/A
N/A
Protected

Academic year: 2021

Condividi "Alcune istruzioni R per le tabelle di contingenza"

Copied!
11
0
0

Testo completo

(1)

Alcune istruzioni R

per le tabelle di contingenza

Eva Riccomagno, Maria Piera Rogantin

DIMA – Universit`a di Genova

(2)

Costruire una tabella di contingenza

1. I dati sono in un dataframe con valori per ogni unit` a speri- mentale (esempio delle dispense)

##Lettura dati

pulse=read.table("C:/DATA/pulse.txt",header=T,row.name=1)

## le variabili ACTIVITY e SEX vengono trasformate in fattori

## e ai livelli vengono assegnate opportune etichette

pulse$ACTIVITY=ordered(pulse$ACTIVITY, levels=c(0,1,2,3), labels=c("no","poca", "media","molta") )

pulse$SEX=factor(pulse$SEX, levels=c(1,2), labels=c("M","F") )

• tabelle “a una via”

frequenze assolute (o conteggi) e relative

tab=table(ACTIVITY)

freq=prop.table(tab) ## distribuzione

cbind(tab,round(freq,4),round(freq*100,2)) ## affianca le due tabelle

• diagrammi a barre della distribuzione di una variabile qua- litativa

barplot(freq,cex.names=2,cex.axis=2) ## cex definisce la dimensione

(3)

• tabelle “a due vie” - frequenze assolute e relative

SA=table(SEX,ACTIVITY) ## in riga SEX, in colonna ACTIVITY round(prop.table(SA)*100,2)

AS=table(ACTIVITY,SEX) ## in riga ACTIVITY, in colonna SEX

###### oppure AS=t(SA) la funzione t e‘ la trasposta colnames(AS); rownames(AS)

## vettori contenenti le etichette delle variabili riga e colonna rownames(AS)[1]; rownames(AS)[2]

dim(AS) ## vettore con due elementi dim(AS)[2]

• marginali nelle tabelle “a due vie”

margin.table(SA,1) ## marginale riga assoluto margin.table(SA,2) ## marginale colonna assoluto

• visualizzare la tabella con i marginali

rbind(cbind(SA,margin.table(SA,1)),c(margin.table(SA,2),sum(SA)))

(4)

2. I dati sono gi` a in formato di tabella di contingenza

DF_esempio=read.table(text=

" B1 B2 B3 A1 35 10 5 A2 30 150 20

A3 35 90 125",header=T,row.names=1)

#### oppure letto da un file di testo sempre con read.table

questa struttura non ` e una tabella ma un data frame

non si possono applicare funzioni che agiscono su tabelle

margin.table(DF_esempio,1)

Error in margin.table(DF_esempio,1) : ’x’ is not an array

trasformazione del data frame in tabella (matrice)

esempio=as.matrix(DF_esempio)

esempio ` e la struttura su cui fare l’analisi

> margin.table(esempio,1) A1 A2 A3

50 200 250

> prop.table(esempio) B1 B2 B3

A1 0.07 0.02 0.01 A2 0.06 0.30 0.04 A3 0.07 0.18 0.25

(5)

• barplot dei conteggi (o della distribuzione) congiunti

par(mfcol=c(2,2)) # i grafici vengono costruiti in ordine per colonna

## par(mfrow=c(2,2)) i grafici vengono costruiti in ordine per riga

## evidenziare la variabile SEX barplot(AS,beside=F,font=2)

barplot(AS,beside=T,font=2)

## evidenziare la variabile ACTIVITY barplot(SA,beside=F,font=2)

barplot(SA,beside=T,font=2) par(mfcol=c(1,1))

(6)

• profili riga

row_pr=prop.table(SA,1)

round(row_pr*100,2) # ciascuna riga somma a 100

row_pr[1,] # visualizza il primo profilo riga row_pr[2,] # visualizza il secondo profilo riga

• barplot dei profili riga

barplot(row_pr[1,],ylim=c(0,1),main="Maschi", cex.names=2,cex.axis=2,cex.main=2)

## main = definisce il titolo del grafico

abline(h=0) ## aggiunge una riga orizzontale in corrispondenza d 0 barplot(row_pr[2,],ylim=c(0,1),main="Femmine",

cex.names=2,cex.axis=2,cex.main=2) abline(h=0)

## ylim definisce i limiti dell’asse verticale

## uguali nei due grafici per confrontarli

per avere sulla stessa finestra i due grafici

par(mfrow=c(1,2))

#suddivide la finestra grafica in una riga e due colonne barplot(row_pr[1,],ylim=c(0,1),main="Maschi")

abline(h=0)

barplot(row_pr[2,],ylim=c(0,1),main="Femmine") abline(h=0)

par(mfrow=c(1,1)) #ripristina la finestra grafica

(7)

• profili colonna

col_pr=prop.table(SA,2)

round(col_pr*100,2) # ciascuna colonna somma a 100 col_pr[,1]; col_pr[,2]; col_pr[,3]; col_pr[,4]

• barblot dei profili colonna

par(mfrow=c(1,4))

barplot(col_pr[,1],ylim=c(0,1),main=colnames(col_pr)[1]) abline(h=0)

barplot(col_pr[,2],ylim=c(0,1),main=colnames(col_pr)[2]) abline(h=0)

barplot(col_pr[,3],ylim=c(0,1),main=colnames(col_pr)[3]) abline(h=0)

barplot(col_pr[,4],ylim=c(0,1),main=colnames(col_pr)[4]) abline(h=0)

par(mfrow=c(1,1))

oppure - uso del ciclo for

par(mfrow=c(1,4)) for (j in 1:4) {

barplot(col_pr[,j],ylim=c(0,1),main=colnames(col_pr)[j]) abline(h=0)

}

par(mfrow=c(1,1))

(8)

• deviazioni dei profili riga dal totale colonna

rel_marg_col=prop.table(margin.table(SA,2))

## costruzione di una tabella/matrice con ciascuna riga

## uguale al marginale colonna

t_rel_marg_col=matrix(rep(rel_marg_col,dim(SA)[1]), byrow=T,ncol=dim(SA)[2]) row_dev=row_pr-t_rel_marg_col

round(row_dev*100,1)

• barplot delle deviazioni dei profili riga dal totale colonna

par(mfrow=c(1,2))

for (i in 1:dim(SA)[1]) {

barplot(row_dev[i,],ylim=c(min(row_dev),max(row_dev)),main=rownames(SA)[i]) abline(h=0)

}

par(mfrow=c(1,1))

(9)

• aggiungere un titolo generale nella finestra grafica

par(mfrow=c(1,2),oma=c(0,0,2,0)) for (i in 1:dim(SA)[1])

{

barplot(row_dev[i,],ylim=c(min(row_dev),max(row_dev)),main=rownames(SA)[i]) abline(h=0)

}

mtext("Deviazioni profili riga dal marginale colonna", outer = TRUE,cex=2) par(mfrow=c(1,1))

(10)

• profili colonna - attenzione a che cosa cambia

rel_marg_row=prop.table(margin.table(SA,1))

## costruzione di una tabella/matrice con ciascuna colonna

## uguale al marginale riga

t_rel_marg_row=matrix(rep(rel_marg_row,dim(SA)[2]), byrow=F,ncol=dim(SA)[2]) col_dev=col_pr-t_rel_marg_row

round(col_dev*100,1)

par(mfrow=c(1,4),oma=c(0,0,2,0)) for (j in 1:dim(SA)[2])

{

barplot(col_dev[,j],ylim=c(min(col_dev),max(col_dev)),main=colnames(SA)[j]) abline(h=0)

}

## aggiunge testo in alto (oma=c(0,0,2,0) indica la posizione)

mtext("Deviazioni profili riga dal marginale colonna", outer = TRUE,cex=2) par(mfrow=c(1,1))

(11)

• Tabelle a tre vie

> t1=table(SEX,ACTIVITY,SMOKES)

> t1

La prima variabile ` e scritta sulle righe, la seconda sulle colonne e la terza su diverse tabelle a due vie.

, , SMOKES = 1

ACTIVITY

SEX 0 1 2 3 1 1 2 13 4 2 0 1 6 1

, , SMOKES = 2

ACTIVITY

SEX 0 1 2 3 1 0 3 22 12 2 0 3 20 4 margin.table(t,n) e prop.table(t,n)

sono riferiti alla tabella t per la variabile n-esima.

margin.table(t1, 1) SEX

1 2 57 35

margin.table(t1, 2) ACTIVITY

0 1 2 3 1 9 61 21

margin.table(t1, 3) SMOKES

1 2

28 64

Riferimenti

Documenti correlati

Judging from the contents of their book, the authors probably would not see the more qualitative methods derived from ethnography and social anthropology as highly useful in

From these studies, Hnatowich and his group concluded that biodis- tribution of intravenously administered oligonucleotides depends on the method for radiolabeling the

The increased efficiency of the conditioned heart to deliver more blood to the body and the redistribution of that blood with exercise enables the muscles of the body to do work

Il teorema di Pitagora puo’ essere espresso nella forma seguente: se due vettori v e w sono fra loro ortogonali, allora il quadrato della... Lunghezza di un vettore

Audizione CNA 31 agosto 2020.. MISURE PER IL LAVORO ... Sostegno al reddito ... Proroga blocco licenziamenti ... Esoneri contributivi ... Contratti a tempo determinato ... Fondo

In Fisica, per gruppo di simmetria interna (o gruppo di gauge) di una teoria si intende, in generale, un gruppo nel quale gli elementi si possono rappresentare (mediante

Per provare che i vettori di˚ sono linearmente indipendenti supponiamo di avere una combinazione lineare uguale al vettore nullo e proviamo che allora i coefficienti della

=⇒ Non serve specificare la dimensione del vettore nel parametro formale ( `e un puntatore al tipo degli elementi del vettore).. Quando passiamo una matrice ad una funzione, per