---
title: "Klasteriranje varijabli"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

### Učitavanje paketa

```{r message=FALSE}
require(XLConnect)
require(ClustOfVar)
require(ggplot2)
require(reshape2)
```

### Učitavanje podataka i dodavanje varijabli

```{r}
podaci.original <- readWorksheetFromFile(file="analiza_Petrica_4.xlsx", sheet=1, header=T)
podaci.original[is.na(podaci.original)] <- 0
podaci.original <- within(podaci.original,{
  br_for_disk_bez_vijesti_kroz_br_stud <- broj_forum_diskusija_bez_vijesti / broj_studenata
  br_for_post_bez_vij_kroz_br_for_disk_bez_vij  <- broj_forum_postova_bez_vijesti / (1 + broj_forum_diskusija_bez_vijesti)
})
```

### Logaritmiranje varijabli koje poprimaju više od 10 različitih vrijednosti

```{r}
number_of_values <- list()
for (i in names(podaci.original[-(1:3)])) number_of_values[[i]] <- length(unique(podaci.original[[i]]))
```

```{r}
logaritam <- function(x) log10(x+1)
podaci.logaritam <- podaci.original
for (i in names(podaci.original[-(1:3)])) {
  if (number_of_values[[i]] > 10) podaci.logaritam[i] <- apply(podaci.original[i], 2, logaritam)
}
```

### Standardizacija podataka

```{r}
podaci.standard <- podaci.logaritam
podaci.standard[-(1:3)] <- scale(podaci.logaritam[-(1:3)])
```
## Hijerarhijsko klasteriranje varijabli

```{r}
stablo <- hclustvar(podaci.standard[,4:31])
```

```{r, fig.width=10, fig.height=9}
plot(stablo)
```

```{r, fig.width=7, fig.height=6}
plot(stablo,type='index')
```

### Stabilnost particije
S \(B>15\) ponekad ima više problema jer generira iste stupce pa treba pokušati više puta.

```{r, fig.width=7, fig.height=6}
stab <- stability(stablo,B=15, graph=T)
```

### Raspršenost prilagođenih Rand indeksa

#### Obični boxplot
```{r, fig.width=10, fig.height=7}
boxplot(stab$matCR, col='yellow')
```

#### ggplot boxplot
```{r, fig.width=10, fig.height=7}
ggplot(melt(stab$matCR), aes(y=value, x=Var2, fill=Var2)) + xlab('') + ylab('') +
    geom_boxplot(alpha=0.5, outlier.alpha=1) + theme(legend.position = 'none')
```

### Raspršenost prilagođenih Rand indeksa (samo do 10 klastera)

#### Obični boxplot
```{r, fig.width=7, fig.height=7}
boxplot(stab$matCR[,1:9], col='yellow')
```

#### ggplot boxplot
```{r, fig.width=7, fig.height=7}
ggplot(melt(stab$matCR[,1:9]), aes(y=value, x=Var2, fill=Var2)) + xlab('') + ylab('') +
    geom_boxplot(alpha=0.5, outlier.alpha=1) + theme(legend.position = 'none')
```

### Uzimamo da je 6 klastera

```{r}
klaster6 <- cutreevar(stablo, 6, matsim=T) 
```

### Veličine klastera

```{r}
klaster6$size
```

### Izgled pojedinih klastera

```{r}
klaster6$var
```

### Homogenost klastera

```{r}
klaster6$wss
```

### Postotak homogenosti particije

```{r}
klaster6$E
```

### Sintetičke varijable

```{r}
options(width = 120)
klaster6$scores
```

### Matrice sličnosti varijabli unutar klastera

```{r}
options(width = 80)
klaster6$sim
```

### Osnovne informacije o klasterima

```{r}
summary(klaster6)
```

## KMeans algoritam za klasteriranje varijabli
* Random inicijalizacija sa 6 klastera
* Algoritam se ponavlja 200 puta s različitim inicijalizacijama
```{r}
KMvar <- kmeansvar(X.quanti=podaci.standard[,4:31],init=6,nstart=200,matsim=T)
```

### Veličine klastera

```{r}
KMvar$size
```

### Izgled pojedinih klastera

```{r}
KMvar$var
```

### Homogenost klastera

```{r}
KMvar$wss
```

### Postotak homogenosti particije

```{r}
KMvar$E
```

### Sintetičke varijable

```{r}
options(width = 120)
KMvar$scores
```

### Matrice sličnosti varijabli unutar klastera

```{r}
options(width = 80)
KMvar$sim
```

### Osnovne informacije o klasterima

```{r}
summary(KMvar)
```

* Početna inicijalizacija u klastere je zadana preko vektora.
* Komponente vektora su prirodni brojevi koji označavaju kojem klasteru pojedina varijabla pripada.
* Možemo uzeti za inicijalizaciju particiju dobivenu preko hijerarhijskog klasteriranja

```{r}
KMvar2 <- kmeansvar(X.quanti=podaci.standard[,4:31],init=klaster6$cluster,nstart=1,matsim=T)
```

### Veličine klastera

```{r}
KMvar2$size
```

### Izgled pojedinih klastera

```{r}
KMvar2$var
```

### Homogenost klastera

```{r}
KMvar2$wss
```

### Postotak homogenosti particije

```{r}
KMvar2$E
```

### Sintetičke varijable

```{r}
options(width = 120)
KMvar2$scores
```

### Matrice sličnosti varijabli unutar klastera

```{r}
options(width = 80)
KMvar2$sim
```

### Osnovne informacije o klasterima

```{r}
summary(KMvar2)
```
