Forfatter av avsnitt: Jonathon Love

Kombinere jamovi og R

En stor fordel med jamovi er at det er bygget på toppen av det statistiske språket R. Det gjør det veldig enkelt å få tilgang til R fra jamovi, og til jamovi fra R. Syntaksmodusen, Rj, jmvconnect og jmvReadWrite hjelper deg med å oppnå det.

Syntaksmodus

jamovi tilbyr en «R Syntax Mode». I denne modusen produserer jamovi R-kode for hver analyse. For å bytte til syntaksmodus, velg programmenyen (⋮) øverst til høyre i jamovi, og merk av for Syntax mode der. Det er mulig å gå ut av syntaksmodus ved å klikke av markeringen.

I syntaksmodus fortsetter analyser å fungere som før, men nå produserer de R-syntaks. Som alle resultatobjekter i jamovi, kan du høyreklikke på disse elementene (inkludert R-syntaksen) og kopiere og lime dem inn, for eksempel i en R-sesjon. Alle analysene som er inkludert i jamovi er tilgjengelige i en R-sesjon gjennom R-pakken jmv.

Den medfølgende R-syntaksen inkluderer ikke dataimport-trinnet, men dette kan enkelt gjøres ved å bruke R-pakkene jmvconnect og jmvReadWrite (forklart mer detaljert nedenfor). Med jmvReadWrite kan du lese og skrive jamovi-datafiler (.omv) i R, og med jmvconnect kan du få tilgang til datasett som du har åpnet i jamovi-økten din, fra R.

Rj-editor

Rj Editor kan brukes til å analysere data ved bruk av R direkte i jamovi. På denne måten kan du også bruke de R-pakkene du liker best fra jamovi. Rj ` er en av de mange tillegsmodulene for jamovi (se Installer moduler i jamovi).

um_Rj1

Det er mange grunner for å bruke R-kode: Det finnes mange analyser tilgjengelig i R-pakker som (ennå) ikke er gjort tilgjengelige som jamovi-moduler, og Rj lar deg bruke disse analysene fra jamovi. I tillegg kan du bruke sløyfer og if-setninger, noe som blant annet muliggjør gjentatte analyser, betingede analyser og simuleringsstudier.

For noen vil bruk av R i et regneark være et ideelt sted å begynne å lære R. For andre kan det være en enkel måte å dele R-analyser med kolleger som ikke har avansert teknisk kunnskap (og noen foretrekker rett og slett å bruke kode).

For å kjøre en R-analyse velger du Rj Editor fra R-ikonet i båndet Analyser. Da får du opp redigeringsprogrammet der du kan skrive inn R-koden. Datasettet du har åpnet i jamovi, er tilgjengelig for deg som en data.frame som data. For å komme i gang kan du kjøre descriptives på det.

um_Rj2

Eller hvis du foretrekker dplyr-tilnærming, kan du skrive:

library(jmv)
library(dplyr)
library(magrittr)

select(data, 1:3) %>% descriptives()

Du vil legge merke til at Rj automatisk foreslår funksjonsnavn når du skriver inn denne koden. For å kjøre koden klikker du på den grønne trekanten eller trykker Control + Shift + Enter (eller ⌘ + Shift + Enter hvis du bruker Mac). jamovi kjører da R-koden, og resultatene vises i resultatpanelet på samme måte som andre analyser. Du kan fortsette å gjøre endringer i koden, og deretter kjøre den på nytt.

Som standard bruker Rj versjonen av R som følger med jamovi. Denne inneholder mange pakker (jmv og alle dens avhengigheter), og vil være tilstrekkelig for de fleste. Hvis du trenger å gjøre bruk av ytterligere R-pakker, må du bruke System R versjonen. Hvis du velger ⚙ (øverst til høyre i kodeboksen), vil du se et alternativ for å endre R version som brukes. Versjonen System R bruker den versjonen av R som du har installert på systemet ditt. Dette har den fordelen at R-koden din nå har tilgang til alle pakkene du har installert for den versjonen av R. Det siste du trenger er å ha R-pakken jmvconnect installert i R-biblioteket på systemet ditt.

R-pakken jmvconnect

R-pakken jmvconnect gir R-versjonen på systemet ditt tilgang til jamovi-datasettene. Du kan installere den i R med:

install.packages('jmvconnect')

Når dette er gjort, skal det være problemfritt å gå fra jamovi R til System R.

Det er verdt å huske at det blir litt mer komplisert å dele jamovi-filer med kolleger når du bruker System R-versjonen. Hvis de ønsker å gjøre endringer og kjøre analysene dine på nytt, må de ha de samme R-pakkene installert som ble brukt i disse analysene - det er prisen for fleksibilitet!

Når Rj kjører R kode, gjør den som standard hele datasettet tilgjengelig som en dataramme kalt data. Det er imidlertid sannsynlig at analysen din bare bruker noen få kolonner, og ikke trenger hele datasettet. Du kan begrense kolonnene som gjøres tilgjengelige for analysen, ved å inkludere en spesiell kommentar øverst i skriptet på følgende måte:

# (column1, column2, column3)

library(jmv)

...

I dette tilfellet vil bare de navngitte kolonnene vises i datarammen. Dette kan gjøre analysen raskere, særlig hvis du jobber med store datasett. I tillegg får jamovi beskjed om at analysen bare bruker disse kolonnene, og analysen trenger ikke å kjøres på nytt hvis det gjøres endringer i andre kolonner.

Det kan hende at du ønsker å gå over til en R-sesjon for å analysere et datasett. Det er her R-pakken jmvconnect kommer til nytte. Med jmvconnect kan du lese datasettene fra en jamovi-instans som kjører, til en R-sesjon. Den har to funksjoner: what() viser de tilgjengelige datasettene, og read() leser dem. Du kan for eksempel bruke:

> library(jmvconnect)
> what()

 Available Data Sets
 ─────────────────────────────────────
         Title           Rows    Cols
 ─────────────────────────────────────
    1    iris             150       5
    2    Tooth Growth      60       3
 ─────────────────────────────────────

og deretter lese datasettet med en av disse to kommandoene:

data <- read('Tooth Growth')
data <- read(2)

R-pakken jmvReadWrite

R-pakken jmvReadWrite leser og skriver jamovi-datafiler (.omv) i R. Den kan installeres med:

install.packages('jmvReadWrite')

Et typisk bruksområde er hvis du ønsker å behandle et stort antall resultatfiler (f.eks. CSV-filer fra flere deltakere i et eksperiment eller med svar fra ulike spørreskjemaer). Det er ofte enklest å behandle slike store datamengder i R. Når du har satt sammen datasettet ditt fra disse filene, kan du skrive det ved hjelp av write_omv()-funksjonen.

library(jmvReadWrite)

# assemble your data set (named dtaSet)...

write_omv(dtaSet, "FILENAME.omv")

På samme måte tillater read_omv-funksjonen å lese jamovi-datafiler inn i R. Et annet typisk bruksområde er å lese en datafil, gjøre manipulasjoner ved dataene som for tiden ikke er implementert i jamovi, og deretter skrive tilbake den modifiserte filen (i jamovi-filformatet).

library(jmvReadWrite)

dtaSet <- read_omv("FILENAME.omv")

# do some modifications to your data set

write_omv(dtaSet, "FILENAME.omv")

I tillegg finnes det en del hjelpefunksjoner i jmvReadWrite. Disse muliggjør operasjoner som omorganisering av kolonnene / variablene i et datasett (arrange_cols_omv), konvertering av en større mengde datafiler til jamovi-filformatet (convert_to_omv; f.eks. fra et statistikkprogramvare du tidligere har brukt), konvertere datafiler fra long- til wide-format (long2wide_omv) og fra wide- til long-format (wide2long_omv), legge til kolloner fra andre datasett (merge_cols_omv), legge til deltakere fra et annet datasett (merge_rows_omv), eller sortere et datasett etter en eller flere variabler (sort_omv).

Et annet mulig bruksområde for read_omv er oppretting av R markdown-filer med resultatene av jamovi-analysene dine. Parameteren getSyn avgjør om syntaksen til analysene i filen skal hentes ut. For å kjøre syntaksen må R-pakken jmv være installert. Hvis du ønsker å arbeide med resultatene i etterkant, anbefales det at du tilordner dem til en variabel (se den andre eval nedenfor). Tabeller fra resultatene kan konverteres til en data frame med funksjonen asDF (f.eks. result$main$asDF).

library(jmvReadWrite)
library(jmv)

data <- read_omv("FILENAME.omv", getSyn = TRUE)

# the analyses are stored in the attribute syntax
attr(data, "syntax")

# with using an index, the n-th analysis can be accessed (first line)
# and run / evaluated (second line)
attr(data, "syntax")[[1]]
eval(parse(text = attr(data, "syntax")[[1]]))

# often it is more useful to assign the results to a variable when
# running analyses and later on use the contents of that variable
eval(parse(text = paste0("result = ", attr(data, "syntax")[[2]])))
names(result)
# (returns the names of the output elements - tables, figures, and
# groups: sub-headings, e.g., Estimated Marginal Means in an ANOVA,
# that contain further tables and figures)