Issuu on Google+

Multivariatne metode in manjkajoˇci podatki Uporaba R pri seminarju iz Multivariatne analize Podiplomski študij Statistika

A. Blejec andrej.blejec@nib.si

June 4, 2008 Abstract Prikazana je uporaba nekaterih R funkcij, ki so uporabljajo za multivariatno analizo. Poleg funkcij za generiranje multivariatno porazdeljenih spremenljivk in funkcij za veˇcdimenzionalne grafiˇcne prikaze so nakazane še funkcije za obvladovanje problema manjkajoˇcih vrednosti.

1

Uvod

Pri seminarjih iz Multivariatne analize v šolskem letu 2006/07 raziskujemo vpliv razliˇcne obravnave manjkajoˇcih podatkov na rezultate nekaterih multivariatnih metod.

1.1

Naˇcrt seminarjev

Obravnavali bomo 4 multivariatne metode: • • • •

Wardovo hierarhiˇcno metodo razvršˇcanja Metodo voditeljev Metodo glavnih komponent Faktorsko analizo

Naˇcini generiranja manjkajoˇcih podatkov: • popolnoma nakljuˇcno (MCAR) • pogojno nakljuˇcno (MAR) • nenakljuˇcno (NMAR) Obravnava manjkajoˇcih podatkov: • • • • • • •

brisanje enot z manjkajoˇcimi podatki neupoštevanje manjkajoˇcih podatkov vstavljanje povpreˇcij spremenljivk vstavljanje nenakljuˇcnih vrednosti glede na porazdelitev spremenljivke najbližja enota multiple imputacije EM algoritem 1


Uporabne povezave, ki vam bodo lahko v pomoˇc so zbrane na naslovu http: //www2.arnes.si/~aziber4/imp.htm. Opozorilo: pri priravi tega dokumenta smo uporabili sluˇcajno generirane vrednosti, zato rezultati niso povsem ponovljivi.

2

Pred zaˇcetkom...

Funkcije, ki jih potrebujemo za izvedbo primerov so v datoteki Graph3d.r, in jih je potrebno pred delom naložiti v R delovni prostor. (’copy/paste’ ali pa s funkcijo source, npr: > > > >

options(width = 70) source("..\\doc\\Graph3d.r") set.seed(1234) ls()

S tem preberemo potrebne funkcije in postavimo generator sluˇcajnih števil na zaˇcetno vrednost.

3

Matriˇcni raˇcun

Ena od pomembnih lastnosti R je vektorizirana aritmetika, zato je zelo primeren za raˇcunanje z matrikami. Zaradi vektorizirane aritmetike je eksplicitno navajanje indeksov in for zank veˇcinoma nepotrebno.

3.1

Priprava vektorjev in matrik

Vektor pripravimo kot n-terico s pomoˇcjo funkcije c: > x <- c(1, 2, -1) > y <- c(2, 1, 6) > x [1] 1 2 -1 > y [1] 2 1 6

Vektor ima dolžino: > length(x) [1] 3

Z vektorji lahko raˇcunamo po komponentah: > 2 * x [1] 2 4 -2 > x + y [1] 3 3 5 > x - y [1] -1 1 -7 > x * y [1] 2 2 -6 > x/y [1] 0.5000000 > x^y [1] 1 2 1

2.0000000 -0.1666667

2


3.2

Matrike

Za roˇcni vnos in urejanje matrik lahko uporabimo urejevalec tabel edit. > if (interactive()) { + X0 <- make.matrix(n = 5, m = 2) + X0 + }

Na voljo imamo funkcije, za manipulacijo matrik in pomembne operacije nad matrikami Matrike množimo s pomoˇcjo operatorja %*%, transpozicijo pa naredimo s pomoˇcjo funkcije t. Obiˇcajni aritmetiˇcni parametri delujejo po komponentah: > (B <- cbind(x, y)) x [1,] 1 [2,] 2 [3,] -1

y 2 1 6

> (A <- matrix(c(1, 2, -1, 0), 2, 2)) [,1] [,2] [1,] 1 -1 [2,] 2 0 > (C <- (B %*% A)) [,1] [,2] [1,] 5 -1 [2,] 4 -2 [3,] 11 1 > t(C) [,1] [,2] [,3] [1,] 5 4 11 [2,] -1 -2 1 > B + C x y [1,] 6 1 [2,] 6 -1 [3,] 10 7

Nekaj statistiˇcnih zanimivosti matrik: > X0 <- cbind(x, y) > X0 x [1,] 1 [2,] 2 [3,] -1

y 2 1 6

> X <- X0 > dim(X) [1] 3 2 > n <- dim(X)[1] > dimnames(X)

3


[[1]] NULL [[2]] [1] "x" "y" > M <- apply(X0, 2, mean) > M x y 0.6666667 3.0000000 > t(t(rep(1, n))) %*% t(M) x y [1,] 0.6666667 3 [2,] 0.6666667 3 [3,] 0.6666667 3 > X <- scale(X, scale = F) > X x y [1,] 0.3333333 -1 [2,] 1.3333333 -2 [3,] -1.6666667 3 attr(,"scaled:center") x y 0.6666667 3.0000000 > attr(X, "scaled:center") x y 0.6666667 3.0000000 > t(X) %*% X x y x 4.666667 -8 y -8.000000 14 > diag(X) [1]

0.3333333 -2.0000000

> C <- t(X) %*% X > C x y x 4.666667 -8 y -8.000000 14 > S <- C/(n - 1) > S x y x 2.333333 -4 y -4.000000 7 > diag(S) x y 2.333333 7.000000 > diag(diag(S)) [,1] [,2] [1,] 2.333333 0 [2,] 0.000000 7

4


> SD1 <- sqrt(diag(1/diag(S))) > SD1 [,1] [,2] [1,] 0.6546537 0.0000000 [2,] 0.0000000 0.3779645 > R <- SD1 %*% S %*% SD1 > R [,1] [,2] [1,] 1.0000000 -0.9897433 [2,] -0.9897433 1.0000000 > SX <- scale(X) > t(SX) %*% SX/(n - 1) x y x 1.0000000 -0.9897433 y -0.9897433 1.0000000 > cor(X) x y x 1.0000000 -0.9897433 y -0.9897433 1.0000000

Opisne statistike za matriko lahko dobimo na razliˇcne naˇcine. Centroid (vektor povpreˇcij) lahko izvleˇcemo s pomoˇcjo funkcije colMeans, s funkcijo scale, lahko pa tudi z apply: > (X <- cbind(x, y)) x y [1,] 1 2 [2,] 2 1 [3,] -1 6 > (colMeans(X)) x y 0.6666667 3.0000000 > (attr(scale(X), "scaled:center")) x y 0.6666667 3.0000000 > (apply(X, 2, mean)) x y 0.6666667 3.0000000

Za dodatne funkcije si oglejte help(colMeans). Standardne deviacije bi lahko izvlekli kot koren diagonal kovarianˇcne matrike, kot atribut scale ali pa z apply: > (sqrt(diag(var(X)))) x y 1.527525 2.645751 > (attr(scale(X), "scaled:scale")) x y 1.527525 2.645751 > (apply(X, 2, sd)) x y 1.527525 2.645751

5


3.3

Funkcije za linearno algebro

Na voljo imamo funkcije, za manipulacijo matrik in pomembne operacije nad matrikami • • • • •

t transponiranje matrik eigen lastne vrednosti solve inverzna matrika det determinanta matrike sled izraˇcunamo kot vsoto diagonalnih elementov

> S <- matrix(c(10, 3, 3, 2), 2, 2) > S [,1] [,2] [1,] 10 3 [2,] 3 2 > eigen(S) $values [1] 11 1 $vectors [,1] [,2] [1,] -0.9486833 0.3162278 [2,] -0.3162278 -0.9486833 > det(S) [1] 11 > S1 <- solve(S) > S %*% S1 [,1] [,2] [1,] 1.000000e+00 0 [2,] -2.220446e-16 1 > zapsmall(S %*% S1) [,1] [,2] [1,] 1 0 [2,] 0 1 > sum(diag(S)) [1] 12

Primerjajte determinanto in sled z lastnima vrednostma.

3.4

Branje in pisanje z datotek

Matrike so poseben primer podatkovnih okvirjev data.frame, ker morajo biti vsi stolpci enakega tipa (npr. numeric). Za branje in pisanje matrik lahko uporabimo podobne ukaze kot za podatkovne matrike (read.table, write.table). Pri tem se prazni prostori štejejo kot manjkajoˇce vrednosti (NA). Pred kratkim so razvili Paket xlsReadWrite omogoˇca povezavo R in programa Excel v Excelovem domaˇcem formatu. Na voljo sta osnovni funkciji read.xls in write.xls. To seveda zelo olajša izmenjavo tabel. To uˇcinkovito dopolnjuje uporabo funkcij write.table in read.table, katerih prednost pa je zapis v ASCII formatu. Nekaj izkušenj, tudi v zvezi z branjem manjkajoˇcih podatkov, lahko najdete na ablejec.nib.si/R/xlsReadWrite.pdf. 6


4

Generiranje multivariatno normalnih spremenljivk

Za generiranje multivariatno normalno porazdeljenih spremenljivk uporabljamo funkcijo mvrnorm iz knjiznice MASS (Modern Applied Statistics with S_Plus). > library(MASS) > (Sigma <- matrix(c(10, 3, 3, 2), 2, 2)) [,1] [,2] [1,] 10 3 [2,] 3 2 > X <- mvrnorm(50, c(20, 20), Sigma, emp = T) > cov(X) [,1] [,2] [1,] 10 3 [2,] 3 2 > X1 <- mvrnorm(50, c(20, 20), Sigma) > cov(X1) [,1] [,2] [1,] 7.995367 1.355278 [2,] 1.355278 1.580899 > X <- mvrnorm(500, c(20, 20), Sigma, emp = T) > plot(X)

24

● ● ● ● ●

● ●

20 18

X[,2]

22

16

10

● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ●●● ●●● ● ● ● ● ● ●●● ●● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●●● ● ● ● ● ● ●●● ● ●● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ●●● ● ●●● ● ●● ●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ●●● ● ●● ●● ● ● ● ● ● ● ●● ● ●●● ●● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ● ●● ●●● ● ● ● ●● ●● ●● ● ● ●●●● ● ● ● ●●● ● ● ●● ●● ● ●● ● ● ●● ● ● ● ● ●● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ●● ● ●● ● ● ●● ●● ●● ● ●● ● ● ● ● ●●●● ● ● ● ● ●● ● ●●● ● ● ● ● ●● ● ●●● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ●● ● ●● ● ●●●●●● ● ●●●● ● ● ● ● ●●● ● ● ● ● ●● ● ● ● ●●●● ● ● ● ●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ●●● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●

●●

15

20

25

X[,1]

Opozoriti velja, da so ob ponovnem klicu funkcij za generiranje sluˇcajnih števil ˇ generira novo zaporedje. Zato so rezultati simulacij samo pogojno ponovljivi. Ce želimo generirati enako zaporedje sluˇcajnih števil, lahko generator postavimo v neko izbrano stanje s funkcijo set.seed: > m <- 5 > set.seed(1234) > (runif(m)) [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154 > (runif(m)) [1] 0.640310605 0.009495756 0.232550506 0.666083758 0.514251141 > set.seed(1234) > (runif(m)) [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154

7


5

Veˇcdimenzionalna vizualizacija

Funkcija plot nariše iz matrike prva dva stolpca. Za risanje vseh spremenljivk uporabimo pairs, vˇcasih pa pride prav tudi matplot (še kar dobro pokaže osamelce (outlier)) > > > > >

Sigma3 <- matrix(c(10, 3, 2, 3, 2, 1, 2, 1, 1), ncol = 3) n2 <- 100 X2 <- mvrnorm(n2, c(100, 90, 110), Sigma3, emp = T) plot(X2) X3 <- mvrnorm(50, c(90, 100, 90), Sigma3/2, emp = T)

> pairs(X2)

92 ●

var 1 ●

● ● ● ● ● ● ●● ●● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ●● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ●

● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ●● ●● ● ● ●● ● ● ●● ●● ● ●● ● ●● ● ●●● ● ● ● ● ● ●● ● ● ●●● ●● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ●●● ●● ● ●● ●● ● ●

● ●

● ●

● ● ● ●● ●● ● ● ● ●● ● ● ●●●● ● ● ● ● ● ●● ●● ●●● ● ● ● ●● ● ● ● ●● ●● ● ● ● ● ●●● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●

var 2 ●

● ●●

● ●● ● ● ●

● ● ● ● ● ● ●● ● ● ● ●● ● ●●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●● ● ●

● ●● ●

var 3

● ● ● ●

100

● ● ●● ● ●● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●● ●●● ●● ● ●● ● ● ●●● ● ●● ● ●● ●● ● ●●● ● ● ●● ●●●● ● ● ●● ● ●●● ● ● ●● ● ● ● ●● ● ● ● ●

95

112

● ●

● ● ● ● ● ● ●● ● ●●● ●●● ● ● ● ● ●●● ● ● ● ●●● ● ● ● ●● ● ● ●● ● ● ●●● ● ● ●● ● ● ● ● ●● ●● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ●● ● ● ●● ● ● ●● ● ●

110

86

88

● ●●● ● ●● ●

108

90

92

● ● ● ●●

105

90

100

88

95

86

105

108

> matplot(X2, pch = 1:3)

8

110

112


110

105

100

X2

● ●

● ●

● ●

● ●● ●

● ●

● ●

● ●

● ●

●●

● ●

95

●● ●

●●

● ● ● ● ●●

● ● ● ●

● ●●

● ●● ●

● ●

● ● ●●

● ●●

● ●●

● ●

● ●

● ● ●

90

0

20

40

60

80

100

Razširitev funkcije pairs je funkcija splom v knjižnici lattice. Ta knjižnica je osnova Lattice ali Trelis grafike in se jo splaˇca kdaj podrobneje pogledati. Lattice razširja osnovni grafiˇcni naˇcin in je izjemno uˇcinkovit za komponiranje razliˇcnih grafov.

5.1

3-dimenzionalna grafika

Za risanje trodimenzionalnih grafiˇcnih prikazov je na voljo veˇc knjižnic. Za enostavnejše rokovanje sem pripravil nekaj prilagojenih funkcij:

9


make.matrix Odpre urejevalec matrik za vnos nove matrike XX=make.matrix(2,3) persp Risanje perspektivnih ploskev (3d) image Risanje gostot contour Risanje plastnic my.mvrnorm 3-razsežna normalna porazdelitev persp.xyz Risanje toˇck v 3d prostoru - library(MASS) outer Uporabi funkcijo na kombinacijah x in y expand.grid Pripravi mrezo toˇck my.mapply(X,FUN,...) Uporabi funkcijo FUN na stolpcih matrike X my. aggregate Uporadi funkcijo na stratumih – rezultat je matrika persp.3d Pripravi osnovo za risanje 3d diagramov (pripravi .pmat) trans3d Transformira toˇcke iz 3d v projekcijsko ravnino (uporablja .pmat) points.3d Risanje toˇck v pripravljeno sliko prostora lines.3d Risanje poligonov segments.3d Risanje daljic arrows.3d Risanje pušˇcic eigen.3d Risanje lastnih vektorjev project.3d Izraˇcun projekcij na koordinatne ravnine show.proj Prikaz projekcij show.eigen Prikaz lastnih vektorjev show.hsv Prikaz barvne lestvice HSV show.rgb Prikaz parvne lestvice RGB Osnovna funkcija za risanje je persp.3d, ki v osnovni prostor nariše toˇcke. Transformacijsko matriko shrani v skrito spremenljivko .pmat=list(...). Druge funkcije uporabljajo .pmat za transformacije koordinat. > persp.3d(X2) [1] 3

Y

Z

● ● ●● ● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●● ●● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ●●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●●●●● ●●● ● ● ● ●● ●● ● ● ●● ●● ●● ● ●● ● ● ●●● ●● ●● ● ● ● ●● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ●● ● ● ●● ● ● ●● ●●● ● ●●● ●● ●● ●●● ●● ● ● ● ● ●●● ●● ● ●● ● ●● ●● ● ● ●● ● ● ● ●● ● ●● ● ●● ● ● ●● ● ● ●● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ●● ● ● ●●●● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ●●●●● ● ● ● ●● ●●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ●

X

10


Pripravimo tri razliˇcne skupine podatkov, z razliˇcnimi centroidi (M) in razliˇcnimi kovarianˇcnimi matrikami (Sigma): > + > > > > > > > > > > > >

Sigma1 <- matrix(c(2, 1, -2, 1, 5, 1, -2, 1, 10), 3, 3) Sigma2 <- matrix(c(5, 3, 4, 3, 5, 3, 4, 3, 10), 3, 3) Sigma3 <- matrix(c(10, 3, 2, 3, 2, 1, 2, 1, 1), 3, 3) Sigma4 <- matrix(c(20, 0, 0, 0, 1, 0, 0, 0, 1), 3, 3) n1 <- 250 n2 <- 250 n3 <- 250 M1 <- c(50, 60, 70) M2 <- c(70, 60, 50) M3 <- c(50, 70, 60) X1 <- mvrnorm(n1, M1, Sigma1) X2 <- mvrnorm(n1, M2, Sigma2) X3 <- mvrnorm(n1, M3, Sigma3, emp = TRUE)

Slika treh skupin podatkov, ki leže na razliˇcnih mestih in imajo razliˇcne kovarianˇcne matrike. > persp.3d(rbind(X1, X2, X3), col = rep(c(2, 3, 4), c(n1, + n2, n3))) [1] 3

Y

Z

● ●●● ● ● ●● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●●●●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ●● ● ● ● ● ● ● ●● ● ● ●●● ●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ●● ● ●●●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ●●● ● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ●● ● ● ● ● ● ●● ● ●● ● ● ●●●●● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ●● ● ● ● ● ● ● ●●● ●●● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●●●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●●●● ● ●● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ●●●● ●● ●● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●●● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ●● ●●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●●● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ●● ● ●● ●● ● ● ●● ● ● ● ● ● ●

X

Smer pogleda na trodimenzionalni prostor, projekcije na stranske ploskve, barve, oblike in velikosti toˇck lahko nadziramo z argumenti funkcije persp.3d. Argument scale=F omogoˇci proporcionalne dimenzije v vseh treh smereh. > args(persp.3d)

11


function (X = matrix(rnorm(30), nc = 3), y = NULL, z = NULL, theta = 30, phi = 30, ndiv = 10, xlim = NULL, ylim = NULL, zlim = NULL, xlab = "X", ylab = "Y", zlab = "Z", col = 4, cex = 1, pch = 1, side = "xyz", ...) NULL

Toˇckam lahko dorišemo projekcije (kako lahko pogledate v show.proj. > show.proj(X3[1:10, ])

● ● ● ●

● ● ● ●

● ● ●

● ● ● ● ● ●

Z

● ●

● ●

● ●

● ● ●

Y

● ●

● ●

X

Na naslednji sliki so prikazani osnovni podatki matrike X3 v originalnih koordinatnih oseh. Z rdeˇcimi cˇ rtami narisani lastni vektorji. Centroid (zelena pika) je dorisan s funkcijo points.3d. > show.eigen(X3) > points.3d(colMeans(X3), pch = 16, cex = 2, col = 3)

12


Z

● ●● ● ● ● ●●● ● ●● ● ● ●● ● ● ●●●●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ●● ● ●●●● ●●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ●● ●●● ●● ●● ● ● ● ●● ●●● ●● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ●● ●● ● ● ●●●● ● ● ●●● ● ● ●● ● ● ●●● ● ●● ●● ● ● ● ● ● ●● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●●● ● ● ● ●● ● ●●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●●● ●●● ●● ●●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●● ● ●● ●● ● ●● ● ●● ●●● ●● ● ●● ● ●●● ● ● ● ● ● ● ●● ● ●● ● ● ● ●● ● ●●●●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ●● ● ● ● ●● ● ● ●● ● ●●●● ● ●●●●● ●● ● ●● ●●● ●● ● ●● ● ● ● ● ●● ●● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ●● ● ● ● ● ● ●●● ●● ● ● ●●● ● ● ●●● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●●● ●● ● ● ●●● ● ●●● ● ●● ●● ● ● ● ●● ●● ● ●●● ● ● ● ● ● ● ● ●● ● ● ● ●●●● ●● ● ● ●●●● ●● ● ● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ●●●● ● ●● ●● ●● ● ● ●● ●●● ● ● ● ●● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ●●● ● ● ●●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ●●●●●● ●●● ● ● ●● ● ● ● ●●●●●● ● ● ● ● ● ●● ● ● ● ●●● ●● ● ●● ● ● ●● ● ● ●● ● ● ● ●● ● ● ● ●●

Y

X

Isti podatki, transformirani z lastnimi vektorji (vrednosti glavnih komponent). Podatki so pri tem zavrtijo tako, da so lastni vektorji vzporedni glavnim komponentam. > > > > > > >

X <- scale(X3, scale = FALSE) var(X) (EV <- eigen(var(X))) V <- EV$vectors U <- X %*% V zapsmall(var(U)) show.eigen(U, xlab = "PC1", ylab = "PC2", zlab = "PC3")

PC3

● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●●●● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●●●● ●●● ● ●● ● ● ● ● ● ●● ● ● ● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ●● ● ● ●● ●●●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●●●● ● ● ● ● ●● ●● ●● ● ●●● ●● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ●● ● ● ● ● ● ● ● ● ● ●● ●●● ● ● ●● ● ● ●● ●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●● ● ● ●● ●● ● ●● ●● ●● ● ●●● ●● ●●●● ● ● ●●●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ●● ● ●● ●● ●● ●● ● ●● ●●● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ●●●● ● ● ●●● ● ●● ● ● ●● ●●● ●●● ● ●● ●● ●● ●● ● ● ● ● ●● ●● ● ● ●● ● ● ●● ●● ●● ● ● ● ● ● ● ●● ● ● ●● ●● ● ●● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●●● ●●●●●● ●● ● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ● ●● ●● ●● ● ●● ● ● ● ●● ●● ● ● ●● ● ●● ● ● ●●●● ● ●● ● ● ● ● ●● ● ●● ● ● ● ●● ● ● ● ●●● ●●● ● ● ●● ●●●●● ●● ● ● ● ●● ●●●● ●●● ● ● ● ●●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●●●● ● ●● ● ●●● ● ● ● ● ● ● ●●●● ● ●● ● ● ●● ● ●● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●

● ●

PC

2

PC1

Morda ni odveˇc pogledati, kakšni so lastni vektorji za vse tri, povsem razliˇcne skupine. Vprašanje je, kakšno vlogo bi lahko v tem primeru imeli lastni vektorji? Kota phi in theta spremenita smer pogleda. (pri ocenjevanju razdalj je treba upoštevati perspektivo!) 13


> persp.3d(rbind(X1, X2, X3), col = rep(c(2, 3, 4), c(n1, + n2, n3)), phi = 10, theta = 90) > eigen.3d(rbind(X1, X2, X3), col = 1, lwd = 3, scl = 2)

Z ● ●

X

● ● ● ●● ●

●●● ● ●●●● ●● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ●●● ● ●● ●● ● ● ●● ●● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ��� ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●●● ●●● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●●● ● ●●● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ●●● ● ●●● ● ● ● ● ●● ● ●● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ●● ● ● ● ● ● ● ●● ●●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ●● ● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ●●●●● ● ● ●● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ● ●● ● ● ● ●● ● ● ●● ●● ● ●●● ● ●● ●● ● ●● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ● ●●●●● ● ● ● ● ● ● ●● ●● ●●● ●● ● ●●●● ● ● ● ● ●●●● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ●●● ● ● ●● ●● ●● ● ●● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ●● ● ●●● ● ● ●●● ● ● ● ● ●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ●● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●●●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ●●● ● ● ●● ● ●●●● ●● ●● ● ●● ● ●●● ● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ● ● ●●● ● ●● ● ● ●● ● ●● ● ●●● ●● ● ●● ● ● ●● ● ● ●● ● ● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ●●●● ● ● ●● ● ● ●● ● ●● ● ● ●● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ●●●● ● ● ● ● ● ● ●●● ●● ● ● ● ● ●● ●● ●● ● ●● ● ●●

Y

5.2

RGL

Primere uporabe RGL si lahko ogledamo v paketu misc3d.

6

Generiranje manjkajoˇcih podatkov > > > > > > > >

set.seed(12345) n <- 15 m <- 3 xm <- c(5, 5, 5) X0 <- round(mvrnorm(n, xm, Sigma2)) varnames <- paste("X", 1:m, sep = "") unitnames <- paste("E", 1:n, sep = "") dimnames(X0) <- list(unitnames, varnames)

Za prikaz razliˇcnih vrst generiranja manjkajoˇcih podatkov bomo uporabili 3 spremenljivk in 15 enot. Na razliˇcne naˇcine bomo izbrali, kateri podatki naj manjkajo. Osnoa je doloˇcitev indeksov enot, ki naj imajo manjkajoˇce vrednosti. R oznaˇcuje manjkajoˇce vrednosti s simbolom NA. Poljubnamu objektu ali delu objekta (vektorja ali matrike) lahko priredimo manjkajoˇco vrednost (npr x <- NA). Pri branju podatkov iz text (ASCII) ali Excel datotek se prazna polja pretvori v NA. Z argumentom na.strings navedemo vrednosti, ki naj se pretvorijo v NA (npr. za SPSS je navada, da oznaˇcimo manjkajoˇc podatek z 9999; take podatke lahko v R preberemo z read.table(..., na.strings="9999", ...). 14


Zaradi varˇcevanja s prostorom, bomo izpisovali le del podatkovne matrike v transponirani obliki (vrstice so spremenljivke X1, glej konstrukcijo imen enot in spremenljivk s paste ). > > > >

id <- 4 X <- X0 X[id, 1] <- NA t(head(X, 15)) E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 E13 E14 E15 6 9 7 NA 6 2 5 3 8 5 5 6 4 6 5 4 6 4 1 5 1 4 7 5 6 1 10 6 4 3 8 5 4 5 7 1 9 4 2 0 7 10 7 7 2

X1 X2 X3

V zgornjem izpisu je vrednost enote E4 postavljena na NA.

6.1

Nekaj uporabnih funkcij

Ime funkcije is.na which complete.cases

Namen preveri ali vrednosti manjkajo (T, F) vrne indekse vrednosti, ki ustrezajo pogoju, argument arr.ind vrne indekse enot, ki imajo popolne podatke za vse spremenljivke

Posebej za naš seminar imamo še funkciji declareMissing in declareMissing.matrix. Prva doloˇci indekse manjkajoˇcih vrednosti v vektorju, druga pa v stolpcih matrike, ki so doloˇceni z argumentom ind. Funkciji sta v datoteki Graph3d.r, in jo skupaj z drugimi funkcijami namestimo v delovni prostor s ’copy/paste’ ali pa s source(’Graph3d.r’). > declareMissing(1:20, 1/2) [1]

2

3

4

9 10 11 13 18 19 20

> declareMissing(1:20, 5) [1]

7

1

8

9 13 15

Nadomešˇcanje manjkajoˇcih vrednosti

7.1

Popolnoma nakljuˇcno (MCAR)

MCAR (Missing completely at random) pomeni, da je manjkanje vrednosti povsem sluˇcajno. Primer uporabe declareMissing.matrix. Prvi spremenljivki smo doloˇcili 10% manjkajoˇcih, drugi niˇc, treji pa 20% manjkajoˇcih vrednosti. V sliki parov so z veˇcjimi rdeˇcimi krogi oznaˇcene toˇcke, ki so bile izloˇcene iz osnovne matrike. Pazi!!! barva manjkajoˇcih prvega stolpca je razmnožena v druge grafe"!! > ids <- declareMissing.matrix(X2, c(0.1, 0, 0.2)) > table(ids[, 2])/dim(X2)[1] 1 3 0.1 0.2

15


cols <- X2/X2 cols[ids] <- 2 pairs(X2, col = cols, cex = c(1, 2)[cols]) Xmiss <- X2 Xmiss[ids] <- NA

58

62

66 ● ● ● ● ●

var 1 ● ●

● ●

● ●

●●●● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ●●● ●●● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ●● ●● ●● ●●● ● ●● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ●●●●● ● ●● ● ● ● ● ● ●● ● ● ●● ●●● ● ●● ●● ● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ●● ●● ● ●●

● ● ● ●

●●●● ● ● ● ● ● ●● ●● ● ● ●● ● ●● ● ●

66

● ● ● ● ● ●● ● ● ● ●● ● ●● ● ● ●● ● ●● ● ● ●● ● ●● ●● ● ● ● ● ●●●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ●● ● ● ● ● ●●● ●● ●● ● ● ● ● ● ● ● ●● ● ●● ●● ●● ● ●●● ●●●●●● ●● ● ● ● ●●● ● ●● ● ● ●● ● ● ●●● ●●●● ●●●● ●● ● ● ● ●●●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ●●●● ● ● ●● ● ● ● ●● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ●● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●

● ●

62 58 54

● ● ● ● ●

var 2

● ●

● ● ●● ● ● ● ●● ●●● ●● ●

● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ●

● ● ●● ●●● ● ● ● ● ● ●● ● ●● ●● ● ●●●● ● ● ● ●

● ● ●

●● ●● ● ●● ● ●● ● ●● ●● ● ● ●● ● ●● ●● ● ● ●●●●●●● ●● ● ● ● ● ●● ●● ● ● ●● ● ●● ● ● ● ●● ●● ● ●● ● ● ●●● ●● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ●●● ●● ● ●●● ● ●●●● ●● ● ●● ● ●● ● ●● ●● ●● ● ● ● ●● ● ● ●● ● ● ●● ● ●● ● ● ●

55

● ● ●● ● ● ●●● ●●●● ●● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ●●● ● ● ●●●● ●●● ● ●●● ● ●●●●●● ●● ● ● ● ● ● ● ●●●● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ●●● ● ●● ●● ● ● ● ● ● ● ●● ●● ●●● ●●● ● ● ● ● ● ●●● ●● ● ● ● ●●●● ● ● ● ● ●●●●●● ● ● ●● ● ●● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ●

var 3

64 66 68 70 72 74 76

45

●● ● ●● ● ●● ● ● ● ●●●● ●● ● ● ● ●●● ● ●●● ●

7.2

● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●

● ●

● ●●●●●● ● ● ● ● ●● ● ●●● ● ●●● ●

●●

● ● ● ●● ● ●● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ●● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●●● ● ● ●●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ● ● ●● ●● ● ● ● ●●● ●● ●● ● ● ● ● ●●●● ● ● ●●● ● ●● ●● ●●● ●● ● ●● ●● ● ● ●● ● ●●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ●● ● ●● ●● ● ●● ● ●●● ●● ● ● ●● ● ● ●● ● ●

●● ● ● ● ● ●● ● ● ●●●●●●●●●● ● ●● ● ●● ● ● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ●●●● ● ● ●●● ● ●● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ●●● ●●● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ●●●●● ● ● ● ●● ●● ●● ●● ● ● ●● ●●● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ●●● ●● ●● ●●●●●● ●● ● ●● ● ●● ● ● ●●●● ● ● ● ● ●● ●●●●●●●● ● ●

64 66 68 70 72 74 76

54

50

> > > > >

45

50

55

Pogojno nakljuˇcno (MAR)

MAR (Missing at random) pomeni pogojno odvisnost manjkajoˇce vrednosti od neke druge spremenljivke. Vrednosti ene spremenljivke ( X ) morda manjkajo, cˇ e neka druga spremenljivka (Y) izpolnjuje nek pogoj.

( X <- N A|Y > y0 ) Izbor naredimo v dveh korakih: najprej poišˇcemo enote, ki ustrezajo nekemu pogoju (npr. Y > y0 ). Med temi enotami sluˇcajno izberemo nekaj enot in jim pripišemo manjkajoˇce vrednosti:

candidate <- which(Y>y0) ids <- candidate[ declareMissing (candidate,p=0.5) ] > > > > > > >

X <- X2 ix <- 1 iy <- 2 y0 <- round(quantile(X2[, iy], 0.9)) candidate <- which(X[, iy] > y0) ids <- candidate[declareMissing(candidate, 0.5)] X[ids, iy]

16


[1] 63.59629 63.03607 64.08107 63.40837 63.12777 64.64328 64.02814 [8] 64.32179 64.61402 64.02821 63.73884 65.57632 66.39017 > X[ids, ix] <- NA > cols <- X2/X2 > cols[which(is.na(X), arr.ind = TRUE)] <- 2 > pairs(X2, col = cols, cex = c(1, 2)[cols])

var 1 ● ●

● ●

58

62

66

● ● ● ●● ● ● ●● ● ���● ● ● ●● ● ●● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ●● ● ●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ● ● ●● ●● ● ●●● ● ● ●●●● ● ● ●● ● ● ●● ●● ●●● ● ● ● ●●● ● ● ●● ● ●● ● ●● ● ●● ●● ●● ●●●●● ● ●●●● ● ● ●● ● ● ● ● ●● ●● ● ●● ● ●●● ● ●●●● ● ●●●●● ●●● ●● ● ●● ●

● ●●●●● ● ●● ●● ●●● ●● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●●

●●

●●

66

● ●● ●● ●● ● ●●● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ● ●

● ●●●●● ● ● ●● ● ●● ●●● ● ●● ●● ●● ●● ● ● ●● ●●●● ●● ● ● ● ● ●● ●● ● ● ●● ● ●● ●● ● ●● ●●● ●● ● ●● ●● ●● ● ●●● ● ● ●●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ●●● ●●●●●●●●● ●● ● ● ● ●●●● ● ● ●● ● ● ●●● ●● ●● ● ●●● ● ●●●●●●● ●● ● ● ● ●● ●● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ●●●● ● ●●● ●● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●

var 2

● ●

● ●

● ●●● ● ●

● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●●● ●● ● ● ● ●● ● ● ●●● ●●● ●● ●● ● ● ● ●● ●● ● ● ● ●● ●●●●●● ● ● ● ● ●● ●●●●● ● ● ● ● ●● ● ● ● ●● ●● ●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ●● ● ●● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ●●●● ● ●● ● ●● ●●● ● ● ● ● ● ●●● ●● ● ● ● ●● ● ●● ●● ●● ●● ●● ● ● ●●●● ● ●● ● ● ● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●● ● ●● ●

● ●

64 66 68 70 72 74 76

●● ●

55

● ● ● ●● ● ● ●● ●

var 3

45

● ●● ●● ● ● ● ● ● ● ● ● ●●● ●● ● ●● ●● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ●●●●● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●●●●● ●●● ●● ●● ● ● ●● ● ● ●●● ● ●●●● ● ●●● ● ● ● ● ●●● ● ● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ● ● ●● ●● ● ● ● ●● ● ●●● ● ●● ● ●●●● ●● ● ● ●● ●● ● ● ● ● ● ● ●●● ●●●● ● ● ●● ● ● ●● ● ● ●● ● ●● ● ●● ● ● ● ●● ●● ●● ●● ●● ● ● ●● ● ● ●● ● ● ●●● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ●

●●

● ●

50

62 58 54

● ● ● ●● ● ●● ● ● ●●

7.3

●● ● ● ●●

● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ●●● ●●● ● ● ● ● ● ● ● ● ●●● ●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ●●●● ● ● ● ● ● ● ●●● ● ● ●● ● ● ● ●●● ● ● ● ●● ●●● ● ● ● ●● ●● ● ● ● ● ● ● ●● ●● ●● ● ● ● ●● ● ●● ● ● ●● ● ●●●● ● ● ●●● ●● ●● ●● ●●● ●● ● ●● ●● ● ● ●● ● ●●● ● ● ● ● ● ● ●● ● ●● ● ● ● ●● ● ● ● ●● ● ● ●● ●● ●● ●● ● ● ● ● ●● ● ● ● ● ●● ● ●● ● ● ●● ● ● ●● ● ●

● ● ● ● ● ● ● ● ●●● ●● ●● ● ● ● ●●● ●● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●●●● ● ● ● ● ●●●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●●●● ● ●● ● ● ● ● ●● ● ● ● ●●● ●●● ● ●● ● ●● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●●● ●● ● ● ●● ● ●●●● ●● ●● ●●●● ● ● ● ● ●● ●● ● ● ● ●● ● ● ●● ●●● ●● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ●● ●● ●● ● ●● ●●●●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ●

64 66 68 70 72 74 76

54

45

50

55

Pogojno nakljuˇcno (NMAR)

NMAR (Not missing at random) je nekoliko neneavaden izraz, pomeni pa, da so vrednosti ene spremenljivke morda manjkajo, to pa je pogojeno z vrednostjo iste spremenljivke. Seveda pa ne manjkajo kar vse, ampak le nekatere, sluˇcajno izbrane.

( X <- N A| X > X0) > > > > > > >

X <- X2 ix <- 1 iy <- 1 y0 <- round(quantile(X2[, iy], 0.9)) candidate <- which(X[, iy] > y0) ids <- candidate[declareMissing(candidate, 0.5)] X[ids, iy] [1] 73.51063 75.94196 73.88824 73.86174 73.59688 74.94572 73.27105 [8] 74.78932 75.22659 73.81415 73.18411 > X[ids, ix] <- NA > Xmiss <- X > cols <- X2/X2 > cols[which(is.na(X), arr.ind = TRUE)] <- 2 > pairs(X2, col = cols, cex = c(1, 2)[cols])

17


58

62

66 ● ● ● ●

● ●●● ● ● ● ●● ●● ●● ●●●●●●●●●

var 1 ● ●

●●● ● ● ●●●●● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ●●● ● ● ●● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ●● ●●●● ● ● ●● ● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ●●● ● ●● ● ● ● ●● ● ● ● ●● ● ●● ●● ●● ●●●●● ● ● ● ● ● ●●● ● ● ● ● ●●● ● ●● ● ●● ● ● ●●● ● ●● ●●● ● ●●● ●●● ●●● ● ● ● ●● ●●●● ●●● ● ●● ●● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ●●

● ● ●● ●● ● ● ● ●● ● ●● ● ●● ● ● ● ●●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ●● ● ● ● ●●● ●●● ● ● ● ●● ●● ● ●● ● ●● ●● ● ● ● ●● ● ● ●●●● ●● ●● ● ●● ● ●● ● ● ●● ●● ●● ●●● ●● ● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ●● ●●● ●● ● ● ● ● ● ●● ● ● ●● ●●● ● ● ● ●● ● ●● ● ●● ●●●●● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ●● ● ●

54

● ● ● ● ●● ● ● ● ● ●

● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●● ●●● ● ● ●●● ● ● ●● ●● ● ● ● ● ●● ●● ●● ● ● ● ●● ● ●● ● ● ●● ● ● ●●●● ● ● ●●● ●● ●● ●●● ●● ● ●● ●● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●● ● ●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ●● ● ●● ● ● ● ●●●●● ● ● ● ●● ● ● ●● ● ●

var 2

● ●

64 66 68 70 72 74 76

● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ●● ● ● ●●● ●●● ● ●● ● ● ●● ●● ● ●●● ● ● ●●● ● ●●●●●● ● ● ● ● ● ● ●● ● ● ●●● ● ●● ●● ●● ● ● ● ● ● ● ●●●●● ●● ● ●● ●● ● ●● ●●● ● ●● ● ●●●● ● ● ●● ● ●●● ● ●● ●● ● ● ● ● ●● ●● ●● ●●●● ● ● ●● ● ●● ●●● ● ● ● ● ● ●●● ●● ● ● ● ●● ● ●● ●● ●●● ●●●●● ● ● ● ● ●●●● ●●● ● ● ● ●● ● ●● ● ● ●● ● ●● ● ● ● ● ●● ● ● ●● ● ●● ● ●● ●

●● ● ●● ● ● ● ●●

●●

55

var 3

45

● ● ● ●● ● ● ● ● ● ● ● ● ●●●●●● ● ● ● ● ● ● ●● ● ●●● ●● ●● ● ●● ● ● ●● ● ● ● ● ● ● ●● ● ●● ●●● ● ●●●● ● ●● ●● ●●●●● ●● ● ●● ● ●●●● ● ● ●●●● ● ●●● ● ● ● ●●● ● ● ● ●● ●● ● ● ●● ●● ● ●● ● ● ●● ● ● ● ●● ●● ● ● ●● ● ●●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ●● ● ● ●●● ●●●● ● ● ●● ● ● ●● ●● ● ● ● ● ●●● ● ● ● ● ● ●● ●● ●● ●● ●● ● ● ●● ● ●● ● ●● ● ●●● ● ● ● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ●

●● ●● ●● ● ● ●

7.4

● ●

● ● ● ● ● ●● ● ● ●

● ●●● ● ● ●● ● ● ● ●● ● ●● ● ●● ● ●● ● ●● ●● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ●● ●● ● ● ●● ●●●● ● ● ●● ● ●● ● ● ● ●● ●●● ●● ●● ●● ●● ● ●●● ● ● ● ●●● ● ● ●●● ● ● ●● ● ● ● ●●● ●● ●● ● ● ●●● ●●● ● ● ●●●● ● ● ●● ● ● ●● ●● ●●● ●● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ●●●● ● ●●● ●● ●●● ● ● ● ● ● ● ● ● ●● ● ● ●

50

58

62

66

● ● ● ● ●● ● ●● ●● ● ●

64 66 68 70 72 74 76

54

45

50

55

Enak nivo za vse spremenljivke

> X <- X0 > level <- 6 > (ids <- which(X > level, arr.ind = TRUE)) E2 E3 E9 E8 E12 E1 E5 E7 E11 E12 E13 E14

row col 2 1 3 1 9 1 8 2 12 2 1 3 5 3 7 3 11 3 12 3 13 3 14 3

> X[ids] <- NA > t(X) E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 E13 E14 E15 X1 6 NA NA 5 6 2 5 3 NA 5 5 6 4 6 5 X2 4 6 4 1 5 1 4 NA 5 6 1 NA 6 4 3 X3 NA 5 4 5 NA 1 NA 4 2 0 NA NA NA NA 2 > Xsmall <- X

18


8

Obravnavanje manjkajoˇcih podatkov

8.1

Brisanje enot z manjkajoˇcimi podatki

ENote z manjkajoˇcimi vrednostmi odstranimo in analiziramo popolne podatke, ki ¨ ostanejo. Ta metoda je znana tudi kot Listwiseödstranjevanje manjkajoˇcih enot. V R imamo lahko uporabimo funkciji na.omit in na.exclude. Obe naredita novo podatkovno matriko brez manjkajoˇcih vrednosti, zraven pa ohranita (kot atribut) seznam enot, ki so bile odstranjene in metodo, ki je bila uporabljena. Poglejmo kaj naredita na primeru manjkajoˇcih vrednosti iz prejšnjega razdelka. > X.exclude <- na.exclude(X) > t(X.exclude) E4 E6 E10 E15 X1 5 2 5 5 X2 1 1 6 3 X3 5 1 0 2 attr(,"na.action") E2 E3 E9 E8 E12 E1 E5 E7 E11 E13 E14 2 3 9 8 12 1 5 7 11 13 14 attr(,"class") [1] "exclude" > X.omit <- na.omit(X) > t(X.omit) E4 E6 E10 E15 X1 5 2 5 5 X2 1 1 6 3 X3 5 1 0 2 attr(,"na.action") E2 E3 E9 E8 E12 E1 E5 E7 E11 E13 E14 2 3 9 8 12 1 5 7 11 13 14 attr(,"class") [1] "omit"

8.2

Neupoštevanje manjkajoˇcih podatkov

Pri mnogih funkcijah (npr. mean, sum, sd, var, cov, cor lahko z navedbo argumenta na.rm=TRUE dosežemo, da funkcija pred raˇcunanjem odstrani manjkajoˇce vrednosti. Standardni naˇcin za odstranitev manjkajoˇcih vrednosti je pri vektorjih (ena spremenljivka) ohranitev ne-manjkajoˇcih: (!is.na(x)) > (x <- X[, 1]) E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 E13 E14 E15 6 NA NA 5 6 2 5 3 NA 5 5 6 4 6 5 > mean(x) [1] NA > mean(x, na.rm = TRUE) [1] 4.833333 > (x <- x[!is.na(x)]) E1 E4 E5 E6 E7 E8 E10 E11 E12 E13 E14 E15 6 5 6 2 5 3 5 5 6 4 6 5 > mean(x) [1] 4.833333

19


8.3

Vstavljanje povpreˇcij spremenljivk

Pri tej metodi nadomestimo vse manjkajoˇce vrednosti posamezne spremenljivke s ˇ imamo pripravljene indekse manjkajoˇcih vredpovpreˇcjem te spremenljivke. Ce nosti ter vektor povpreˇcij, lahko to storimo takole (Zaradi preglednejšega izpisa smo povpreˇcja zaokrožili na cela mesta) : > X <- Xsmall > t(X) E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 E13 E14 E15 X1 6 NA NA 5 6 2 5 3 NA 5 5 6 4 6 5 X2 4 6 4 1 5 1 4 NA 5 6 1 NA 6 4 3 X3 NA 5 4 5 NA 1 NA 4 2 0 NA NA NA NA 2 > ids <- which(is.na(X), arr.ind = TRUE) > (means <- colMeans(X, na.rm = TRUE)) X1 X2 X3 4.833333 3.846154 2.875000 > X[ids] <- round(means[ids[, 2]], 0) > t(X) E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 E13 E14 E15 6 5 5 5 6 2 5 3 5 5 5 6 4 6 5 4 6 4 1 5 1 4 4 5 6 1 4 6 4 3 3 5 4 5 3 1 3 4 2 0 3 3 3 3 2

X1 X2 X3 > > > >

8.4

X[ids] <- means[ids[, 2]] cols <- Xsmall/Xsmall cols[which(is.na(Xsmall), arr.ind = TRUE)] <- 2 pairs(X, col = cols, cex = c(1, 2)[cols])

Vstavljanje nakljuˇcnih vrednosti glede na porazdelitev spremenljivke

Za nadomestitev nakljuˇcno izberem eno od nemanjkajoˇcih vrednosti.

8.5

Najbližja enota

8.6

Multiple imputacije

8.7

EM algoritem

20


http://ablejec.nib.si/R/mva07