Sunday, September 24, 2006

Painotettu assosiaatiokartta


Kuva tulee näkyviin suurempana klikkaamalla sitä.


R:llä voi tehdä monenlaista musiikintutkimukseen liittyvää, myös hiukan sumeampia juttuja kuin mitä tässä on aikaisemmin ollut esillä.

Ohessa on malli kuvauksesta, jonka olen nimennyt "painotetuksi assosiaatiokartaksi". Se on hiukan kuin mind map, mutta sitä varten täytyy parametrit tuntea ennestään, eikä niiden järjestelemiseksi tarvitse itse nähdä vaivaa, sijoittelun tekee kone. PAK:aa varten olen symmetriseen n x n -taulukkoon merkinnyt riveihin ja sarakkeisiin tutkimukseeni liittyviä pääsanoja ja kirjannut soluihin intuitiivisesti niiden väliset "assosiaatioarvot" (välillä [0-1], 0=ei assosiaatiota, 1=maksimi yhteys). Sen jälkeen olen piirrättänyt oheisen kartan R:llä.

Miksi tällainen kartta, mitä hyötyä siitä on?
Jos päässäsi on paljon asiaa, muttet pysty laittamaan pääasioitasi järjestykseen, voit verrata jokaista valitsemaasi käsitettä muihin käsitteisiin kirjaamalla niiden assosiaatioarvot taulukkoon (siis arvioiden esim. välillä 0-1) hyvin mekaanisella tavalla koettamatta sen enempää hahmottaa, mikä on aihealueen kokonaiskuva. Sen jälkeen moniulotteisella skaalauksella tai vastaavilla menetelmillä voi luoda itselleen oheisen tyyppisen kartan. R:ään löytyy valmiina sna-niminen kirjasto, joka sisältää gplot-komennon, jolla oheinen kuva on tehty. gplot() piirtää myös assosiaatioita kuvaavat nuolet, toisin kuin esim. peruspakettiin sisältyvä moniulotteisen skaalauksen luova mds-komento.

Ideaa käsittelevä sivu löytyy täältä.

Algoritmi PAK:n tekemiseksi R:llä:

# Käsitteiden nimet vektoriin.

TERMIT=c("mittaaminen","luokittelu","stokast_pros","tulkinta","joukkoteoria","primaarimuoto", "sumea_mittari", "dyn_kuvaus","keskiarvo_kuvaus")

# matriisin alustaminen, nollat NA:iden paikalle (ei välttämätön):
KASITEMATRIISI<-diag(length(TERMIT)) # luodaanpa saman tien ns. identiteettimatriisi

# nimet riveille ja sarakkeisiin
row.names(KASITEMATRIISI)<-TERMIT
KASITEMATRIISI=t(KASITEMATRIISI)
row.names(KASITEMATRIISI)<-TERMIT

fix(KASITEMATRIISI)# Tämä komento avaa taulukon, jonka avulla on helppo sijoittaa arvot paikalleen, kirjoita arvot vain soluihin ykkösten alle, seuraava luuppi luo symmetrisen matriisin. Aloita kaksoisklikkaamalla soluun rivillä 2, sarakkeeseen 1 ja kirjoita esim. ".5". Sen jälkeen paina enter ja kirjoita seur. soluun arvo.

for(i in 1:length(KASITEMATRIISI[,1]))
{ # huom. kaarisulut "{"
for(j in 1:length(KASITEMATRIISI[,1]))
{
KASITEMATRIISI[i,j]=KASITEMATRIISI[j,i]
}
}

# ladataan sna-kirjasto, hae se kuitenkin ensin: install.packages("sna")
library(sna)

# Tehdään kuva:

set.seed(123)

kor <- cor(KASITEMATRIISI)
X11() # avaa ikkunan kuvaa varten, Winissa voi käyttää window(), Macissa quartz()
gplot(sign(kor), edge.lwd = 10*kor, displaylabels = TRUE, label = rownames(kor), vertex.cex=as.vector(colSums(KASITEMATRIISI))/2)
# kokeile myös parametrilla mode="mds" eli:
#gplot(sign(kor), edge.lwd = 10*kor, displaylabels = TRUE, label = rownames(kor), mode="mds")

title("Painotettu assosiaatiokartta - Weighted Association Map", cex.main=2)