Előkészítés
Mielőtt hozzákezdünk bármilyen elemzéshez, tegyük meg a következőket: 1) Hozzunk létre egy külön könyvtárat, amelyben a feldolgozó/elemző R-szkripteket tárolni szeretnénk (pl. jelen esetben a könyvtár neve lehetne "gaming"). 2) Ha a feldolgozandó fájlok mérete nem túlzottan nagy, hozzunk létre egy alkönyvtárat az adatoknak, és másoljuk oda a szükséges adatfájlokat (pl. jelen esetben létrehozunk egy "data" könyvtárat, benne a "gaming_random.sav" és "gaming_valtozok.txt" fájlokkal). 3) Hozzunk létre egy új projektet az RStudio-ban: File / New project, majd a felnyíló ablakban válasszuk az Existing Directory opciót. A következő ablakban válasszuk ki az imént létrehozott projektkönyvtárat ("gaming"). Innentől a 'gaming' projektet könnyedén elérhetjük a jobb fölső sarokban lévő projektválasztó legördülő menü segítségével.
Adatok beolvasása
SPSS-adatokat szeretnénk beolvasni: egy korábbi fejezetpontban már leírtuk, hogy ehhez használhatjuk a foreign csomag read.spss()
parancsát.
library(foreign)
dat <- read.spss(file.path("data", "gaming_random.sav"),
to.data.frame = TRUE)
## Warning in read.spss(file.path("data", "gaming_random.sav"), to.data.frame
## = TRUE): data/gaming_random.sav: Unrecognized record type 7, subtype 18
## encountered in system file
Ha ezt a parancsot kiadjuk, az R beolvassa az adatfájlt, de közben figyelmeztetést is küld. Vajon aggódjunk-e a figyelmeztetés miatt? Vizsgáljuk meg a beolvasott adatainkat:
str(dat)
## 'data.frame': 5289 obs. of 108 variables:
## $ Sorszam : num 49 54 55 56 57 58 60 68 69 75 ...
## $ Problematic : Factor w/ 2 levels "non-disordered",..: 2 1 2 1 2 2 2 2 1 1 ...
## $ Heavy_use : Factor w/ 2 levels "less than or equal to 4 h/day",..: 2 2 2 2 1 1 1 1 1 2 ...
## $ Gender : Factor w/ 2 levels "male","female": 1 1 1 1 1 1 2 1 1 1 ...
## $ Age : num 19 15 20 15 31 16 14 16 27 25 ...
## $ Relationship : Factor w/ 6 levels "single","in a relationship, but living separately",..: 1 1 1 1 3 1 NA 1 1 1 ...
## $ Education : num 11 8 13 8 22 10 8 11 18 13 ...
## $ StudyCurrently: Factor w/ 2 levels "no","yes": 2 2 2 1 2 2 2 2 1 1 ...
## $ WorkCurrently : Factor w/ 5 levels "no","Yes, I have a full-time job",..: 1 1 5 NA 2 1 1 1 2 1 ...
## $ WeeklyGameTime: Factor w/ 6 levels "none","less than 7 hours weekly (less than one hour a day)",..: 5 5 5 5 2 3 3 3 3 5 ...
## $ MOGQ1 : Factor w/ 5 levels "almost never/never",..: 2 2 4 1 5 1 5 1 2 3 ...
## $ MOGQ2 : Factor w/ 5 levels "almost never/never",..: 5 3 2 1 4 4 3 1 4 1 ...
## $ MOGQ3 : Factor w/ 5 levels "almost never/never",..: 2 3 1 3 4 3 2 1 2 4 ...
## $ MOGQ4 : Factor w/ 5 levels "almost never/never",..: 2 5 3 2 3 4 3 2 5 1 ...
## $ MOGQ5 : Factor w/ 5 levels "almost never/never",..: 1 5 3 1 4 4 1 1 2 4 ...
## $ MOGQ6 : Factor w/ 5 levels "almost never/never",..: 5 5 3 2 5 1 4 1 5 2 ...
## $ MOGQ7 : Factor w/ 5 levels "almost never/never",..: 4 1 1 2 4 4 3 5 1 4 ...
## $ MOGQ8 : Factor w/ 5 levels "almost never/never",..: 1 4 5 3 4 4 1 3 2 2 ...
## $ MOGQ9 : Factor w/ 5 levels "almost never/never",..: 2 3 5 5 2 1 4 1 1 2 ...
## $ MOGQ10 : Factor w/ 5 levels "almost never/never",..: 5 3 3 1 4 2 2 2 4 2 ...
## $ MOGQ11 : Factor w/ 5 levels "almost never/never",..: 4 3 3 1 1 5 5 2 3 4 ...
## $ MOGQ12 : Factor w/ 5 levels "almost never/never",..: 1 2 4 4 1 3 2 1 4 2 ...
## $ MOGQ13 : Factor w/ 5 levels "almost never/never",..: 4 5 1 4 4 3 1 1 2 1 ...
## $ MOGQ14 : Factor w/ 5 levels "almost never/never",..: 2 2 2 5 2 3 2 1 2 4 ...
## $ MOGQ15 : Factor w/ 5 levels "almost never/never",..: 2 1 4 3 4 1 4 1 1 5 ...
## $ MOGQ16 : Factor w/ 5 levels "almost never/never",..: 1 4 4 1 2 1 1 1 5 2 ...
## $ MOGQ17 : Factor w/ 5 levels "almost never/never",..: 2 2 5 1 5 3 2 4 2 3 ...
## $ MOGQ18 : Factor w/ 5 levels "almost never/never",..: 4 3 5 3 4 1 4 3 3 3 ...
## $ MOGQ19 : Factor w/ 5 levels "almost never/never",..: 4 1 5 5 3 2 4 1 2 1 ...
## $ MOGQ20 : Factor w/ 5 levels "almost never/never",..: 3 1 1 3 5 5 5 4 1 3 ...
## $ MOGQ21 : Factor w/ 5 levels "almost never/never",..: 3 3 4 3 5 5 1 2 5 5 ...
## $ MOGQ22 : Factor w/ 5 levels "almost never/never",..: 5 4 1 4 3 1 4 4 3 3 ...
## $ MOGQ23 : Factor w/ 5 levels "almost never/never",..: 2 4 2 4 3 3 1 4 2 4 ...
## $ MOGQ24 : Factor w/ 5 levels "almost never/never",..: 3 5 4 1 5 2 2 1 2 2 ...
## $ MOGQ25 : Factor w/ 5 levels "almost never/never",..: 3 3 4 5 5 2 3 3 2 5 ...
## $ MOGQ26 : Factor w/ 5 levels "almost never/never",..: 4 4 1 1 2 3 4 4 4 4 ...
## $ MOGQ27 : Factor w/ 5 levels "almost never/never",..: 2 3 5 3 1 3 3 1 4 3 ...
## $ POGQ1 : Factor w/ 5 levels "never","seldom",..: 5 3 1 2 5 3 5 5 1 3 ...
## $ POGQ2 : Factor w/ 5 levels "never","seldom",..: 4 5 4 4 1 5 5 3 4 1 ...
## $ POGQ3 : Factor w/ 5 levels "never","seldom",..: NA 2 1 4 NA 1 NA 1 1 1 ...
## $ POGQ4 : Factor w/ 5 levels "never","seldom",..: 1 3 3 1 3 5 2 1 5 1 ...
## $ POGQ5 : Factor w/ 5 levels "never","seldom",..: 4 2 2 4 5 3 2 4 1 1 ...
## $ POGQ6 : Factor w/ 5 levels "never","seldom",..: 4 4 1 1 2 5 4 5 3 1 ...
## $ POGQ7 : Factor w/ 5 levels "never","seldom",..: NA 2 1 5 NA 3 NA 2 2 1 ...
## $ POGQ8 : Factor w/ 5 levels "never","seldom",..: 2 5 1 4 2 1 3 2 3 1 ...
## $ POGQ9 : Factor w/ 5 levels "never","seldom",..: 3 2 4 4 5 3 2 4 5 2 ...
## $ POGQ10 : Factor w/ 5 levels "never","seldom",..: 3 5 1 5 3 2 3 1 2 5 ...
## $ POGQ11 : Factor w/ 5 levels "never","seldom",..: 1 4 1 1 5 3 3 1 5 5 ...
## $ POGQ12 : Factor w/ 5 levels "never","seldom",..: 1 4 2 1 5 2 1 2 4 3 ...
## $ POGQ13 : Factor w/ 5 levels "never","seldom",..: 2 3 5 4 3 4 3 1 3 3 ...
## $ POGQ14 : Factor w/ 5 levels "never","seldom",..: NA 3 1 4 NA 1 NA 1 1 1 ...
## $ POGQ15 : Factor w/ 5 levels "never","seldom",..: 3 2 1 3 2 3 4 2 2 1 ...
## $ POGQ16 : Factor w/ 5 levels "never","seldom",..: 1 4 1 4 4 1 1 2 5 1 ...
## $ POGQ17 : Factor w/ 5 levels "never","seldom",..: 2 1 4 2 1 5 5 2 5 4 ...
## $ POGQ18 : Factor w/ 5 levels "never","seldom",..: 3 1 1 5 3 5 5 2 5 1 ...
## $ BSI1 : Factor w/ 5 levels "not at all","a little bit",..: 3 1 5 2 2 1 2 1 1 4 ...
## $ BSI2 : Factor w/ 5 levels "not at all","a little bit",..: 1 3 4 2 5 3 1 1 2 5 ...
## $ BSI3 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI4 : Factor w/ 5 levels "not at all","a little bit",..: 1 1 1 3 5 2 2 2 2 2 ...
## $ BSI5 : Factor w/ 5 levels "not at all","a little bit",..: 4 5 5 5 1 4 4 3 3 1 ...
## $ BSI6 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI7 : Factor w/ 5 levels "not at all","a little bit",..: 4 2 4 2 2 4 1 5 2 4 ...
## $ BSI8 : Factor w/ 5 levels "not at all","a little bit",..: 2 5 3 2 2 1 1 2 3 4 ...
## $ BSI9 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI10 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI11 : Factor w/ 5 levels "not at all","a little bit",..: 2 3 2 1 1 4 5 5 4 4 ...
## $ BSI12 : Factor w/ 5 levels "not at all","a little bit",..: 1 2 5 5 5 4 5 3 4 2 ...
## $ BSI13 : Factor w/ 5 levels "not at all","a little bit",..: 1 3 1 3 1 4 3 2 2 1 ...
## $ BSI14 : Factor w/ 5 levels "not at all","a little bit",..: 1 3 2 4 2 5 5 2 2 1 ...
## $ BSI15 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI16 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI17 : Factor w/ 5 levels "not at all","a little bit",..: 2 5 3 5 5 5 1 4 1 1 ...
## $ BSI18 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI19 : Factor w/ 5 levels "not at all","a little bit",..: 4 2 4 1 2 5 4 1 1 5 ...
## $ BSI20 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI21 : Factor w/ 5 levels "not at all","a little bit",..: 3 1 4 2 1 3 4 4 4 1 ...
## $ BSI22 : Factor w/ 5 levels "not at all","a little bit",..: 5 4 4 5 5 2 3 5 1 4 ...
## $ BSI23 : Factor w/ 5 levels "not at all","a little bit",..: 2 1 3 3 4 5 4 3 4 3 ...
## $ BSI24 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI25 : Factor w/ 5 levels "not at all","a little bit",..: 3 5 1 1 5 2 3 3 3 4 ...
## $ BSI26 : Factor w/ 5 levels "not at all","a little bit",..: 5 5 2 1 4 3 3 2 4 3 ...
## $ BSI27 : Factor w/ 5 levels "not at all","a little bit",..: 3 5 3 5 3 3 1 3 5 1 ...
## $ BSI28 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI29 : Factor w/ 5 levels "not at all","a little bit",..: 1 2 5 2 4 2 3 4 1 3 ...
## $ BSI30 : Factor w/ 5 levels "not at all","a little bit",..: 2 3 5 5 1 1 5 3 3 2 ...
## $ BSI31 : Factor w/ 5 levels "not at all","a little bit",..: 3 1 4 3 3 2 5 4 2 1 ...
## $ BSI32 : Factor w/ 5 levels "not at all","a little bit",..: 3 5 2 3 3 3 4 5 4 4 ...
## $ BSI33 : Factor w/ 5 levels "not at all","a little bit",..: 5 2 3 1 4 2 2 5 3 1 ...
## $ BSI34 : Factor w/ 5 levels "not at all","a little bit",..: 1 1 2 3 1 5 5 5 2 5 ...
## $ BSI35 : Factor w/ 5 levels "not at all","a little bit",..: 2 5 4 4 5 4 5 2 3 1 ...
## $ BSI36 : Factor w/ 5 levels "not at all","a little bit",..: 5 4 3 5 3 4 5 4 3 4 ...
## $ BSI37 : Factor w/ 5 levels "not at all","a little bit",..: 5 5 1 1 2 4 5 1 1 1 ...
## $ BSI38 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI39 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI40 : Factor w/ 5 levels "not at all","a little bit",..: 1 1 2 5 3 3 4 3 1 2 ...
## $ BSI41 : Factor w/ 5 levels "not at all","a little bit",..: NA NA NA NA NA NA NA NA NA NA ...
## $ BSI42 : Factor w/ 5 levels "not at all","a little bit",..: 3 1 3 2 1 1 5 4 3 5 ...
## $ BSI43 : Factor w/ 5 levels "not at all","a little bit",..: 4 2 1 2 2 3 3 2 4 4 ...
## $ BSI44 : Factor w/ 5 levels "not at all","a little bit",..: 1 4 5 3 5 5 1 3 3 5 ...
## [list output truncated]
## - attr(*, "variable.labels")= Named chr "ID number of respondents" "IGD9 2 kat DSM alapján (>=5 disordered)" "Heavy use (gaming time)" "Gender" ...
## ..- attr(*, "names")= chr "Sorszam" "Problematic" "Heavy_use" "Gender" ...
## - attr(*, "codepage")= int 65001
#head(dat)
#tail(dat)
A beolvasott adattábla jónéhány hiányzó értéket tartalmaz, de egyébként rendben lévőnek tűnik. Következő lépésben bármilyen internetes keresővel érdemes ellenőrizni, hogy találunk-e releváns bejegyzést ugyanezzel az üzenettel (egyszerűen másoljuk be a figyelmeztető üzenetet a keresőmezőbe). A találatokat átböngészve kiderül, hogy az üzenet miatt nem kell aggódnunk, az adatok beolvasását az "unrecognized record type 7" nem befolyásolja.
Kérdőív-itemek mint faktorok vs egész számok
Van azonban egy valódi probléma: a 'dat' adattáblában az összes kérdőív-item
faktorként szerepel. Ez azért van így, mert a read.spss()
függvény use.value.labels
argumentuma alapesetben TRUE, azaz a függvény a beolvasás
során faktorrá alakít minden olyan változót, amelynek szintjeihez az SPSS-ben szöveges címkék tartoztak. Ez azért is problémás lehet, mert így például a "0" = "never", "1" = "rarely", "2" = "often", "3" = "always" kódú változókat az R olyan faktorként kódolja, amelynek a szintjei megfelelnek az SPSS címkéknek, viszont a belső, integer reprezentációja 1-től 4-ig terjed. (Ez a probléma a jelen esetben
azért nem lényeges, mert a végén úgyis a standardizált skálapontszámokkal fogunk
dolgozni).
A továbbiakban tehát két lehetőségünk van: vagy eleve numerikus változóként olvassuk be a kérdőív-itemeket, vagy utólag konvertáljuk őket numerikussá.
1) Kérdőív-itemek beolvasása numerikusként:
- itt kihasználjuk azt, hogy a számunkra fontos, valóban faktorként reprezentálandó változók (Heavy_use, Problematic) kétszintűek, és hogy a
read.spss()
függvénynek vagy egymax.value.labels
argumentuma (lásd a függvény súgóját)
dat_num <- read.spss(file.path("data", "gaming_random.sav"),
max.value.labels = 2)
## Warning in read.spss(file.path("data", "gaming_random.sav"),
## max.value.labels = 2): data/gaming_random.sav: Unrecognized record type 7,
## subtype 18 encountered in system file
2) Kérdőív-itemek átalakítása numerikussá:
- Ahogy egy korábbi fejezetben bemutattuk, egy változót integerré alakíthatunk az
as.integer
, vagy valós számmá azas.double
vagyas.numeric
paranccsal, például:
dat$MOGQ1 <- as.integer(dat$MOGQ1)
- Kézzel átírni az előző sort az összes kérdőív-item nevére igen fáradságos feladat lenne. A megoldás kézenfekvő: készítsünk egy karakter vektort, amely tartalmazza az összes kérdéses változónevet, majd egy ciklussal menjünk végig az adattábla összes érintett oszlopán, és konvertáljuk az oszlopot a megfelelő típusra:
# tudjuk, hogy a kérdőív itemek az
# MOGQ, POGQ vagy BSI karaktereket tartalmazzák;
# akár le is ellenőrizheted: colnames(dat)
likert_valtozok <- grep("MOGQ|POGQ|BSI",
colnames(dat),
value = TRUE)
# meggyőződhetsz róla, hogy a likert_valtozok vektor
# valóban a kérdéses itemeket tartalmazza
#print(likert_valtozok)
# ciklus
for (i in likert_valtozok) {
dat[, i] <- as.integer(dat[, i])
}
A fentebbi sorok a következőt jelentik:
for (i in likert_valtozok)
-> vedd a likert_valtozok vektort, és lépkedj végig az összes elemén; az aktuálisan
kiválasztott elemet jelölje i
dat[, i] <- as.integer(dat[, i])
-> az i
ciklusváltozó tartalmának megfelelő változót válaszd ki a dat
data.frame-ből, alakítsd át egész számmá, és írd felül az eredeti változót ezekkel az értékekkel
Skálapontszámok
A leírás alapján a kérdőívek nem tartalmaznak fordított itemeket. Ennek ellenére nem árt ellenőrizni, hogy a kérdőívek tételei valóban egy irányba mutatnak-e. A kérdőív-itemek korrelációs mátrixa remekül vizualizálható a már ismert corrplot csomag corrplot()
függvényével. Ezúttal olyan megjelenítést választunk, hogy az itemek a McQuitty-féle hierarchikus klaszterelemzés eredményei szerint legyenek sorba rendezve. A változók nagy száma miatt az ábrát png fájlba mentjük utólagos megtekintésre.
library(corrplot)
png("corr_items.png", width = 1000, height = 1000)
corrplot(cor(dat[, likert_valtozok], use = "p"),
method = "square", diag = FALSE,
order = "hclust", hclust.method = "mcquitty",
tl.cex = 0.7)
dev.off()
## png
## 2
Mivel randomizált adatokon dolgozunk, a korrelációs eredményeink természetesen nehezen lennének interpretálhatók. Az azonban így is látszik, hogy a kérdőívekben valóban nem szerepeltek fordított itemek. A következő lépés tehát a skálapontszámok számolása.
Ha a skálapontszámokat egyedileg szeretnénk kiszámolni, a következőt tehetnénk:
- Készítünk egy vektort, amely tartalmazza az adott skálához tartozó itemek nevét:
MOGQ_social_itemek <- c("MOGQ1", "MOGQ8", "MOGQ15", "MOGQ22")
- Kiválasztjuk az adattáblánkból a megfelelő oszlopokat, és kiszámoljuk ezen résztábla sorátlagait (a hiányzó értékek eltávolításával):
MOGQ_social <- rowMeans(dat[, MOGQ_social_itemek],
na.rm = TRUE)
Ez egyrészt fáradságos és lassú folyamat, másrészt az itemek nevének egyedi másolgatása és/vagy begépelése miatt a hibázás valószínűsége is magas. A folyamatot két ponton tehetnénk hatékonyabbá: egyrészt megfelelő formába kellene hozni a txt-ben kapott skáladefiníciókat, másrészt automatizálni kellene a skálaváltozók vektorának kinyerését és a pontszámok kiszámolását.
A txt átalakítása
A további műveletekhez az lenne az ideális, hogyha lenne egy listánk (list
), amelynek elemei az egyes skálákhoz tartozó változók nevét tartalmazó vektorok lennének, a lista elemeinek neve pedig megegyezne a skálák neveivel. Vegyük észre, hogy a kapott txt fájl tartalma nem áll túlzottan távol egy ilyen lista megadásának módjától.
# részlet
MOGQ_Social=(MOGQ1+MOGQ8+MOGQ15+MOGQ22)/4.
MOGQ_Escape=(MOGQ2+MOGQ9+MOGQ16+MOGQ23)/4.
...
Az elvárt alak ez lenne:
skala_definiciok <- list(
MOGQ_Social = c("MOGQ1", "MOGQ8", "MOGQ15", "MOGQ22"),
MOGQ_Escape = c("MOGQ2", "MOGQ9", "MOGQ16", "MOGQ23"),
...
)
Noha a kívánt átalakítást megfelelő R-parancsokkal is végrehajthatnánk, a következőkben egy pragmatikus megközelítést mutatunk be. Használjuk az RStudio-t arra, hogy kicseréljük a megfelelő karaktereket! Ehhez mindössze annyit kell tennünk, hogy megnyitjuk az RStudio-val az adott txt fájlt (File > Open File...
), majd használjuk a CTRL+F billentyűkombinációt (vagy Edit > Find...
). A keresési mezőbe írjuk be a cserélendő karaktert (pl. +), a Replace mezőbe pedig
a kívánt karaktert (pl. ", "). Ezután kattintsunk a Replace melletti 'All' gombra.
A következő cseréket kell elvégeznünk:
Find | Replace | Regex |
---|---|---|
+ | ", " | nem |
= | = c(" | nem |
) | "), | nem |
/.* | igen |
Az utolsó cserénél reguláris kifejezést használunk (azaz be kell jelölni a Regex jelölőnégyzetet), amelyben a /.*
azt jelzi, hogy /
jel után bármilyen karakterek következhetnek. (Ezzel a lépéssel kitöröljük a sorok végéről a számokat és a pontot.)
A kapott szöveget egyszerűen bemásolhatjuk a skáladefiníciós listánkba:
skala_definiciok <- list(
MOGQ_Social = c("MOGQ1", "MOGQ8", "MOGQ15", "MOGQ22"),
MOGQ_Escape = c("MOGQ2", "MOGQ9", "MOGQ16", "MOGQ23"),
MOGQ_Competition = c("MOGQ3", "MOGQ10", "MOGQ17", "MOGQ24"),
MOGQ_Coping = c("MOGQ4", "MOGQ11", "MOGQ18", "MOGQ25"),
MOGQ_SkillDev = c("MOGQ5", "MOGQ12", "MOGQ19", "MOGQ26"),
MOGQ_Fantasy = c("MOGQ6", "MOGQ13", "MOGQ20", "MOGQ27"),
MOGQ_Recreation = c("MOGQ7", "MOGQ14", "MOGQ21"),
POGQ_Preoccupation = c("POGQ1", "POGQ7"),
POGQ_Immersion = c("POGQ2", "POGQ8", "POGQ13", "POGQ17"),
POGQ_Withdrawal = c("POGQ3", "POGQ9", "POGQ14", "POGQ18"),
POGQ_Overuse = c("POGQ4", "POGQ10", "POGQ15"),
POGQ_IntConflicts = c("POGQ5", "POGQ11"),
POGQ_SocIsolation = c("POGQ6", "POGQ12", "POGQ16"),
BSI_Somatization = c("BSI2", "BSI7", "BSI23", "BSI29", "BSI30", "BSI33", "BSI37"),
BSI_ObsComp = c("BSI5", "BSI15", "BSI26", "BSI27", "BSI32", "BSI36"),
BSI_IntpersSens = c("BSI20", "BSI21", "BSI22", "BSI42"),
BSI_Depression = c("BSI9", "BSI16", "BSI17", "BSI18", "BSI35", "BSI50"),
BSI_Anxiety = c("BSI1", "BSI12", "BSI19", "BSI38", "BSI45", "BSI49"),
BSI_Hostility = c("BSI6", "BSI13", "BSI40", "BSI41", "BSI46"),
BSI_PhobicAnxiety = c("BSI8", "BSI28", "BSI31", "BSI43", "BSI47"),
BSI_ParanoidId = c("BSI4", "BSI10", "BSI24", "BSI48", "BSI51"),
BSI_Psychotiscism = c("BSI3", "BSI14", "BSI34", "BSI44", "BSI53"),
GSI = c("BSI1", "BSI2", "BSI3", "BSI4", "BSI5", "BSI6", "BSI7", "BSI8", "BSI9", "BSI10", "BSI11", "BSI12", "BSI13", "BSI14", "BSI15", "BSI16", "BSI17", "BSI18", "BSI19", "BSI20", "BSI21", "BSI22", "BSI23", "BSI24", "BSI25", "BSI26", "BSI27", "BSI28", "BSI29", "BSI30", "BSI31", "BSI32", "BSI33", "BSI34", "BSI35", "BSI36", "BSI37", "BSI38", "BSI39", "BSI40", "BSI41", "BSI42", "BSI43", "BSI44", "BSI45", "BSI46", "BSI47", "BSI48", "BSI49", "BSI50", "BSI51", "BSI52", "BSI53")
)
Skálapontok kiszámítása
Térjünk vissza a korábbi, "kézi" példához:
MOGQ_social_itemek <- c("MOGQ1", "MOGQ8", "MOGQ15", "MOGQ22")
MOGQ_social <- rowMeans(dat[, MOGQ_social_itemek], na.rm = TRUE)
Vegyük észre, hogy a fenti sorokat a skáladefiníciós listánk segítségével immáron így is írhatnánk:
itemek <- skala_definiciok[["MOGQ_social"]]
skala <- rowMeans(dat[, itemek], na.rm = TRUE)
Innentől akármelyik skálának a kiszámításához elég lenne az "MOGQ_social"-t átírni, amit akár megtehetnénk egy for
ciklussal is:
skala_nevek <- names(skala_definiciok)
for (n in skala_nevek) {
itemek <- skala_definiciok[[n]]
skala <- rowMeans(dat[, itemek],
na.rm = TRUE)
}
Igen ám, de a fentebbi ciklus végeredményét mindig a skala
változóhoz rendeljük hozzá, azaz ciklusunk folyton felülírja az előzőleg kiszámolt skálapontszámot.
Ezt kikerülhetnénk azzal, ha először létrehoznánk egy mátrixot (vagy data.frame-et), és a ciklusban csak a megfelelő oszlopot írnánk felül. Van azonban egy parancs (pontosabban parancsok egész családja, lásd ?lapply
), amely automatikusan összefűzi egy listába a ciklusban létrehozott változókat, azaz nem kell bajlódnunk az eredmény-változó előzetes megadásával.
skalapontok <- lapply(skala_nevek,
function(n) {
itemek <- skala_definiciok[[n]]
rowMeans(dat[, itemek],
na.rm = TRUE)
}
)
A lapply
függvény első argumentuma egy vektor, második argumentuma pedig
egy függvény vagy egy függvény neve. (A lapply
esetleges további argumentumai
az előzőleg megadott függvény egyéb lehetséges argumentumai.) A fentebbi sorokkal
tehát a következőre utasítjuk az R-et: 1) vedd a skala_nevek vektort, majd 2) minden egyes elemét helyettesítsd be abba az általunk definiált függvénybe, amely kiszámolja a dat
adattáblánk megfelelő változóinak sorátlagait, és végül 3) a függvény által kiszámolt pontszám-vektorokat fűzd össze egy listába.
A fentebbi sorok még mindig redundánsak kicsit; miért indexelünk a skala_nevek
vektorral, azaz miért nem használjuk közvetlenül a skala_definíciók
lista elemeit? Valóban, emlékezzünk vissza, hogy a lista valójában egy vektor. Azaz a fentebbi sorokat így is egyszerűsíthetnénk:
skalapontok <- lapply(skala_definiciok,
function(itemek) {
rowMeans(dat[, itemek],
na.rm = TRUE)
}
)
A skálapontszámok számításának ez utóbbi módja azért is előnyösebb, mert így a skalapontok
egy nevekkel ellátott lista lesz, azaz nem kell a lapply
parancs után ezt is lefuttatnunk: names(skalapontok) <- skala_nevek
. (Ez annak köszönhető, hogy ha a lapply
argumentumában megadott, tág értelemben vett vektornak vannak nevei, akkor azok megőrződnek az eredmény-listában is.)
A skálapontszámokat kiszámoltuk, de van egy bökkenő: az elemzéseinkhez data.frame-re lenne szükség, azonban a skalapontok
objektum egy lista. Semmi gond, alakítsuk át data.frame-mé:
skalapontok <- as.data.frame(skalapontok)
Leíró statiszikák, vizualizáció
Legkésőbb ezen a ponton érdemes leíró statisztikákat is lekérni:
# töltsük be a psych csomagot
library(psych)
# kérjünk leíró statisztikákat csoportonkénti bontásban
describeBy(skalapontok,
group = dat[, c("Heavy_use", "Problematic")])
## Heavy_use: less than or equal to 4 h/day
## Problematic: non-disordered
## vars n mean sd median trimmed mad min max range
## MOGQ_Social 1 1966 3.01 0.72 3.00 3.01 0.74 1.00 5.00 4.00
## MOGQ_Escape 2 1966 3.02 0.70 3.00 3.03 0.74 1.00 5.00 4.00
## MOGQ_Competition 3 1966 2.98 0.71 3.00 2.98 0.74 1.00 5.00 4.00
## MOGQ_Coping 4 1966 2.99 0.69 3.00 2.98 0.74 1.00 5.00 4.00
## MOGQ_SkillDev 5 1966 2.99 0.69 3.00 2.99 0.74 1.00 5.00 4.00
## MOGQ_Fantasy 6 1966 3.00 0.70 3.00 3.00 0.74 1.25 5.00 3.75
## MOGQ_Recreation 7 1966 3.00 0.81 3.00 3.01 0.99 1.00 5.00 4.00
## POGQ_Preoccupation 8 1966 2.70 0.90 2.50 2.68 0.74 1.00 5.00 4.00
## POGQ_Immersion 9 1966 3.02 0.71 3.00 3.02 0.74 1.25 5.00 3.75
## POGQ_Withdrawal 10 1966 2.36 0.68 2.25 2.33 0.74 1.00 5.00 4.00
## POGQ_Overuse 11 1966 3.03 0.82 3.00 3.03 0.99 1.00 5.00 4.00
## POGQ_IntConflicts 12 1966 2.97 1.01 3.00 2.96 0.74 1.00 5.00 4.00
## POGQ_SocIsolation 13 1966 3.02 0.82 3.00 3.03 0.99 1.00 5.00 4.00
## BSI_Somatization 14 1966 3.00 0.53 3.00 3.01 0.64 1.14 4.71 3.57
## BSI_ObsComp 15 1966 2.80 0.56 2.83 2.80 0.49 1.17 4.67 3.50
## BSI_IntpersSens 16 1966 2.70 0.68 2.75 2.70 0.74 1.00 5.00 4.00
## BSI_Depression 17 1966 2.28 0.74 2.17 2.21 0.74 1.00 5.00 4.00
## BSI_Anxiety 18 1966 2.78 0.54 2.83 2.78 0.49 1.33 4.83 3.50
## BSI_Hostility 19 1966 2.26 0.65 2.20 2.21 0.59 1.00 5.00 4.00
## BSI_PhobicAnxiety 20 1966 2.33 0.59 2.20 2.30 0.59 1.00 5.00 4.00
## BSI_ParanoidId 21 1966 2.53 0.66 2.40 2.51 0.59 1.00 5.00 4.00
## BSI_Psychotiscism 22 1966 2.69 0.59 2.60 2.68 0.59 1.00 4.60 3.60
## GSI 23 1966 2.61 0.27 2.58 2.60 0.25 1.91 3.98 2.08
## skew kurtosis se
## MOGQ_Social 0.03 -0.41 0.02
## MOGQ_Escape -0.02 -0.43 0.02
## MOGQ_Competition 0.02 -0.38 0.02
## MOGQ_Coping 0.02 -0.31 0.02
## MOGQ_SkillDev 0.02 -0.27 0.02
## MOGQ_Fantasy -0.04 -0.37 0.02
## MOGQ_Recreation -0.03 -0.48 0.02
## POGQ_Preoccupation 0.14 -0.52 0.02
## POGQ_Immersion 0.04 -0.37 0.02
## POGQ_Withdrawal 0.47 0.35 0.02
## POGQ_Overuse 0.03 -0.53 0.02
## POGQ_IntConflicts 0.02 -0.66 0.02
## POGQ_SocIsolation -0.08 -0.46 0.02
## BSI_Somatization -0.05 -0.14 0.01
## BSI_ObsComp 0.06 -0.16 0.01
## BSI_IntpersSens 0.12 -0.21 0.02
## BSI_Depression 0.81 0.36 0.02
## BSI_Anxiety 0.04 -0.19 0.01
## BSI_Hostility 0.82 1.06 0.01
## BSI_PhobicAnxiety 0.58 0.61 0.01
## BSI_ParanoidId 0.38 0.04 0.01
## BSI_Psychotiscism 0.06 -0.20 0.01
## GSI 0.68 0.64 0.01
## --------------------------------------------------------
## Heavy_use: more than 4 h/day
## Problematic: non-disordered
## vars n mean sd median trimmed mad min max range
## MOGQ_Social 1 667 3.01 0.71 3.00 3.01 0.74 1.25 4.75 3.50
## MOGQ_Escape 2 667 3.02 0.68 3.00 3.04 0.74 1.00 4.75 3.75
## MOGQ_Competition 3 667 3.01 0.69 3.00 3.00 0.74 1.25 5.00 3.75
## MOGQ_Coping 4 667 3.00 0.68 3.00 3.00 0.74 1.00 4.75 3.75
## MOGQ_SkillDev 5 667 3.04 0.70 3.00 3.05 0.74 1.00 4.75 3.75
## MOGQ_Fantasy 6 667 2.99 0.69 3.00 2.99 0.74 1.00 5.00 4.00
## MOGQ_Recreation 7 667 2.97 0.82 3.00 2.96 0.99 1.00 5.00 4.00
## POGQ_Preoccupation 8 667 2.96 0.91 3.00 2.98 0.74 1.00 5.00 4.00
## POGQ_Immersion 9 667 2.99 0.70 3.00 2.97 0.74 1.25 5.00 3.75
## POGQ_Withdrawal 10 667 2.58 0.72 2.50 2.55 0.74 1.00 4.75 3.75
## POGQ_Overuse 11 667 3.09 0.82 3.00 3.08 0.99 1.00 5.00 4.00
## POGQ_IntConflicts 12 667 2.96 0.93 3.00 2.97 0.74 1.00 5.00 4.00
## POGQ_SocIsolation 13 667 3.04 0.82 3.00 3.04 0.99 1.00 5.00 4.00
## BSI_Somatization 14 667 3.00 0.54 3.00 3.00 0.64 1.43 4.57 3.14
## BSI_ObsComp 15 667 2.82 0.55 2.83 2.82 0.49 1.33 4.80 3.47
## BSI_IntpersSens 16 667 2.73 0.68 2.75 2.73 0.74 1.00 5.00 4.00
## BSI_Depression 17 667 2.36 0.78 2.17 2.30 0.74 1.00 5.00 4.00
## BSI_Anxiety 18 667 2.77 0.57 2.83 2.77 0.49 1.17 4.40 3.23
## BSI_Hostility 19 667 2.33 0.70 2.20 2.28 0.59 1.00 5.00 4.00
## BSI_PhobicAnxiety 20 667 2.34 0.60 2.20 2.31 0.59 1.00 5.00 4.00
## BSI_ParanoidId 21 667 2.60 0.64 2.60 2.58 0.59 1.00 4.60 3.60
## BSI_Psychotiscism 22 667 2.71 0.62 2.60 2.71 0.59 1.20 4.50 3.30
## GSI 23 667 2.65 0.29 2.62 2.63 0.28 1.94 3.75 1.81
## skew kurtosis se
## MOGQ_Social 0.05 -0.46 0.03
## MOGQ_Escape -0.23 -0.31 0.03
## MOGQ_Competition 0.05 -0.28 0.03
## MOGQ_Coping -0.04 -0.16 0.03
## MOGQ_SkillDev -0.09 -0.33 0.03
## MOGQ_Fantasy 0.06 -0.20 0.03
## MOGQ_Recreation 0.07 -0.34 0.03
## POGQ_Preoccupation -0.16 -0.67 0.04
## POGQ_Immersion 0.14 -0.39 0.03
## POGQ_Withdrawal 0.41 -0.06 0.03
## POGQ_Overuse 0.07 -0.37 0.03
## POGQ_IntConflicts -0.04 -0.43 0.04
## POGQ_SocIsolation -0.01 -0.54 0.03
## BSI_Somatization -0.08 -0.13 0.02
## BSI_ObsComp -0.01 -0.18 0.02
## BSI_IntpersSens 0.03 -0.12 0.03
## BSI_Depression 0.69 0.14 0.03
## BSI_Anxiety 0.04 -0.40 0.02
## BSI_Hostility 0.75 0.82 0.03
## BSI_PhobicAnxiety 0.59 0.79 0.02
## BSI_ParanoidId 0.30 -0.12 0.02
## BSI_Psychotiscism 0.07 -0.45 0.02
## GSI 0.61 0.44 0.01
## --------------------------------------------------------
## Heavy_use: less than or equal to 4 h/day
## Problematic: disordered
## vars n mean sd median trimmed mad min max range
## MOGQ_Social 1 1936 3.02 0.70 3.00 3.02 0.74 1.00 5.00 4.00
## MOGQ_Escape 2 1936 3.00 0.70 3.00 3.00 0.74 1.00 5.00 4.00
## MOGQ_Competition 3 1936 2.99 0.70 3.00 2.99 0.74 1.00 5.00 4.00
## MOGQ_Coping 4 1936 3.01 0.69 3.00 3.01 0.74 1.00 5.00 4.00
## MOGQ_SkillDev 5 1936 2.99 0.70 3.00 2.99 0.74 1.00 5.00 4.00
## MOGQ_Fantasy 6 1936 3.01 0.69 3.00 3.01 0.74 1.00 5.00 4.00
## MOGQ_Recreation 7 1936 2.99 0.84 3.00 2.99 0.99 1.00 5.00 4.00
## POGQ_Preoccupation 8 1936 2.71 0.88 2.50 2.69 0.74 1.00 5.00 4.00
## POGQ_Immersion 9 1936 3.02 0.71 3.00 3.02 0.74 1.00 5.00 4.00
## POGQ_Withdrawal 10 1936 2.38 0.67 2.25 2.36 0.74 1.00 5.00 4.00
## POGQ_Overuse 11 1936 3.01 0.85 3.00 3.02 0.99 1.00 5.00 4.00
## POGQ_IntConflicts 12 1936 3.01 1.00 3.00 3.01 0.74 1.00 5.00 4.00
## POGQ_SocIsolation 13 1936 3.00 0.80 3.00 3.01 0.99 1.00 5.00 4.00
## BSI_Somatization 14 1936 3.01 0.54 3.00 3.01 0.64 1.29 4.86 3.57
## BSI_ObsComp 15 1936 2.79 0.56 2.83 2.79 0.49 1.00 4.80 3.80
## BSI_IntpersSens 16 1936 2.68 0.68 2.75 2.67 0.74 1.00 5.00 4.00
## BSI_Depression 17 1936 2.30 0.73 2.17 2.23 0.74 1.00 5.00 4.00
## BSI_Anxiety 18 1936 2.80 0.57 2.83 2.80 0.49 1.17 4.83 3.67
## BSI_Hostility 19 1936 2.24 0.62 2.20 2.20 0.59 1.00 4.60 3.60
## BSI_PhobicAnxiety 20 1936 2.33 0.58 2.40 2.31 0.59 1.00 5.00 4.00
## BSI_ParanoidId 21 1936 2.55 0.62 2.60 2.53 0.59 1.00 5.00 4.00
## BSI_Psychotiscism 22 1936 2.66 0.60 2.60 2.65 0.59 1.00 4.75 3.75
## GSI 23 1936 2.62 0.26 2.58 2.60 0.25 1.98 3.62 1.64
## skew kurtosis se
## MOGQ_Social 0.05 -0.36 0.02
## MOGQ_Escape 0.00 -0.36 0.02
## MOGQ_Competition 0.01 -0.30 0.02
## MOGQ_Coping 0.01 -0.31 0.02
## MOGQ_SkillDev 0.00 -0.42 0.02
## MOGQ_Fantasy -0.06 -0.28 0.02
## MOGQ_Recreation 0.02 -0.47 0.02
## POGQ_Preoccupation 0.16 -0.49 0.02
## POGQ_Immersion -0.02 -0.40 0.02
## POGQ_Withdrawal 0.44 0.24 0.02
## POGQ_Overuse -0.04 -0.56 0.02
## POGQ_IntConflicts -0.06 -0.65 0.02
## POGQ_SocIsolation -0.02 -0.32 0.02
## BSI_Somatization 0.01 0.02 0.01
## BSI_ObsComp 0.08 -0.11 0.01
## BSI_IntpersSens 0.12 -0.23 0.02
## BSI_Depression 0.85 0.66 0.02
## BSI_Anxiety 0.15 -0.07 0.01
## BSI_Hostility 0.67 0.60 0.01
## BSI_PhobicAnxiety 0.43 0.50 0.01
## BSI_ParanoidId 0.37 0.40 0.01
## BSI_Psychotiscism 0.10 -0.18 0.01
## GSI 0.66 0.58 0.01
## --------------------------------------------------------
## Heavy_use: more than 4 h/day
## Problematic: disordered
## vars n mean sd median trimmed mad min max range
## MOGQ_Social 1 707 3.03 0.71 3.00 3.03 0.74 1.25 5.00 3.75
## MOGQ_Escape 2 707 3.00 0.71 3.00 3.01 0.74 1.00 5.00 4.00
## MOGQ_Competition 3 707 2.99 0.69 3.00 2.99 0.74 1.25 4.75 3.50
## MOGQ_Coping 4 707 3.02 0.70 3.00 3.03 0.74 1.00 4.75 3.75
## MOGQ_SkillDev 5 707 3.01 0.70 3.00 3.01 0.74 1.00 5.00 4.00
## MOGQ_Fantasy 6 707 2.94 0.69 3.00 2.93 0.74 1.00 4.75 3.75
## MOGQ_Recreation 7 707 2.97 0.86 3.00 2.97 0.99 1.00 5.00 4.00
## POGQ_Preoccupation 8 707 2.92 0.92 3.00 2.92 0.74 1.00 5.00 4.00
## POGQ_Immersion 9 707 3.03 0.70 3.00 3.04 0.74 1.00 5.00 4.00
## POGQ_Withdrawal 10 707 2.49 0.72 2.50 2.47 0.74 1.00 4.75 3.75
## POGQ_Overuse 11 707 3.03 0.81 3.00 3.03 0.99 1.00 5.00 4.00
## POGQ_IntConflicts 12 707 3.01 0.99 3.00 3.01 0.74 1.00 5.00 4.00
## POGQ_SocIsolation 13 707 3.02 0.81 3.00 3.01 0.99 1.00 5.00 4.00
## BSI_Somatization 14 707 3.01 0.54 3.00 3.01 0.64 1.29 4.57 3.29
## BSI_ObsComp 15 707 2.86 0.58 2.83 2.86 0.49 1.33 5.00 3.67
## BSI_IntpersSens 16 707 2.73 0.66 2.75 2.72 0.74 1.00 4.75 3.75
## BSI_Depression 17 707 2.43 0.82 2.33 2.36 0.74 1.00 5.00 4.00
## BSI_Anxiety 18 707 2.79 0.55 2.83 2.78 0.49 1.33 4.67 3.33
## BSI_Hostility 19 707 2.33 0.70 2.20 2.28 0.59 1.00 4.50 3.50
## BSI_PhobicAnxiety 20 707 2.38 0.60 2.40 2.35 0.59 1.00 5.00 4.00
## BSI_ParanoidId 21 707 2.64 0.68 2.60 2.62 0.59 1.00 4.67 3.67
## BSI_Psychotiscism 22 707 2.70 0.59 2.60 2.69 0.59 1.00 4.75 3.75
## GSI 23 707 2.67 0.29 2.64 2.65 0.28 1.98 3.59 1.61
## skew kurtosis se
## MOGQ_Social -0.07 -0.38 0.03
## MOGQ_Escape -0.05 -0.24 0.03
## MOGQ_Competition 0.12 -0.27 0.03
## MOGQ_Coping -0.09 -0.45 0.03
## MOGQ_SkillDev 0.01 0.01 0.03
## MOGQ_Fantasy 0.04 -0.35 0.03
## MOGQ_Recreation 0.02 -0.48 0.03
## POGQ_Preoccupation 0.03 -0.67 0.03
## POGQ_Immersion -0.01 -0.39 0.03
## POGQ_Withdrawal 0.33 -0.18 0.03
## POGQ_Overuse 0.07 -0.43 0.03
## POGQ_IntConflicts 0.02 -0.68 0.04
## POGQ_SocIsolation 0.08 -0.46 0.03
## BSI_Somatization -0.08 -0.28 0.02
## BSI_ObsComp 0.07 0.04 0.02
## BSI_IntpersSens 0.18 -0.27 0.02
## BSI_Depression 0.66 -0.09 0.03
## BSI_Anxiety 0.09 -0.25 0.02
## BSI_Hostility 0.66 0.33 0.03
## BSI_PhobicAnxiety 0.51 0.51 0.02
## BSI_ParanoidId 0.18 -0.18 0.03
## BSI_Psychotiscism 0.10 0.06 0.02
## GSI 0.51 0.03 0.01
A változóink eloszlását még könnyebben ellenőrizhetnénk ábrák készítésével. Ezt ezúttal - később kifejtett indok miatt - az elemzési részben tesszük meg.
Végső adattábla elkészítése
Néhány lépés még mindig hiányzik. Az elemzéseinkhez szükség lesz a 'Heavy_use' és a 'Problematic' változókra is, illetve előnyös lehet megtartani a személyi azonosítókat is ('Sorszám' változó), ezeket viszont a skalapontok
objektum nem tartalmazza. Nem kell kétségbe esni, a rendelkezésre álló adatstruktúrákból a végső adattábla a tanult művelettel létrehozható:
final_dat <- data.frame(skalapontok,
dat[, c("Sorszam", "Heavy_use", "Problematic")])
Döntést kell hoznunk arról is, hogy mi legyen a hiányzó értékekkel rendelkező személyeinkkel. Az egyik megoldás az lenne, ha valamilyen módszerrel imputálnánk ("pótolnánk") a hiányzó adatokat. A másik megoldás az, hogy a hiányzó értékkel rendelkező sorokat egyszerűen kihagyjuk az elemzésből. Most az utóbbi megoldást választjuk:
final_dat <- na.omit(final_dat)
(Az na.omit()
függvény nemcsak kihagyja a hiányzó értékkel rendelkező sorokat, hanem egy külön attribútumban [lásd attr(final_dat, "na.action")
] eltárolja a kihagyott sorok sorszámát is.)
Ne feledjük, az elemzéseket a standardizált skálapontszámokon kell majd végeznünk. A standardizálás nagyon egyszerűen elvégezhető a scale()
függvénnyel:
# standardizálandó változók:
skala_nevek <- colnames(skalapontok)
final_dat[, skala_nevek] <- scale(final_dat[, skala_nevek])
Innentől tényleg nem marad más hátra, mint elmenteni a végső adattáblánkat, majd hozzákezdeni az adatok elemzéséhez.
# adattable mentese
saveRDS(final_dat,
file = file.path("data", "prepared_data.rds"))
A teljes szkript
A könnyebb futtathatóság végett közöljük a végleges előkészítő szkriptet (csak a tényleges átalakításokat végző lépésekkel):
# beolvasás
library(foreign)
dat <- read.spss(file.path("data", "gaming_random.sav"),
to.data.frame = TRUE)
# integer-ré alakítás
likert_valtozok <- grep("MOGQ|POGQ|BSI",
colnames(dat),
value = TRUE)
for (i in likert_valtozok) {
dat[, i] <- as.integer(dat[, i])
}
# skáladefiníciók
skala_definiciok <- list(
MOGQ_Social = c("MOGQ1", "MOGQ8", "MOGQ15", "MOGQ22"),
MOGQ_Escape = c("MOGQ2", "MOGQ9", "MOGQ16", "MOGQ23"),
MOGQ_Competition = c("MOGQ3", "MOGQ10", "MOGQ17", "MOGQ24"),
MOGQ_Coping = c("MOGQ4", "MOGQ11", "MOGQ18", "MOGQ25"),
MOGQ_SkillDev = c("MOGQ5", "MOGQ12", "MOGQ19", "MOGQ26"),
MOGQ_Fantasy = c("MOGQ6", "MOGQ13", "MOGQ20", "MOGQ27"),
MOGQ_Recreation = c("MOGQ7", "MOGQ14", "MOGQ21"),
POGQ_Preoccupation = c("POGQ1", "POGQ7"),
POGQ_Immersion = c("POGQ2", "POGQ8", "POGQ13", "POGQ17"),
POGQ_Withdrawal = c("POGQ3", "POGQ9", "POGQ14", "POGQ18"),
POGQ_Overuse = c("POGQ4", "POGQ10", "POGQ15"),
POGQ_IntConflicts = c("POGQ5", "POGQ11"),
POGQ_SocIsolation = c("POGQ6", "POGQ12", "POGQ16"),
BSI_Somatization = c("BSI2", "BSI7", "BSI23", "BSI29", "BSI30", "BSI33", "BSI37"),
BSI_ObsComp = c("BSI5", "BSI15", "BSI26", "BSI27", "BSI32", "BSI36"),
BSI_IntpersSens = c("BSI20", "BSI21", "BSI22", "BSI42"),
BSI_Depression = c("BSI9", "BSI16", "BSI17", "BSI18", "BSI35", "BSI50"),
BSI_Anxiety = c("BSI1", "BSI12", "BSI19", "BSI38", "BSI45", "BSI49"),
BSI_Hostility = c("BSI6", "BSI13", "BSI40", "BSI41", "BSI46"),
BSI_PhobicAnxiety = c("BSI8", "BSI28", "BSI31", "BSI43", "BSI47"),
BSI_ParanoidId = c("BSI4", "BSI10", "BSI24", "BSI48", "BSI51"),
BSI_Psychotiscism = c("BSI3", "BSI14", "BSI34", "BSI44", "BSI53"),
GSI = c("BSI1", "BSI2", "BSI3", "BSI4", "BSI5", "BSI6", "BSI7", "BSI8", "BSI9", "BSI10", "BSI11", "BSI12", "BSI13", "BSI14", "BSI15", "BSI16", "BSI17", "BSI18", "BSI19", "BSI20", "BSI21", "BSI22", "BSI23", "BSI24", "BSI25", "BSI26", "BSI27", "BSI28", "BSI29", "BSI30", "BSI31", "BSI32", "BSI33", "BSI34", "BSI35", "BSI36", "BSI37", "BSI38", "BSI39", "BSI40", "BSI41", "BSI42", "BSI43", "BSI44", "BSI45", "BSI46", "BSI47", "BSI48", "BSI49", "BSI50", "BSI51", "BSI52", "BSI53")
)
# skálapontszámok számítása
skalapontok <- lapply(skala_definiciok,
function(itemek) {
rowMeans(dat[, itemek],
na.rm = TRUE)
}
)
skalapontok <- as.data.frame(skalapontok)
# végső adattábla
final_dat <- data.frame(skalapontok,
dat[, c("Sorszam", "Heavy_use", "Problematic")])
final_dat <- na.omit(final_dat)
skala_nevek <- colnames(skalapontok)
final_dat[, skala_nevek] <- scale(final_dat[, skala_nevek])
# mentés
saveRDS(final_dat,
file = file.path("data", "prepared_data.rds"))