I statistikk og sannsynlighetsteori møter vi to typer fordelinger: diskrete og kontinuerlige. Begge har sine egne spesifikasjoner for hvordan sannsynlighet og tetthet beregnes og tolkes. Diskrete variabler, som for eksempel antall suksesser i et binomisk eksperiment, har en sannsynlighet knyttet til hver enkelt hendelse. I kontinuerlige fordelinger, som den normale fordelingen, er det derimot tettheten som blir relevant når vi ønsker å beskrive sannsynligheten for et gitt utfall.

En kontinuerlig tilfeldig variabel kan anta et uendelig antall verdier innenfor et gitt intervall. Dette skaper en viktig forskjell i hvordan vi beregner sannsynlighet sammenlignet med diskrete tilfeller. Når man bruker en kontinuerlig fordeling som den normale, refererer vi ofte til dens tetthetsfunksjon (PDF) og kumulative fordelingsfunksjon (CDF) for å finne sannsynligheter.

La oss vurdere et eksempel med en normalfordeling hvor dataene representerer tidsmålinger i millisekunder, og vi har en kjent middelverdi 𝜇 og standardavvik 𝜎. Den matematiske formuleringen for sannsynligheten er ganske forskjellig fra det vi ser i diskrete distribusjoner. For kontinuerlige fordelinger gjelder det at sannsynligheten for at variabelen antar en nøyaktig verdi er null. Dette kan virke kontraintuitivt, men det er viktig å merke seg at i en kontinuerlig fordeling er det alltid en uendelig mengde mulige verdier, og dermed kan ikke sannsynligheten for en bestemt verdi eksistere. Sannsynligheten refererer i stedet til området under kurven mellom to verdier.

For å finne sannsynligheten for at en kontinuerlig tilfeldig variabel ligger innenfor et spesifisert intervall, bruker vi CDF-en. For eksempel, for å finne sannsynligheten for at en normalfordelt tilfeldig variabel ligger mellom 200 og 700 ms, kan vi bruke funksjonen pnorm() i R som beregner CDF-en:

r
pnorm(700, mean = 500, sd = 100) - pnorm(200, mean = 500, sd = 100)

Denne beregner sannsynligheten for at en tilfeldig valgt verdi fra denne distribusjonen vil ligge mellom 200 ms og 700 ms, gitt at den har en middelverdi på 500 ms og et standardavvik på 100 ms. Svaret i dette tilfellet er 0.976, som betyr at det er 97,6% sjanse for at et tilfeldig valgt tidsmål vil ligge mellom 200 ms og 700 ms.

Det er også viktig å merke seg at densitet og sannsynlighet i en kontinuerlig fordeling ikke er det samme. Funksjonen dnorm() gir oss tettheten ved en bestemt verdi. Dette forteller oss hvor "tykt" sannsynligheten er på et spesifikt punkt i distribusjonen, men det gir oss ikke sannsynligheten for å observere akkurat den verdien.

For eksempel, for å finne densiteten ved 1 og 2 i standard normalfordeling (som har en middelverdi på 0 og standardavvik på 1), kan vi bruke dnorm() i R:

r
dnorm(1, mean = 0, sd = 1)
dnorm(2, mean = 0, sd = 1)

Her vil vi få utdataene 0.242 for 1 og 0.054 for 2, som forteller oss at verdien 1 er mer sannsynlig å forekomme enn verdien 2, men det er viktig å forstå at disse verdiene ikke representerer sannsynligheten for å observere 1 eller 2, men heller tettheten på disse punktene. For å beregne den faktiske sannsynligheten for å observere et verdifall innenfor et intervall, må vi bruke CDF-en, som er den integrerte verdien av PDF-en.

Et annet viktig aspekt ved kontinuerlige fordelinger er kvantilene. Kvantiler deler en fordeling opp i ulike deler. For eksempel, hvis vi er interessert i å finne en verdi 𝑞 som har en sannsynlighet på 0.975 for at 𝑌 vil være mindre enn 𝑞, kan vi bruke funksjonen qnorm() i R:

r
qnorm(0.975, mean = 500, sd = 100)

Dette vil gi oss verdien 696, som betyr at det er 97,5% sannsynlighet for at et tilfeldig valgt tidsmål vil være mindre enn 696 ms i en normalfordeling med middelverdi 500 ms og standardavvik 100 ms.

Simulerte data kan også generere forskjellige statistiske mål. For eksempel, ved å bruke funksjonen rnorm() i R, kan vi generere et datasett og deretter beregne gjennomsnittet og standardavviket:

r
y <- rnorm(10, mean = 500, sd = 100) mean(y) sd(y)

Dette gir oss et tilfeldig datasett av 10 verdier trukket fra en normalfordeling, og vi kan beregne gjennomsnittet og standardavviket. Det er viktig å merke seg at de beregnede verdiene for gjennomsnitt og standardavvik ikke nødvendigvis samsvarer med de sanne verdiene for distribusjonen, spesielt hvis utvalget er lite.

Ved å bruke simulerte data kan vi også beregne kvantiler. For eksempel, vi kan finne de nedre og øvre 2,5% og 97,5% kvantilene, som representerer intervallet der 95% av de simulerte dataene vil falle:

r
quantile(y, probs = c(0.025, 0.975))

Ved å bruke slike metoder kan vi få innsikt i den statistiske variasjonen i datasettet og hvordan det forholder seg til den teoretiske fordelingen.

Det er essensielt å skille mellom sannsynlighet og tetthet i kontinuerlige fordelinger. Sannsynlighet refererer alltid til et intervall av verdier, mens tetthet refererer til verdienes relative "tykkelse" på en bestemt punkt. Begge disse begrepene er grunnleggende for å forstå og bruke kontinuerlige fordelinger på riktig måte, spesielt når man jobber med data i R.

Hvordan bruke Bayesianske regresjonsmodeller med Stan og brms i R

Bayesianske regresjonsmodeller tilbyr en kraftig tilnærming for å analysere data, spesielt når det er behov for å ta hensyn til usikkerhet i modellparametrene. Bruken av probabilistiske programmeringsspråk som Stan, sammen med R-pakkene som brms, gir forskere muligheten til å definere komplekse statistiske modeller uten å måtte håndtere de tekniske utfordringene ved prøvetaking direkte. Dette gjør at man kan fokusere mer på selve modellen og problemstillingen, mens mye av de underliggende beregningene håndteres av programvaren. Imidlertid krever dette at man lærer et nytt språk for å definere statistiske modeller, og en viss forståelse av prøvetakingsprosessen er nødvendig for å unngå konvergensproblemer og feilparametrisering (disse temaene vil bli behandlet mer detaljert i kapittel 9).

Enkelte R-pakker som rstanarm og brms tilbyr Bayesianske ekvivalenter av populære statistiske funksjoner som finnes i R, som for eksempel (g)lmer-funksjonen. Begge pakkene bruker Stan som bakgrunn for estimering og prøvetaking. En annen pakke, R-INLA, tilbyr en mer begrenset tilnærming til Bayesiansk inferens, men benytter en annen metode – integrert nestet Laplace-aproksimasjon (INLA) – i stedet for prøvetaking.

I denne delen av boken vil vi fokusere på brms, ettersom det kan være et nyttig verktøy for å gjøre en jevn overgang fra hyppighetsbaserte modeller til deres Bayesianske motparter. brms er kraftig nok til å møte behovene til mange kognitive vitenskapsmenn, og det har den fordelen at Stan-koden kan inspiseres ved hjelp av brms-funksjonene make_stancode() og make_standata(). Dette gir brukeren mulighet til å tilpasse modellene sine eller lære av koden som brms genererer internt for å gradvis gå over til å skrive modeller helt i Stan.

La oss nå se på et konkret eksempel: et finger-tapping-eksperiment. Dette eksperimentet består av at en deltaker ser på en skjerm og, etter å ha sett et kryss, trykker på mellomromstasten så raskt som mulig i 361 forsøk. Målet er å finne ut hvor lang tid det tar for denne deltakeren å trykke på tasten, og vi antar at denne prosessen kan modelleres med en normalfordeling.

Modellen for finger-tapping data

For å analysere tidene deltakerne bruker på å trykke på tasten, antar vi at det finnes en sann underliggende tid, μ (i millisekunder), som representerer hvor raskt deltakeren trykker på tasten. I tillegg antar vi at det er en viss støy i prosessen som er normalfordelt. Dette kan modelleres som følger:

  • Likelihood-funksjonen for hvert målpunkt tₙ er normalfordelt:
    tₙ ∼ Normal(μ, σ)

Her er tₙ den målte tidsverdien for hvert forsøk, μ er den underliggende tiden, og σ er standardavviket (som beskriver hvor mye variasjon det er i forsøkene).

Modellen kan også uttrykkes som:
tₙ = μ + εₙ, hvor εₙ er et tilfellig avvik som følger en Normal(0, σ).

For et hyppighetsbasert modell vil det å estimere μ være tilstrekkelig for å finne gjennomsnittstiden det tar å trykke på tasten. I R kan dette gjøres med lm()-funksjonen, som gir et maksimum-likelihood estimat av μ.

Men for en Bayesiansk modell, trenger vi å spesifisere priorer for parametrene. Vi antar at tiden for å trykke på tasten er positiv og mindre enn ett minutt (60 000 ms), men vi har ingen spesifikk kunnskap om hvilke verdier som er mer sannsynlige. For støyen, σ, antar vi at verdier under 2000 ms er like sannsynlige. Selv om slike priorer kan være upraktiske i virkelige analyser, bruker vi dem her av pedagogiske årsaker.

Bayesiansk regresjon med brms

For å implementere denne modellen i brms, bruker vi følgende kode i R:

r
fit_press <- brm(t ~ 1, data = df_spacebar, family = gaussian(),
prior = c(prior(uniform(0, 60000), class = Intercept, lb = 0, ub = 60000),
prior(uniform(0, 2000), class = sigma, lb = 0, ub = 2000)))

Dette spesifiserer en modell der t er den observerte finger-tapping tiden, og priorene for både μ (intercept) og σ (støy) er definert som uniforme distribusjoner. Når modellen er tilpasset, kan vi bruke den til å gjøre inferens om de ukjente parameterne, og vi kan undersøke resultatene for å forstå hvor lang tid det tar for deltakeren å trykke på tasten under forskjellige betingelser.

Visualisering og tolkning av resultater

Før vi begynner å tilpasse modellen, er det alltid en god idé å visualisere dataene. I dette tilfellet kan vi lage et histogram eller en tetthetskurve for å få en bedre forståelse av hvordan dataene er fordelt. Når vi visualiserer dataene, kan vi få innsikt i mulige skjevheter eller avvik som kan påvirke modellen vår, for eksempel at finger-tapping tidene kanskje ikke er helt normalfordelte, men heller har en lang hale mot høyre.

Det er viktig å merke seg at Bayesiansk modellering gir mer fleksibilitet enn hyppighetsbasert modellering. Gjennom valget av priorer kan vi inkorporere vår ekspertkunnskap og våre antagelser om dataene, noe som kan bidra til bedre estimater, spesielt når datamengden er liten eller usikkerheten er høy. Når modellen er estimert, gir Bayesiansk inferens oss også muligheten til å uttrykke resultatene i form av sannsynlighetsfordelinger, noe som gir en mer komplett forståelse av hva som er mulig eller sannsynlig, i motsetning til bare ett punktestimat.

I tillegg kan vi bruke posterior-simuleringer til å undersøke hvordan resultatene våre kan endres hvis vi justerer priorene eller antagelsene våre, og vi kan også vurdere usikkerheten i parameterne våre gjennom Bayesiansk kredibilitetsintervall, som gir et mål på usikkerhet i stedet for kun et vanlig konfidensintervall som i hyppighetsbaserte modeller.

Det er viktig å huske på at Bayesiansk modellering, selv om den er kraftig og fleksibel, ikke er en "magisk" løsning. Det krever nøye vurdering av valg av priorer, datakvalitet og modellens kompleksitet for å få pålitelige og meningsfulle resultater.