Aineiston perustarkistukset

Jokaisessa tutkimushankkeessa on hyvä sopia omat periaatteet ruoankäyttöaineistojen tarkistukseen. Tutkimuskysymys vaikuttaa siihen, mitä ja miten tarkistetaan. Perustarkistukset on kuitenkin syytä tehdä aina. Energiansaanti tarkistetaan aina ja ravintoaineista tarkistetaan ne, joista on aikomus raportoida tuloksia.

Ensin tarkistetaan ovatko energian ja ravintoaineiden saannin tunnusluvut (esim. keskiarvot) odotusten mukaiset. Seuraavaksi poimitaan aineistosta tutkittavat, joilla on pienimmät ja suurimmat saannit (esim. jakauman 5-10 pienintä ja 5-10 suurinta arvoa). Nämä listat käydään läpi kohta kohdalta ja palataan laskentaohjelmaan tarkistamaan, johtuuko poikkeuksellisen suuri tai pieni saanti jostakin virheestä. Usein ääriarvoille löytyy luonnollinen selitys ja niille ei tarvitse tehdä mitään.

Mahdollisia virhelähteitä:

  • tallennusvirhe
  • virhe reseptin ainesosien suhteissa
  • virhe reseptin haihtumishävikki- tai ravintoaineen kypsennyshävikkikertoimessa
  • virhe elintarvikkeen koostumustiedoissa

Energian ja ravintoaineiden saantien perustarkistus

Alla on esimerkki tarkistuslistojen tekemisestä R:llä.

Tee AivoDietissä laskenta saantitasolla. Avaa se Excelissä ja tallenna .csv-muodossa. Lue data sisään R-ohjelmaan:

perustarkistus 2a

Kuvailevat tunnusluvut kaikista aineiston muuttujista:

summary(saantidata)

Ääriarvojen tarkastelu:

#luodaan tulostiedosto.
sink("Z:/MyDocuments/blogi/saanti/min_ja_max_170307.txt")

#tehdään listat: energiansaannin 5 suurinta ja 5 pienintä arvoa, id ja päivämäärä.
myvars <- c("ID_child", "DaDate", "ENERJ")
ENERJd <- saantidata[myvars]

print("max")
ENERJ_outliers <- ENERJd[order(ENERJd$ENERJ, decreasing = T),]
head(ENERJ_outliers, n=5)

print("min")
ENERJ_outliers <- ENERJd[order(ENERJd$ENERJ, decreasing = F),]
head(ENERJ_outliers, n=5)

#tehdään listat: proteiininsaannin 5 suurinta ja 5 pienintä arvoa, id ja päivämäärä.
myvars <- c("ID_child", "DaDate", "PROT")
PROTd <- saantidata[myvars]

print("max")
PROT_outliers <- PROTd[order(PROTd$PROT, decreasing = T),]
head(PROT_outliers, n=5)

print("min")
PROT_outliers <- PROTd[order(PROTd$PROT, decreasing = F),]
head(PROT_outliers, n=5)

#suljetaan tulostiedosto.
sink()

Tulostiedosto näyttää tältä:

tarkistus min ja max e

Viimeksi päivitetty 7.3.2017

Tulokset elintarvikeluokittain: 1. alkuvalmistelut

AivoDiet-ohjelman ruokalajitason outputissa on oma rivi jokaisen tutkittavan jokaista ruokakoodia varten. Analyyseja varten aineisto pitää muuntaa sellaiseen muotoon, jossa jokaisella tutkittavalla on vain yksi rivi ja jokaisella ruokakoodilla on oma sarake. Sen jälkeen voi laskea esimerkiksi eri elintarvikeluokkien käyttömäärien keskiarvoja tai tarkastella, mitkä elintarvikeluokat ovat jonkin ravintoaineen tärkeimmät läheet.

Aineiston, jossa jokaisella tutkittavalla on vain yksi rivi, voi muodostaa pivotoimalla. Jos kyseessä on pieni aineisto, voit tehdä tämän vaiheen Excelin Pivot-toiminolla. Jos sinulla on suuri aineisto, Excel ei suoriudu tästä toiminnosta ja pivotointi kannattaa tehdä R-ohjelmalla (tai vastaavalla).

Alkuvalmistelut

Aluksi luetaan ruokalajitason aineisto sisään:

#luetaan data sisään
rldata = read.csv("Z:/MyDocuments/blogi/ruokalaji/blogi_ruokalajitaso_161209.csv", sep=";", header = T)

#tarkistetaan, että kaikki näyttää hyvältä
head(rldata, n=10)

#vaihdetaan IvName-muuttujan nimeksi id.
names(rldata)[names(rldata)=="IvName"] <- "ID_child"

Korvataan puuttuvat arvot nollilla energian ja ravintoaineiden saannin muuttujissa.

#Aivodietin outputissa ensimmäinen saantimuuttuja on vasemmalta lukien järjestysnumeroltaan 22. 

#Tässä esimerkkidatassa korvataan puuttuvat arvot nollilla muuttujissa 22-79.
rldata[,22:79][is.na(rldata[,22:79])] <- 0

head(rldata, n=10)

Ennen pivotointia aineiston kaikki ruokakoodit muutetaan kirjaimella alkaviksi. Pivotoinnissa ruokakoodien nimistä tulee muuttujien nimiä. R-ohjelma ei kuitenkaan hyväksy numerolla alkavia muuttujien nimiä.

#lisätään d-kirjan ruokakoodien eteen
rldata$Code <- paste("d", rldata$Code, sep="")

Viimeksi päivitetty 16.3.2017

Tulokset elintarvikeluokittain: 2. pivotointi R-ohjelmalla

Pivot-toiminolla luodaan aineisto, jossa tutkittavaa varten on vain yksi rivi, ja sarakkeina on ruokakoodit. Näitä tiedostoja luodaan useita: yksi grammamäärille, yksi energialle ja yksi jokaiselle kiinnostuksen kohteena olevalle ravintoaineelle. Alla on esimerkit grammamäärille ja energialle.

Elintarvikeluokkien käyttömäärä grammoina

Tee alkuvalmistelut. Poimi aineistosta muuttujat ID_child, CoWeight (ruoan paino grammoina) ja Code:

myvars <- c("ID_child", "CoWeight", "Code")
CoWeightdata <- rldata[myvars]

head(CoWeightdata, n=2)

Tee pivotointi:

#otetaan käyttöön reshape-kirjasto.
library(reshape)

#tehdään pivot muuttujalle CoWeight.
mCoWeightrldata<- melt(CoWeightdata, id=c("Code", "ID_child"))

rldataCoWeightsum <- cast(mCoWeightrldata, ID_child ~ Code + variable, sum, margins=c("grand_col"))

#muutetaan (all)_(all) nimisen muuttujan nimeksi all_CoWeight.
names(rldataCoWeightsum)[names(rldataCoWeightsum)=="(all)_(all)"] <- "all_CoWeight"

names(rldataCoWeightsum)

#tehdään tiedostosta .txt-muotoinen.
write.table(rldataCoWeightsum, "Z:/MyDocuments/blogi/ruokalaji/rldataCoWeightsum.txt", sep="\t", col.names=NA)

Energia

Energia (tai mikä tahansa ravintoaine) käsitellään samalla tavoin kuin muuttuja CoWeight. Poimi aineistosta muuttujat ID_child, ENERJ ja Code.

myvars <- c("ID_child", "ENERJ", "Code")
ENERJdata <- rldata[myvars]

head(ENERJdata, n=2)

Tee pivotointi:


#tehdään pivot muuttujalle ENERJ.
mENERJrldata<- melt(ENERJdata, id=c("Code", "ID_child"))

rldataENERJsum  <- cast(mENERJrldata, ID_child ~ Code + variable, sum, margins=c("grand_col"))

#muutetaan (all)_(all) nimisen muuttujan nimeksi all_ENERJ.
names(rldataENERJsum)[names(rldataENERJsum)=="(all)_(all)"] <- "all_ENERJ"

names(rldataENERJsum)

#tehdään tiedostosta .txt-muotoinen.
write.table(rldataENERJsum, "Z:/MyDocuments/blogi/ruokalaji/rldataENERJsum.txt", sep="\t", col.names=NA)

Voit avata uudet .txt-muotoiset tiedostot Excelissä ja tarkistaa, että kaikki on kunnossa.

Viimeksi päivitetty 27.3.2017