RVTU ülesöömise väidete IRT analüüs 28.03.2025

Ülesöömise väited

Kood
vaited <- key(L, NAME %in% paste0("L1EAT",1:5))[, c("NAME", "LAB", "LEVELS")]
vaited$LAB <- gsub("23. Järgnevalt soovime teada saada, kui suurt rolli on mänginud toit ja söömine Teie elus viimase kolme (3) kuu jooksul.","", vaited$LAB, fixed=TRUE)
qflextable(vaited)

NAME

LAB

LEVELS

L1EAT1

[Kas Te olete veetnud märkimisväärselt palju aega kehakaalust ja toidust mõeldes]

1:ei|2:jah

L1EAT2

[Kas Te olete viimase kolme kuu jooksul oma toitumist märkimisväärselt piiranud]

1:ei|2:jah

L1EAT3

[Kas Teil on viimase kolme kuu jooksul esinenud söömishoogusid, mil sõite tavalisest suurema toidukoguse]

1:ei|2:jah

L1EAT4

Kas nende söömishoogude ajal olete tundnud, et Te ei suuda oma söömist kontrollida?                                                                                      

1:ei|2:jah

L1EAT5

Kas olete viimase kolme kuu jooksul oma kehakaalu kontrollimiseks tahtlikult oksendanud, kasutanud lahtisteid või söögiisu vähendavaid preparaate?

1:ei|2:jah

Eeltöötlus

Kood
eat1 <- L[, paste0("L1EAT", 1:5)]
names(eat1) <- paste0("e", 1:5)
keep1 <- rowSums(!is.na(eat1))>0
eat1x <- eat1[keep1,]

eat1$e34 <- ifelse(eat1$e3 %in% 1, eat1$e3, eat1$e4+1)
eat1$e4[!is.na(eat1$e3) & !eat1$e4 %in% 1:2] <- 1
eat1a <- eat1[, 1:5]
eat1 <- eat1[, c("e1", "e2", "e34", "e5")]


eat2 <- L[, paste0("L2EAT", 1:5)]
names(eat2) <- paste0("e", 1:5)
eat2$e34 <- ifelse(eat2$e3 %in% 1, eat2$e3, eat2$e4+1)
eat2$e4[!is.na(eat2$e3) & !eat2$e4 %in% 1:2] <- 1
eat2a <- eat2[, 1:5]
eat2 <- eat2[, c("e1", "e2", "e34", "e5")]

eat3 <- L[, paste0("L3EAT", 1:5)]
names(eat3) <- paste0("e", 1:5)
eat3$e34 <- ifelse(eat3$e3 %in% 1, eat3$e3, eat3$e4+1)
eat3$e4[!is.na(eat3$e3) & !eat3$e4 %in% 1:2] <- 1
eat3a <- eat3[, 1:5]
eat3 <- eat3[, c("e1", "e2", "e34", "e5")]

Enne analüüse tuleb kuidagi toime tulla 3. ja 4. väite sõltuvusega: 4. väide esitati ainult neile, kes vastasid 3. väitele jaatavalt. Lähtume eeldusest, et kõik, kes vastasid 3. küsimusele eitavalt, oleksid vastanud eitavalt ka 4. küsimusele - st vastajatel, kellel ei ole esinenud söömishooge, ei ole esinenud ka kontrollikaotusega söömishooge. Seega asendame kõigil, kes 3. küsimusele vastasid eitavalt, 4. küsimuse väärtuse NA väärtusega 1 (= ei).

Kood
table(uus=eat1a$e4, vana=L$L1EAT4, exclude=NULL)[1:2,]  |> unclass() |> as.data.frame() |> flexit()

X.

X1

X2

NA.

1

657

0

4 068

2

0

725

0

Teine võimalus on kombineerida 3. ja 4. väide üheks tunnuseks, kus

  • 1 = ei ole esinenud söömishoogusid
  • 2 = on esinenud söömishooge, kuid ilma kontrollikaotuseta
  • 3 = on esinenud söömishooge ja kontrolli kaotamise tunne
Kood
t1 <- unclass(table(e34=eat1$e34, e3=L$L1EAT3))
t2 <- unclass(table(e34=eat1$e34, e4=L$L1EAT4, exclude=NULL)[1:3,])
tbl <- data.frame(E34=1:3, cbind(t1, NA, t2))
names(tbl) <- c("e34", "e3=1", "e3=2", " ", "e4=1", "e4=2", "e4<NA>")
qflextable(tbl)

e34

e3=1

e3=2

e4=1

e4=2

e4<NA>

1

4 063

0

0

0

4 063

2

0

657

657

0

0

3

0

725

0

725

0

Eeldused jm 1. laine andmetel

Dimensionaalsus ja IRT mudeli valik

Võrdleme dimensionaalsuse kontrolliks 1- ja 2-mõõtmelist mirt (2PL) mudelit:

Kood
load("2025-03-28-precomputed.rda")
# eat1ax <- na.omit(eat1)
# m1 <- mirt(eat1ax, model=1, itemtype="graded", calcNull=TRUE)
# m2 <- mirt(eat1ax, model=2, itemtype="graded", calcNull=TRUE, technical  =list(NCYCLES=c(10000, 2000)))
# Iteration: 2559, Log-Lik: -9582.269, Max-Change: 0.00008
anova(m1, m2) |> flexit()

X.

AIC

SABIC

HQ

BIC

logLik

X2

df

p

m1

19 251.19

19 281.96

19 271.92

19 310.56

-9 616.595

m2

19 188.54

19 229.57

19 216.17

19 267.70

-9 582.269

68.651

3

0

Andmed on selgelt vähemalt kahemõõtmelised (kahefaktoriline eksploratiivne mudel sobitub andmetega paremini kui ühemõõtmeline).

Eksploratiivse kahemõõtmelise mudeli puhul on faktorstruktuur selline:

Kood
smm2 <- summary(m2, verbose=FALSE)
cbind(smm2$rotF, smm2$h2) |> flexit()

X.

F1

F2

h2

e1

0.543

0.406

0.655

e2

0.988

-0.076

0.914

e34

-0.015

0.974

0.935

e5

0.532

0.288

0.503

Korrelatsioon faktorite vahel (oblimin) r= 0.45.

Mudelite sobitusastme näitajad:

Kood
data.frame(m=c("One factor", "Two factors"), rbind(fitses(m1,3), fitses(m2,3))) |> qflextable()

m

RMSEA

CFI

TLI

BIC

AIC

One factor

0.038

0.945

0.929

19 310.56

19 251.19

Two factors

0.027

0.978

0.964

19 267.70

19 188.54

Kuigi kahefaktoriline mudel on “oluliselt” parem, siis on ka ühefaktorilise mudeli sobitusastme näitajad täiesti aktsepteeritavad. Lisaks: eesmärk on eelkõige leida 5 söömispatoloogia küsimuse ühisosa, mitte kõigi nüansside modelleerimine.

Sisuliselt samasuguse mudeli saab teha andmestikuga, kus on säilitatud kõik 5 küsimust eraldi dihhotoomisete tunnustega ja 4. küsimuse puuduvad andmed on asendatud vastavalt eespool kirjeldatud skeemile. Sel juhul tuleb arvestada, et 3. ja 4. küsimuse vahel on meetodist (sh küsimuse esitamise viisist) tulenev sõltuvus, mida mudel ei tohiks ignoreerida. Kinnitavas faktoranalüüsis võiks seda kujutada 3. ja 4. tunnuse korreleeritud jääkidena. IRT mudelis (kasutades mirt paketti) on võimalus kujutada sisuliselt sama seost “nuditud” bifaktori mudeli abil, kus lisaks üldfaktorile (mis on seotud kõgi 5 küsimusega) on ainult üks spetsiifiline faktor, millel on laadungid ainult 3. ja 4. tunnusel. Selline bifaktori mudel on sisuliselt samaväärne mudeliga, kus on lubatud korrelatsioon 3. ja 4. tunnuse jääkide vahel (nt saranselt jääkkorrelatsiooniga on spetsiifiline faktor sõltumatu üldfaktorist).

Kood
ldgs(mbf,3) |> qflextable()

G

F1

h2

e1

0.992

0.000

0.983

e2

0.675

0.000

0.456

e3

0.584

0.808

0.993

e4

0.673

0.737

0.997

e5

0.700

0.000

0.490

Võrdleme bifaktori mudeli puhul erinevaid IRT parametriseeringuid: ühe- ja kaheparameetrilist logistilist mudelit, alumise või ülemise asümptoodiga kolmeparameetrilist mudelit ning neljaparameetrilist mudelit.

Kood
anova(mbf_rasch, mbf, mbf_3pl, mbf_3plu, mbf_4pl) |> flexit()

X.

AIC

SABIC

HQ

BIC

logLik

X2

df

p

mbf_rasch

19 825.45

19 849.39

19 841.57

19 871.64

-9 905.726

mbf

19 246.98

19 288.02

19 274.61

19 326.15

-9 611.488

588.475

5

0.00

mbf_3pl

19 241.95

19 300.10

19 281.10

19 354.12

-9 603.976

15.025

5

0.01

mbf_3plu

19 240.45

19 298.60

19 279.60

19 352.62

-9 603.227

1.499

0

mbf_4pl

19 247.98

19 323.22

19 298.64

19 393.13

-9 601.988

2.477

5

0.78

Üheparameetriline mudel on selgelt ebapiisav - st ei saa eeldada, et küsimused erinevad ainult raskusastme poolest. 3- ja 4-parameetrilised mudelid on log tõepära alusel 2PL mudelist paremad, kuid BIC ja SABIC (mis “karistavad” mudelit lisaparameetrite eest rohkem kui nt AIC) on kõige väiksemad 2PL mudelil.

Lõpuks: bifaktori mudelite sobitusastme näitajad:

Kood
data.frame(model=c("1PL", "2PL", "3PL", "3PLu", "4PL"), rbind(fitses(mbf_rasch,3), fitses(mbf,3), fitses(mbf_3pl, 3), fitses(mbf_3plu,3), fitses(mbf_4pl, 3))) |> qflextable()

model

RMSEA

CFI

TLI

BIC

AIC

1PL

0.070

0.851

0.838

19 871.64

19 825.45

2PL

0.024

0.986

0.981

19 326.15

19 246.98

3PL

0.025

0.989

0.979

19 354.12

19 241.95

3PLu

0.025

0.989

0.979

19 352.62

19 240.45

4PL

0.032

0.988

0.966

19 393.13

19 247.98

Lokaalse sõltumatuse eeldus

Chen ja Thissen (1997) G2-statistik, mis nullhüpoteesi korral (st kui lokaalset sõltuvust ei esine = lokaalse sõltumatuse eeldus on täidetud) käitub nagu χ2-jaotus 1 vabadusastmega. Seega peaksime muretsema, kui mõne väitepaari vahel on G2 suurem kui 3.8414588 (5% olulisuse nivoo korral) või 6.6348966 (kasutades 1% olulisuse nivood).

Kood
residuals(m1, type="LDG2", verbose=FALSE, approx.z=!TRUE) |> (\(x) ("[<-"(x, upper.tri(x), NA)))() |> flexit()

X.

e1

e2

e34

e5

e1

e2

0.619

e34

37.832

19.020

e5

4.058

6.492

7.68

Kood
residuals(mbf, type="LDG2", verbose=FALSE, approx.z=!TRUE) |> (\(x) ("[<-"(x, upper.tri(x), NA)))() |> flexit()

X.

e1

e2

e3

e4

e5

e1

e2

0.475

e3

1.049

10.987

e4

1.206

12.614

0.380

e5

4.366

5.981

0.679

2.535

See tähendab, et lokaalse sõltumatuse eeldus ei ole päriselt täidetud. Bifaktori mudeli puhul on kõige suuremad jääkkorrelatsioonid 2. ning 3. ja 4. küsimuse vahel. Seda olukorda saaks parandada nii, et lisada bifaktori mudelis ka 2. küsimus spetsiifilise faktori indikaatoriks. Sellise mudeli faktorstruktuur:

Kood
ldgs(mbf2,3) |> flextable()

G

F1

h2

e1

0.840

0.000

0.705

e2

0.802

-0.369

0.779

e3

0.717

0.688

0.988

e4

0.767

0.639

0.998

e5

0.718

0.000

0.515

… ja jäägid

Kood
residuals(mbf2, type="LDG2", verbose=FALSE, approx.z=!TRUE) |> (\(x) ("[<-"(x, upper.tri(x), NA)))() |> flexit()

X.

e1

e2

e3

e4

e5

e1

e2

0.006

e3

0.277

0.343

e4

0.956

2.225

0.664

e5

0.514

0.322

1.612

0.395

… ja mudeli sobitusastme indeksid

Kood
data.frame(model=c("Algne", "Täiendatud"), rbind(fitses(mbf,3), fitses(mbf2, 3))) |> qflextable()

model

RMSEA

CFI

TLI

BIC

AIC

Algne

0.024

0.986

0.981

19 326.15

19 246.98

Täiendatud

0.014

0.995

0.993

19 294.34

19 208.56

St kui lubada 2. väite laadung spetsiifilisel faktoril, siis mudeli sobitusaste paraneb ning lokaalse sõltumatuse eeldust ei saa enam ümber lükata.

Kood
anova(mbf, mbf2) |> flexit()

X.

AIC

SABIC

HQ

BIC

logLik

X2

df

p

mbf

19 246.98

19 288.02

19 274.61

19 326.15

-9 611.488

mbf2

19 208.56

19 253.03

19 238.50

19 294.34

-9 591.281

40.415

1

0

(See muudab natuke spetsiifilise faktori sisu: nüüd on liigsöömine vastandatud söömise piiramisele. Üldfaktori sisu muutub ka natuke: kõigi väidete kaalud muutuvad võrdsemaks.)

DIF

Esialgu jätaks selle teema välja - või siis käsitleks ühefaktorilise mudeli põhjal.

Kood
#https://pmc.ncbi.nlm.nih.gov/articles/PMC5505278/pdf/nihms855890.pdf
#https://search.r-project.org/CRAN/refmans/difR/html/difLogistic.html
#https://pmc.ncbi.nlm.nih.gov/articles/PMC2924271/

IRT mudelid

Ühefaktorilised mudelid: tabelis on eristusvõime parameeter a ja raskusastme parameeter b (klassikaline IRT parametriseering)

Kood
cm1 <- coef(m1, IRTpar=TRUE, simplify=TRUE)
L2m1 <- mirt(eat2, itemtype="graded", verbose=FALSE)
cm2 <- coef(L2m1, IRTpar=TRUE, simplify=TRUE)
L3m1 <- mirt(eat3, itemtype="graded", verbose=FALSE)
cm3 <- coef(L3m1, IRTpar=TRUE, simplify=TRUE)
cm123 <- cbind(cm1$items[,1:3], " "=NA,  cm2$items[,1:3], "   " = NA, cm3$items[,1:3]) 
cm123 <- roundif(data.frame(" " = rownames(cm123), cm123),3)
names(cm123)<- c(" ", "L1_a", "L1_b", "L1_b2", "  ", "L2_a", "L2_b", "L2_b2", "   ", "L3_a", "L3_b", "L3_b2")

 qflextable(cm123 )

L1_a

L1_b

L1_b2

L2_a

L2_b

L2_b2

L3_a

L3_b

L3_b2

e1

11.437

0.441

13.459

0.465

10.207

0.496

e2

1.542

1.336

1.636

1.305

1.421

1.515

e34

1.329

1.057

1.804

1.414

1.137

1.802

1.314

1.093

1.844

e5

1.654

3.168

2.060

2.746

1.781

3.077

Bifaktori mudelite faktorlaadungid.

Kood
ldngs <- function(x, pfx=NULL) {
  s <- summary(x, verbose=FALSE)
  res <- data.frame(s$rotF, s$h2)
  if(!is.null(pfx)) names(res) <- paste(pfx, names(res), sep="_")
  res
}
df <- data.frame("     "=names(eat1a), ldngs(mbf, "L1"), " "=NA, ldngs(L2mbf, "L2"), "  "=NA, ldngs(L3mbf, "L3"), check.names=FALSE)
In <- sapply(df, is.numeric)
df[, In] <- lapply(df[,In], function(x) ifelse(x==0, NA, x))
qflextable(roundif(df,3))

L1_G

L1_F1

L1_h2

L2_G

L2_F1

L2_h2

L3_G

L3_F1

L3_h2

e1

0.992

0.983

0.992

0.983

0.990

0.980

e2

0.675

0.456

0.697

0.486

0.645

0.416

e3

0.584

0.808

0.993

0.614

0.785

0.994

0.584

0.809

0.995

e4

0.673

0.737

0.997

0.681

0.729

0.996

0.663

0.746

0.996

e5

0.700

0.490

0.784

0.615

0.724

0.524

1F ja BF mudelite võrdlus

Korrelatsioonid ühefaktorilise mudeli ja BF mudeli üldfaktori skoori vahel (EAP = expected a posteriori).

Kood
# * Vahemärkus. Miks on BF mudeli üldfaktori skoorid korreleeritud spetsiifiliste faktorite skooridega, on omaette küsimus. See on ilmselt expected a posteriori meetodi omapära. Mudelis on need faktorid üksteisest sõltumatud. Sõltumatud skoorid saame siis, kui kasutada meetodina "plausible" (sarnane nt PISA-testi plausible values teemaga), aga sel juhul tekivad mõned probleemid. Aga EAP meetod on skoorimise jaoks lihtsam (seda on ka sarnases valdkonnas kasutatud nt https://jpro.springeropen.com/articles/10.1186/s41687-022-00464-9), tõenäoliste väärtuste meetod annab iga kord erineva tulemuse (!) ja seetõttu tuleks iga analüüs läbi teha mitu korda (PISA soovituse järgi 10 korda, kuid vt ka https://pmc.ncbi.nlm.nih.gov/articles/PMC6425093/, mis ütleb, et miinimum on 20) ja raporteerida tulemuste keskmine. Tüütu. Teine huvitav asi on, et "plausible" skoorid on päriselt ka normaaljaotusega. # hist(fscores(mm2cbf, method="plausible")[,1]) 

# Plausible values kohta vt veel:
# 
# * https://link.springer.com/chapter/10.1007/978-3-030-47515-4_3
# 
# * https://ierinstitute.org/fileadmin/Documents/IERI_Monograph/Volume_2/IERI_Monograph_Volume_02_Chapter_01.pdf
# 
# * https://www.edmeasurementsurveys.com/IRT/Ch14.html

Võrdleme lihtsa ühefaktorilise mudeli (mudel1) ja esimese bifaktori mudeli (mudel 2 - spetsiifilisele faktorile laaduvad küsimused 3 ja 4) skoore.

Kood
es1 <- fscores(m1, response.pattern=eat1, method="EAP")
es1a <- fscores(mbf, response.pattern=eat1a, method="EAP")
# ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
es1b <- fscores(mbf2, response.pattern=eat1a, method="EAP")
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cor.test(es1[,1], es1a[,1])

    Pearson's product-moment correlation

data:  es1[, 1] and es1a[, 1]
t = 1735.7, df = 5500, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.9990390 0.9991354
sample estimates:
      cor 
0.9990885 
Kood
plot(es1[,1], es1a[,1], xlab="Model 1 (1-factor)", ylab="Model 2 (bifactor)")
abline(lsfit(es1[,1], es1a[,1]), col="red")
text(-0.5, 2, "r=0.999")

Nüüd võrdleme esimese ja teise bifaktori mudeli skoore (mudel 2 vs. mudel 3 - esimeses on spetsiifilise faktoriga seotud küsimused 3 ja 4, teises 2,3 ja 4. )

Kood
cor.test(es1a[,1], es1b[,1])

    Pearson's product-moment correlation

data:  es1a[, 1] and es1b[, 1]
t = 223.3, df = 5500, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.9463370 0.9515905
sample estimates:
      cor 
0.9490296 
Kood
plot(es1a[,1], es1b[,1], xlab="Model 2 (bifactor)", ylab="Model 3 (bifactor+)")
abline(lsfit(es1a[,1], es1b[,1]), col="red")

Kood
L$L1es <- es1[,1]
L$L2es <- fscores(m1, response.pattern=eat2, method="EAP")[,1]
L$L3es <- fscores(m1, response.pattern=eat3, method="EAP")[,1]
Kood
op<-par(mfcol=c(1,3))
hist(L$L1es, main="Wave 1")
hist(L$L2es, main="Wave 2")
hist(L$L3es, main="Wave 3")

Kood
par(op)

Stabiilsus

Korrelatsioonid 3 laine vahel - diagonaali all ühefaktoriline mudel, diagonaalist üleval bifaktori mudeli üldfaktor.

Kood
es.names <- c("L1es", "L2es", "L3es")
cor(L[,es.names], use="pair") |> round(3) -> kors1
kors <- data.frame(" " = rownames(kors1), kors1, check.names = FALSE)
qflextable(kors)

L1es

L2es

L3es

L1es

1.000

0.644

0.598

L2es

0.644

1.000

0.636

L3es

0.598

0.636

1.000

Keskmiste erinevused…

Kood
t.test(L$L1es, L$L3es, paired=TRUE)

    Paired t-test

data:  L$L1es and L$L3es
t = 2.7599, df = 3265, p-value = 0.005814
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 0.009781179 0.057772976
sample estimates:
mean difference 
     0.03377708 
Kood
t.test(L$L2es, L$L3es, paired=TRUE)

    Paired t-test

data:  L$L2es and L$L3es
t = 2.7493, df = 2681, p-value = 0.006013
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 0.01006461 0.06012667
sample estimates:
mean difference 
     0.03509564 

St 3. laines on skoor oluliselt väiksem kui esimeses või teises.

Kood
t.test(L$L1es, L$L2es, paired=TRUE)

    Paired t-test

data:  L$L1es and L$L2es
t = 1.4454, df = 2855, p-value = 0.1485
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 -0.006408743  0.042355594
sample estimates:
mean difference 
     0.01797343 

Samas esimese ja 2. laine vahel ei ole erinevust.

Seosed KMI, vanuse ja sooga

KMI on arvutatud 1. ja 3. laine eneseraporteeritud kaalu ja pikkuse põhjal. Kaalu ja pikkuse eeltöötlus:

  • kaal alla 40 ja üle 200 kg asendatud NA-ga
  • pikkus alla 140 cm asendatud NA-ga
  • meetrites raporteeritud pikkus (3 juhul: 1.5 või 1.6) korrutatud 100-ga
  • KMI väärtused üle 50 ja alla 15 asendatud NA-ga

Korrelatsioonitabelis on (näidisena) ka KMI, soo ja vanuse keskmised korrelatsioonid 10 tõenäolise väärtusega (plausible value) nii ühefaktorilise (PV1F) kui ka bifaktori mudeli (PVBF) põhjal. Esimese hooga tundub mõstili eelistada EAP meetodit, mille puhul nn konvergentsed korrelatsioonid on suuremad.

Kood
kaal <- L$L1Kaal
# table(kaal)
kaal[kaal < 40] <- NA
kaal[kaal>200] <- NA
pikkus <- L$L1Pikkus
#table(pikkus)
jupskid <- which(pikkus %in% c(1.5,1.6))
pikkus[jupskid] <- 100* pikkus[jupskid]
pikkus[pikkus<140] <- NA
pikkus <- pikkus/100

L1kmi <- kaal / pikkus^2
L1kmi[L1kmi > 50] <- NA
L1kmi[L1kmi < 15] <- NA

kaal <- L$L3Kaal
# table(kaal)
kaal[kaal < 40] <- NA
kaal[kaal>200] <- NA
pikkus <- L$L3Pikkus
# table(pikkus)
jupskid <- which(pikkus %in% c(1.5,1.6))
pikkus[jupskid] <- 100* pikkus[jupskid]
pikkus[pikkus<140] <- NA
pikkus <- pikkus/100

L3kmi <- kaal / pikkus^2
L3kmi[L3kmi > 50] <- NA
L3kmi[L3kmi < 15] <- NA

L$L1kmi <- L1kmi
L$L3kmi <- L3kmi

taust <- data.frame(KMI = L1kmi, Sugu = L$RR.Sugu, Vanus = as.numeric(L$RR.Vanus))
k1 <- cor(taust, L[, c("L1es")], use="com")
taust3 <- data.frame(KMI = L3kmi, Sugu = L$RR.Sugu, Vanus = as.numeric(L$RR.Vanus))
k3 <- cor(taust3, L[, c("L3es")], use="com")

df <- data.frame(" "=rownames(k1), k1, "  "=NA, k3)  |> roundif(3)
names(df) <- c(" ", "L1", "      ", "L3")
qflextable(df)

L1

L3

KMI

0.234

0.238

Sugu

0.108

0.100

Vanus

-0.211

-0.233

Seosed isiksuse, EEK-2 ja impulsiivsusega

  • Isiksuse skaala: 20 väitega lühiversioon 100NP põhjal

  • Impulsiivsus: negative & positive urgency, Short version of the UPPS-P Impulsive Behavior Scale (SUPPS-P; Cyders, Littlefield, Coffey, & Karyadi, 2014); SUPPS-P (Cyders et al., 2014)

  • NB! Isiksuse andmed 3. lainest, impulsiivsus 2. lainest. Kõik korrelatsioonid on olulised (p< 0.001)

Kood
NEOAC2 <- grab(L, SRC %in% "100NP")#[c("N", "E", "O", "A", "C")]
NEOAC2$L3ISIKSUS6 <- 7-NEOAC2$L3ISIKSUS6
NEOAC2 <- compute_scores(NEOAC2, SCALE %in% c("N", "E", "O", "A", "C"))[, c("N", "E", "O", "A", "C")]
NEOACS <- apply(NEOAC2, 2, scale)
IMP <- grab(L, SRC %in% "IMP")
IMP[] <- lapply(IMP, \(x) 5-x)
pu <- rowSums(IMP[,1:4])
nu <- rowSums(IMP[,5:8])

imps <- sub("[", "", sapply(strsplit(key(L, SRC %in% "IMP")$LAB, "]"), "[[", 1), fixed=TRUE)

qflextable(data.frame(nr=1:8, Väide=imps))

nr

Väide

1

Väga heas tujus olles kipun sattuma olukordadesse, mis võivad mulle probleeme tekitada.

2

Väga heas tujus olles kipun kaotama kontrolli.

3

Kui olen väga elevil, teen asju, mis panevad teisi muretsema või ehmatavad neid.

4

Kui olen tõeliselt elevil, kipun tegutsema mõtlematult.

5

Kui tunnen end halvasti, teen hetke ajel enesetunde parandamiseks sageli asju, mida hiljem kahetsen.

6

Vahel, kui tunnen end halvasti, ei suuda ma oma tegevust lõpetada, kuigi see teeb mu enesetunde halvemaks.

7

Kui mu meeleolu on halb, tegutsen sageli mõtlematult.

8

Kui tunnen end tõrjutuna, ütlen sageli asju, mida hiljem kahetsen.

Kood
IMPS <- data.frame( PU=pu, NU=nu )
Kood
cor_neo <- psych::corr.test(NEOACS, L[, c("L3es")], use="pair")
cor_imp <- psych::corr.test(IMPS, L[, c("L2es")], use="pair")
bindit <- function(x) setNames(data.frame(x$r , N=x$n[,1]), c("eat_1F", "N"))
# 
rbind(bindit(cor_neo), bindit(cor_imp)) |> flexit()

X.

eat_1F

N

N

0.286

4 380

E

-0.050

4 375

O

-0.066

4 394

A

-0.105

4 399

C

-0.061

4 386

PU

0.144

3 513

NU

0.232

3 479

Ülesöömise skoori (1F mudel) prediktorid lineaarse mudeli põhjal:

Kood
lms <- lm(L$L1es ~ as.matrix(NEOAC2) + L$RR.Sugu + L$RR.Vanus) |> summary()
df <- data.frame(x = c("Vabaliige", "N", "E", "O", "A", "C", "Sugu (1=M,2=N)", "Vanus"), coef(lms))
names(df) <- c("  ", "b", "SE(b)", "t", "p")
df[,2:4] <- round(df[,2:4],3)
df$p<-round(df$p,5)
qflextable(df)

b

SE(b)

t

p

Vabaliige

-0.079

0.137

-0.573

0.56699

N

0.044

0.004

10.766

0.00000

E

0.005

0.005

0.914

0.36093

O

0.002

0.005

0.318

0.75043

A

-0.006

0.007

-0.868

0.38562

C

-0.012

0.005

-2.271

0.02323

Sugu (1=M,2=N)

0.123

0.030

4.094

0.00004

Vanus

-0.008

0.001

-9.710

0.00000

(R2 = 0.1032357)

EEK-i skooride (depressioon, üldistunud ärevushäire, asteenia, unehäired) korrelatsioonid ülesöömise skooridega 3 laines:

Kood
eeks <- c("EEK.dep", "EEK.anx", "EEK.ast", "EEK.ins")
cor_eek <- data.frame(L1=cor(L[, paste0("L1", eeks)], L[, c("L1es")], use="com"), 
L2=cor(L[, paste0("L2", eeks)], L[, c("L2es")], use="com"), 
L3=cor(L[, paste0("L3", eeks)], L[, c("L3es")], use="com"), check.names=FALSE)
rownames(cor_eek) <- eeks
cor_eek |> flexit()

X.

L1

L2

L3

EEK.dep

0.276

0.309

0.255

EEK.anx

0.301

0.325

0.290

EEK.ast

0.262

0.292

0.248

EEK.ins

0.178

0.223

0.183

Diagnooside ennustamine

Järgnevad analüüsid on raporteeritud funktsiooniga jtools::summ: log.regressiooni kordajad on tabelis nn “exp(x)” kujul, st OR. Prediktorid (v.a sugu) on standardiseeritud, sh vanus ja vanuse ^2.

Kood
L$F32 <- (R$F32_6 > 0)*1
L$F33 <- (R$F33F34_6 > 0)*1
L$dep <- L$F32 | L$F33
L$F41 <- (R$F41_6 > 0)
L$F32a <- (R$F32_2021>0)*1
L$F33a <- (R$F33F34_2021>0)*1
L$depa <- L$F32a | L$F33a
L$F41a <- (R$F41_2021>0)*1

g10 <- glm(dep ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1es, data=L, family=binomial) 
g11 <- glm(dep ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1EEK.dep + L1es, data=L, family=binomial) 
g12 <- glm(dep ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1EEK.dep + L1EEK.ast + L1es, data=L, family=binomial) 
g20 <- glm(depa ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1es , data=L, family=binomial)
g21 <- glm(depa ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1EEK.dep + L1es , data=L, family=binomial) 
g22 <- glm(depa ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1EEK.dep + L1EEK.ast + L1es , data=L, family=binomial) 
g30 <- glm(F41 ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1es, data=L, family=binomial) 
g31 <- glm(F41 ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1EEK.anx + L1es, data=L, family=binomial) 
g40 <- glm(F41a ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1es, data=L, family=binomial)
g41 <- glm(F41a ~ RR.Sugu + RR.Vanus + I(RR.Vanus^2) + L1EEK.anx + L1es, data=L, family=binomial)

Sõltuv muutuja: depressiooni (F32-34) 5 aasta levimus (diagn 2016-20)

1) Söömishäire riskiskoor on oluline prediktor

Kood
summ1(g10)
χ²(4) 117.0477
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.0416
Pseudo-R² (McFadden) 0.0302
AIC 3767.4067
BIC 3800.4710
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0785 0.0667 0.0923 -30.6618 0.0000
RR.Sugu 1.9360 1.5981 2.3453 6.7503 0.0000
RR.Vanus 1.6169 1.0096 2.5897 1.9995 0.0455
I(RR.Vanus^2) 0.6659 0.4166 1.0643 -1.6994 0.0892
L1es 1.3538 1.2468 1.4698 7.2152 0.0000
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

2) Söömishäire riskiskooril on lisavaliidsus (incremental validity)

Kood
summ1(g11)
χ²(5) 416.5938
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.1523
Pseudo-R² (McFadden) 0.1139
AIC 3254.3880
BIC 3293.7323
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0641 0.0536 0.0767 -30.0311 0.0000
RR.Sugu 1.9260 1.5699 2.3631 6.2825 0.0000
RR.Vanus 3.7765 2.2801 6.2553 5.1612 0.0000
I(RR.Vanus^2) 0.3235 0.1961 0.5336 -4.4200 0.0000
L1EEK.dep 2.1181 1.9438 2.3081 17.1244 0.0000
L1es 1.1508 1.0508 1.2604 3.0294 0.0025
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

3) … lisavaliidsus v.2.0 (kontrollime lisaks EEK-2 depressiooniskoorile ka asteenia skooir)

Kood
summ1(g12)
χ²(6) 439.6703
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.1632
Pseudo-R² (McFadden) 0.1223
AIC 3169.3271
BIC 3215.0998
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0640 0.0533 0.0767 -29.7003 0.0000
RR.Sugu 1.8498 1.5042 2.2748 5.8284 0.0000
RR.Vanus 4.1746 2.5074 6.9504 5.4943 0.0000
I(RR.Vanus^2) 0.2935 0.1771 0.4864 -4.7553 0.0000
L1EEK.dep 1.7703 1.5757 1.9889 9.6142 0.0000
L1EEK.ast 1.3477 1.1895 1.5270 4.6827 0.0000
L1es 1.1346 1.0343 1.2447 2.6728 0.0075
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Sõltuv muutuja: depressiooni (F32-34) 2 kuu levimus (diagnoos 2021 (aanuar-veebruar)

1) Söömishäire riskiskoor on oluline prediktor

Kood
summ1(g20)
χ²(4) 29.1158
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.0275
Pseudo-R² (McFadden) 0.0247
AIC 1159.5391
BIC 1192.3145
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0138 0.0095 0.0201 -22.2644 0.0000
RR.Sugu 2.1242 1.3839 3.2603 3.4463 0.0006
RR.Vanus 2.0659 0.7466 5.7164 1.3973 0.1623
I(RR.Vanus^2) 0.4484 0.1588 1.2665 -1.5140 0.1300
L1es 1.3148 1.1071 1.5615 3.1199 0.0018
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

2) Söömishäire riskiskooril ei ole lisavaliidsust

Kood
summ1(g22)
χ²(6) 148.1172
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.1500
Pseudo-R² (McFadden) 0.1364
AIC 952.0627
BIC 997.4191
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0089 0.0058 0.0138 -21.2784 0.0000
RR.Sugu 2.0743 1.3131 3.2767 3.1277 0.0018
RR.Vanus 6.4755 2.2026 19.0377 3.3951 0.0007
I(RR.Vanus^2) 0.1622 0.0538 0.4891 -3.2296 0.0012
L1EEK.dep 2.3622 1.8807 2.9670 7.3905 0.0000
L1EEK.ast 1.0972 0.8468 1.4217 0.7018 0.4828
L1es 1.0441 0.8643 1.2613 0.4476 0.6545
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Sõltuv muutuja: “muude ärevushäirete” 5 aasta levimus (2016-2020)

1) Söömishäire riskiskoor on oluline prediktor

Kood
summ1(g30)
χ²(4) 63.0888
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.0263
Pseudo-R² (McFadden) 0.0202
AIC 3071.9808
BIC 3105.0451
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0554 0.0458 0.0670 -29.8840 0.0000
RR.Sugu 1.9840 1.5875 2.4796 6.0225 0.0000
RR.Vanus 0.9164 0.5459 1.5382 -0.3304 0.7411
I(RR.Vanus^2) 1.1794 0.7059 1.9705 0.6299 0.5287
L1es 1.2033 1.0936 1.3240 3.7960 0.0001
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

2) Söömishäire riskiskooril ei ole lisavaliidsust

Kood
summ1(g31)
χ²(5) 222.4678
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.0956
Pseudo-R² (McFadden) 0.0746
AIC 2771.8403
BIC 2811.2807
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0502 0.0411 0.0615 -29.1025 0.0000
RR.Sugu 1.7571 1.3916 2.2186 4.7374 0.0000
RR.Vanus 1.3187 0.7724 2.2514 1.0137 0.3107
I(RR.Vanus^2) 0.9092 0.5351 1.5447 -0.3520 0.7248
L1EEK.anx 1.9075 1.7272 2.1068 12.7426 0.0000
L1es 1.0119 0.9122 1.1227 0.2242 0.8226
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

Sõltuv muutuja: “Muude ärevushäirete” 2 kuu levimus (2021, jaanuar-veebruar)

1) Söömishäire riskiskoor ei ole oluline prediktor

Kood
summ1(g40)
χ²(4) 16.5843
p 0.0023
Pseudo-R² (Cragg-Uhler) 0.0199
Pseudo-R² (McFadden) 0.0183
AIC 901.7931
BIC 934.5684
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0113 0.0075 0.0172 -21.1141 0.0000
RR.Sugu 1.7732 1.0939 2.8744 2.3241 0.0201
RR.Vanus 0.5368 0.1854 1.5544 -1.1468 0.2515
I(RR.Vanus^2) 1.5680 0.5199 4.7293 0.7986 0.4245
L1es 1.2214 0.9963 1.4974 1.9244 0.0543
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.

2) Söömishäire riskiskooril ei ole lisavaliidsust

Kood
summ1(g41)
χ²(5) 79.5505
p 0.0000
Pseudo-R² (Cragg-Uhler) 0.0981
Pseudo-R² (McFadden) 0.0907
AIC 809.3230
BIC 848.4081
exp(Est.) 2.5% 97.5% z val. p
(Intercept) 0.0095 0.0061 0.0148 -20.5749 0.0000
RR.Sugu 1.4163 0.8649 2.3194 1.3831 0.1666
RR.Vanus 0.9551 0.3225 2.8285 -0.0830 0.9339
I(RR.Vanus^2) 1.0005 0.3221 3.1077 0.0008 0.9993
L1EEK.anx 2.2882 1.8711 2.7983 8.0612 0.0000
L1es 0.9877 0.7957 1.2262 -0.1119 0.9109
Standard errors: MLE; Continuous predictors are mean-centered and scaled by 1 s.d. The outcome variable remains in its original units.