Puuttuvat tiedot

Periaatteessa kaikkien vektorin muuttujien on oltava samaa tyyppiä. Jokin arvoista voi kuitenkin puuttua esimerkiksi tutkimuksellisen ongelman takia. Puuttuva tietoa merkitään R:ssä NA (``Not Available''). Toinen syy tiedon puuttumiseen on mahdoton matemaattinen operaatio:

> v2 <- -1:3
> v2
[1] -1  0  1  2  3
> log(v2)
[1]       NaN      -Inf 0.0000000 0.6931472 1.0986123
Warning message:
NaNs produced in: log(x)

Mahdottoman matemaattisen operaation tuloksena syntyvä puuttuva tieto on yleensä NaN (``Not a Number''), mutta R pystyy myös tuottamaan tulokseksi äärettömän (Inf), kuten yllä näkyy.

Puuttuvat tiedot ovat riesa analyysissä, sillä jos laskutoimituksessa on puuttuvat tieto, on tulos myös puuttuva tieto:

> mean(sqrt(v2))
[1] NaN

Ainoa mitä puuttuville tiedoille rehellisesti pystyy tekemään, on poistaa havainnot, joissa on puuttuvia tietoja. Monissa vektorioperaatioissa on tätä varten optio na.rm:

> mean(sqrt(v2), na.rm=T)
[1] 1.036566

Tämä ei olisi auttanut log-funktiolle, sillä siinä tuloksena oli myös -Inf, jota R ei pitänyt puuttuvana tietona. Sen sijaan sekä NaN että NA käsitellään puuttuvina tietoina. Käyttäjän kannalta on usein yhdentekevää, onko tieto NaN vai Inf, sillä harvoin halutaan tulosta:

> logv2 <- log(v2)
Warning message:
NaNs produced in: log(x)
> mean(logv2, na.rm=T)
[1] -Inf

Vaikka NaN poistettiin, jäi -Inf jäljelle, joten keskiarvo oli -Inf. Tämä on joskus riesa, mutta on myös laskutoimituksia, jotka ovat määriteltyjä äärettömille suureille:

> exp(logv2)            ## exp(-Inf) = 0
[1] NaN   0   1   2   3

Looginen funktio is.na on tosi, jos alkio on puuttuva tieto. Looginen funktio is.finite taas on tosi jos alkio on äärellinen. Voimme siis poistaa puuttuvat tiedot (NA ja NaN) tai ei-äärelliset alkiot kirjoittamalla:

> logv2[!is.na(logv2)]  ## "!" on looginen negaatio
[1]      -Inf 0.0000000 0.6931472 1.0986123
> logv2[is.finite(logv2)]
[1] 0.0000000 0.6931472 1.0986123
> mean(logv2[is.finite(logv2)])
[1] 0.5972532

Laajemmin puuttuvien tietojen käsittelyyn käytetään funktioita na.action, na.omit ja na.fail.


Jari Oksanen 2003-01-21