Analisi dei Dati ed Estrazione della Conoscenza

Il sistema R: analisi di distribuzioni multivariate

Abbiamo già visto le funzioni che R ci mette a disposizione per le analisi univariate. Oggi parliamo invece di analisi bivariate (o, più in generale, multivariate).

Tabelle di contingenza

Riassumiamo i comandi che ci consentono di generare e manipolare le tabelle di contingenza.

Indici statistici

Il sistema R mette a disposizione alcune semplici funzioni per il calcolo di indici statistici per dati multivariati.

Esercizio 1

Si consideri il set di dati weather.nominal.csv e si calcoli il guadagno di informazione dell'attributo outlook usando play come attributo classe. Riutilizzare a tale scopo le funzioni entropia o entropia.data definite negli esercizi precedenti.

Soluzione

Esercizio 2

Automatizzare la procedura seguita per lo svolgimento dell'esercizio 1, e scrivere una funzione infogain(class, attr) che calcoli il guadagno di informazione di attr rispetto a class. Ad esempio:

> v=c("a","a","b","c","a")
> a=c(0,0,1,1,0)
> infogain(v,a)
[1] 0.9709506
> w=read.csv("weather.nominal.csv")
> infogain(w$outlook,w$play)
[1] 0.2467498

Soluzione 1 Soluzione 2

La soluzione 2 è ottenuta generalizzando la soluzione dell'esercizio precedente. La soluzione 1 è, invece, una soluzione alternativa allo stesso esercizio.

Grafici

Il comando più utilizzato per la visualizzazione grafica di distribuzioni multivariate è plot.


Esempio: plot(iris$Sepal.Length,iris$Petal.Length) visualizza un diagramma di dispersione per due attributi del set di dati iris, mentre plot(iris) visualizza un pannello con tutti i possibili diagrammi di dispersione per gli attributi dello stesso insieme di dati.


Il comando plot è in realtà molto flessibile, e i vari parametri opzionali consentono facilmente di ottenere diagrammi adatti agli scopi più disparati: diagrammi per serie storiche, diagrammi cartesiani per attributi numerici discreti, etc.. Tra le opzioni aggiuntive molto utilizzate citiamo:

I parametri col e pch possono anche accettare vettori: in tal caso, ogni punto del grafico sarà colorato e/o rappresentato sullo schermo a seconda di quanto specificato nel corrispondente elemento di col e pch.


Esempio:x=seq(-10,10,0.1)
plot(x,x*x-x,type="l")
visualizza il grafico della funzione x^2-x.


Alcune funzioni molto utili, che non creano un nuovo grafico ma aggiungono il loro output ad un grafico già aperto, sono le seguenti:


Esempio:x=seq(-10,10,0.1)
plot(x,x*x-x,type="l",ylab="")
points(x,x*x+3,type="l",col="red")
legend(-2,90,c("x*x-x","x*x+3"),col=c(1,2),fill=c(1,2))
visualizza contemporaneamente il grafico delle funzioni x^2-x e x^2+3 (il primo nero, il secondo rosso) con una corrispondente legenda.


Esercizio 1

Si consideri il dataset iris. Si visualizzi un diagramma di dispersione per gli attributi Sepal.Length e Sepal.Width, colorando in maniera diversa i punti corrispondenti ai tre tipi di iris. Si utilizzi a questo scopo la funzione as.integer(x) che, dato un oggetto di tipo factor (ad esempio, un attributo categoriale di un data frame) restituisce un array di interi (un intero diverso per ognuna delle possibili modalità).

Soluzione: plot(iris$Sepal.Length, iris$Sepal.Width, col=as.integer(iris$Species))

Esercizio 2

Visualizzare il grafo riassuntivo di tutti i possibili scatter plot tra gli attributi del dataset iris, colorando come sopra i punti sulla base del tipo di iris. Qual è lo scatter plot in cui le varie specie sono più separate?

Valid XHTML 1.1 Valid CSS!