Visitor Counter

četvrtak, 21. svibnja 2020.

Obrada podataka primijenjenog istraživanja II. (zavirimo ispod haube!)

Vidjet ćete i sami da znanstvenici pokušavaju pojednostaviti svijet čim više (recimo na crno i bijelo), ispitanicima je nekako uvijek najdraža jedna od 50 nijansi sive stoga se moramo potruditi da upitnikom zahvatimo svačiju nijansu sive boje!


Uvod

Obzirom da se radi o jubilarnom postu, danas nešto drukčije. Naučili smo nešto novo od zadnjeg “Primijenjenog istraživanja” kad smo (neznajući) napravili i ANOVA-u i t-test i regresijsku analizu. E, pa danas ćemo objediniti znanje o koeficijentu korelacije i to gledajući kroz staklo (ili haubu, kako hoćete) što i kako se radi. Ne budite strogi, prvi put mi je (da blog pišem direktno u R-u, da! i to se može!).
Kao i zadnji put s konobarima i napojnicama, danas ćemo se praviti da nas zanima možemo li predvidjeti jednu crtu ličnosti ako znamo količinu druge crte ličnosti kod pojedinca. Kao što ste nekad negdje čuli, vidjeli ili znate, prema nekim autorima, ljudi se razlikuju (osim po visini, težini itd.) i po tome 
koliko su društveni (i.e. koliko vole ljude),
koliko su zabrinuti (i.e. oko toga da ne znaju dovoljno statistike da bi zaveli top-žensku [ili muškarca!]),
koliko vole iskušavati nove stvari (i.e. prilaziti zgodnim ženama [ili muškarcima!] bez da znaju što je to koeficijent korelacije),
koliko su ugodno društvo (i.e. kontrolirajući njihovo znanje o standardnoj devijaciji) i
koliko su savjesni (i.e. koliko su vremena i truda voljni posvetiti učenju statistike kako bi postali sex-mašine).
Ako ste pratili, ukupno ih je 5. Iako o tome nismo prije govorili (ali ubrzo ćemo), ne možemo pitati zgodnu ženu “Ej, ti se sviđam?”. Zašto ne (pitali bi oni naivniji među vama)? Pa zato, kralju, jer će ti prvo reći NE (bez obzira sviđaš li joj se ili ne) jer tko to pita a i kao drugo, pitanje nije precizno postavljeno!
Što te zanima sviđa li joj se na tebi? Jer da pitaš svoju majku svaku moguću svoju karakteristiku da procijeni koliko joj se sviđa od 1-5 neće za sve reći 5! Dakle, čak i da je nekad kasnije u životu osvojiš, to što gledaš indijske Youtubere i hrvatske blogove o statistici neće joj se svidjeti. Hmmm (i dalje će uporno naivniji među vama), dakle, da je samo pitam one stvari koje bi mogla reći da joj se sviđaju? Neeee kralju, ne pratiš! Cilj (i tvoj i) znanosti je doći do istine. Ona je (neznam kako prevesti elegantno ali more often than not) ružna. Što bi se dogodilo da pitaš tu odabranice mozga tvoga (jer nećemo podržavati da je srce zaduženo za emocije jer je za sve odgovoran mozak) “Sviđa li ti se što vozim BeMVeja?” i ona kaže 5!
Onda je pitaš: “Sviđa li ti se što sam fakultetski obrazovan?” i ona kaže 5! I zadnje pitanje, "Sviđa li ti se što mogu na benchu dignut 150 kg?" i ona opet uzvikne 5! (Naivno) zaključuješ da te obožava. No, što kad bi je pitao “Sviđa li ti se što auto nije moj nego od prijatelja?” ili “Sviđa li ti se što sam istetovirao gospu na lopaticu?” i ključno pitanje: “Sviđa li ti se što nemam pojma što je to koeficijent korelacije?”
U (tvom) najboljem slučaju imat ćeš podjednak broj stvari koje joj se sviđaju na tebi i i onih koje joj se ne sviđaju na tebi. Iako (kao što sam najavio) je to ružno čuti, lijepo je, jer je istinito a trebali bismo težiti istini gdje god možemo i kad god možemo.
No, dobro, dosta predigre, vrijeme je da razbuktamo strasti! Nadam se da je ova kratka, poučna, i nadasve izmišljena priča, poslužila svrsi a ta je da ne možemo ništa saznati pitajući (samo) jedno pitanje već nečemu neopipljivom (a to je više manje sve u psihologiji) pristupamo iz raznih kuteva. Pa tako i baza podataka koju ćemo koristiti za potrebe ovog bloga se sastoji od 25 pitanja kojima mjerimo 5 crta ličnosti (iako ste pretpostavili a niste znali, dobro ste pretpostavili - po 5 pitanja mjere svaku od crta ličnosti). Kako bih htio da ovo bude baš (baš) praktičan primjer, ovdje ćete dobiti sve potrebno kako biste napravili sve analize koje sam i ja napravio. Iako ovo nije vaš go-to program za obrade podataka, izazivam vas (osokolio sam se jer sam vidio da imam 5 čitaoca bloga) da komentirate ispod ukoliko bi vam bilo potrebno ovaj isti post napraviti u SPSS-u! Dok ne komentirate - ništa, osuđeni ste na R!

Zaplet

Za početak, trebat će nam baza podataka. Jednu takvu sam našao u programu u kojem (se učim) radim analize (R):
library(psych)
library(dplyr)
library(ggplot2)
library(reshape2)
library(cowplot)
library(xtable)
library(ggstatsplot)
Ovaj dio (library) zanemarite ako nećete provoditi iste analize. psych, dplyr… su tzv. paketi. Paketi sadrže naredbe kojima provodimo određene analize. Kako bismo mogli provesti naredbu iz određenog paketa prvo ga moramo instalirati install.packages() i attachati (učitati) ih s naredbom
library(). Neki paketi sadrže i baze podataka za vježbu. Konkretno ova koju koristimo pripada psych paketu (ja mislim). Ime baze je bfi (što označava Big Five Inventory) te se u njoj nalaze odgovori 2800 ispitanika na upitnik ličnosti uz podatke o dobi, spolu i obrazovanju. 28 stupaca (25 pitanja + 3 sociodemografska pitanja) i 2800 redove (jer je toliko ispitanika). Budući mi je to malo previše, ja sam (nasumično) odabrao 100 ispitanika iz te baze podataka:
set.seed(123)
index <- sample(1:nrow(bfi), 100)  #Uzeo sam 100 ispitanika
df<-bfi[index,]
Što nam je cilj, odnosno što su nam današnji ciljevi?
1. Naučiti da su varijable (najčešće) zbrojevi nekoliko pitanja.
2. Naučiti što se događa kada ispitanik ne odgovori na jedno jedino pitanje.
3. Osjetiti gušt kada postavimo hipotezu unaprijed te ju potvrdimo svojim istraživanjem.
Recimo da smo 1. zadatak ispunili… Krenimo na sljedeća dva. Imamo bazu podataka (pravimo se da smo ispitali 100 ljudi. Ispunili su upitni od 25 čestica, mjerenih na skali 1-6 gdje 1 označava neslaganje a 6-slaganje s nekim tvrdnjama za koje se nadamo da obilježavaju pojedinu crtu ličnosti). Prije nego išta odlučimo što i kako s tom bazom podataka, pogledajmo da vidimo jesu li nam ispitanici bili savjesni (jesu li svi na sva pitanja odgovorili):
describe (df,skew=F,ranges=F) #skew i ranges mi ne treba pa sam rekao programu     #FALSE na (nepostavljeno) pitanje "Da ti prikazujem i skew i ranges?"
##           vars   n  mean    sd   se
## A1           1 100  2.31  1.34 0.13
## A2           2  99  4.92  1.04 0.10
## A3           3 100  4.68  1.32 0.13
## A4           4 100  4.71  1.60 0.16
## A5           5 100  4.66  1.30 0.13
## C1           6 100  4.50  1.21 0.12
## C2           7  98  4.38  1.34 0.13
## C3           8 100  4.29  1.37 0.14
## C4           9  99  2.60  1.41 0.14
## C5          10  98  3.38  1.67 0.17
## E1          11 100  2.99  1.67 0.17
## E2          12 100  3.26  1.63 0.16
## E3          13 100  3.99  1.46 0.15
## E4          14 100  4.41  1.52 0.15
## E5          15  99  4.56  1.33 0.13
## N1          16 100  3.07  1.67 0.17
## N2          17  99  3.46  1.66 0.17
## N3          18 100  3.23  1.58 0.16
## N4          19 100  3.28  1.64 0.16
## N5          20  99  3.05  1.78 0.18
## O1          21  99  4.77  1.19 0.12
## O2          22 100  2.80  1.83 0.18
## O3          23 100  4.59  1.14 0.11
## O4          24  99  4.94  1.20 0.12
## O5          25 100  2.41  1.39 0.14
## gender      26 100  1.73  0.45 0.04
## education   27  90  3.37  1.14 0.12
## age         28 100 29.62 11.59 1.16
 vars je redni broj varijable (zapravo čestice, varijable se sastoje od čestica a to su pitanja/tvrdnje na koje ispitanici odgovaraju,
n je broj odgovora u toj varijabli,
mean je aritmetička sredina,
sd je standardna devijacaija a
se je standardna pogreška aritmetičke sredine [sjećate se posta o izborima - gdje bi se 95 aritmetičkih sredina od 100 testiranih uzoraka nalazila])
I vidimo da u većini varijabli imamo odgovore svih ispitanika no u nekima nam nedostaje odgovor-dva. Iako bi i to poslužilo da se upoznate s važnosti kompletnih upitnika, mislim da će najlakše biti ako imamo samo jedno promašeno pitanje od jednog jedinog ispitanika. Stoga sam morao popuniti nekako te odgovore koji nedostaju a to sam napravio tako da gdje god nedostaje odgovor sam upisao aritmetičku sredinu tog stupca (zato što ću tako najmanje pogriješiti, no to nije jedini način obračunavanja s missinzima ali o tom-po tom):
for(i in 1:25){
  df[is.na(df[,i]), i] <- mean(df[,i], na.rm = TRUE)  
#Pazite da umjesto df napišete ime svoje baze podataka#Možete je slobodno nazvati df ali i Petar_Kresimir.. kako god
}
Vjerujući mi na riječ da smo ovim postupkom zamijenili sve vrijednosti koje nedostaju s aritmetičkom sredinom tog stupca, preostaje nam na silu izbrisati jedan odgovor jednog ispitanika i odmah provjeriti jesmo li uspjeli, dakle u A1 čestici bismo trebali imati 99 odgovora a u svim drugima 100:
df[1,1]<-NA #NA označava vrijednost koja nedostaje - No Answer

describe(df,skew=F,ranges=F)
##           vars   n  mean    sd   se
## A1           1  99  2.32  1.34 0.13
## A2           2 100  4.92  1.03 0.10
## A3           3 100  4.68  1.32 0.13
## A4           4 100  4.71  1.60 0.16
## A5           5 100  4.66  1.30 0.13
## C1           6 100  4.50  1.21 0.12
## C2           7 100  4.38  1.32 0.13
## C3           8 100  4.29  1.37 0.14
## C4           9 100  2.60  1.41 0.14
## C5          10 100  3.38  1.65 0.17
## E1          11 100  2.99  1.67 0.17
## E2          12 100  3.26  1.63 0.16
## E3          13 100  3.99  1.46 0.15
## E4          14 100  4.41  1.52 0.15
## E5          15 100  4.56  1.33 0.13
## N1          16 100  3.07  1.67 0.17
## N2          17 100  3.46  1.65 0.17
## N3          18 100  3.23  1.58 0.16
## N4          19 100  3.28  1.64 0.16
## N5          20 100  3.05  1.77 0.18
## O1          21 100  4.77  1.19 0.12
## O2          22 100  2.80  1.83 0.18
## O3          23 100  4.59  1.14 0.11
## O4          24 100  4.94  1.20 0.12
## O5          25 100  2.41  1.39 0.14
## gender      26 100  1.73  0.45 0.04
## education   27  90  3.37  1.14 0.12
## age         28 100 29.62 11.59 1.16                              
Sljedeći korak nam je onda izračunati varijable ličnosti. Imamo ih 5: Savjesnost, Ugodnost, Ekstraverzija, Neuroticizam i Otvorenost iskustvima. Svaka je zbroj odgovora na 5 pitanja koja mjere svaku od njih:
df$Otvorenost<-df$O1+df$O2+df$O3+df$O4+df$O5    #Da, tako je jednostavno. Dakle,  #_________________________________________________samo kazete da u bazi 
df$Ugodnost<-df$A1+df$A2+df$A3+df$A4+df$A5      #podataka pod nazivom df, želite #_________________________________________________napraviti novu 
df$Neuroticizam<-df$N1+df$N2+df$N3+df$N4+df$N5  #varijablu $Ugodnost (npr.) Koju #_________________________________________________definiramo kao zbroj 
df$Savjesnost<-df$C1+df$C2+df$C3+df$C4+df$C5    #odgovora na te i te čestice u ba#_________________________________________________zi df
df$Ekstraverzija<-df$E1+df$E2+df$E3+df$E4+df$E5 #još jednom-tako je jednostavno!
Radi preglednosti ćemo izbacit iz baze čestice (pitanja) od kojih smo napravili varijable. Sjetimo se prvog posta, tablica je određena brojem redaka i brojem stupaca [prvo retci jer retki nađu redke a i slovo "R" nalazi se ispred slova "S" u abecedi]. E pa uglata zagrada je gledanje unutra. Pa ovo znači da zadržavamo sve redove (jer ispred zareza nismo napisali koje redove želimo zadržati) i da nam trebaju samo stupci od 26. od to 33. a to su tri sociodemografske varijable i pet crta ličnosti te pogledamo na što to liči:
df_netto<-df[,26:33] 

describe(df_netto,skew=F,ranges=F)
##               vars   n  mean    sd   se
## gender           1 100  1.73  0.45 0.04
## education        2  90  3.37  1.14 0.12
## age              3 100 29.62 11.59 1.16
## Otvorenost       4 100 19.51  3.05 0.30
## Ugodnost         5  99 21.25  3.81 0.38
## Neuroticizam     6 100 16.10  6.56 0.66
## Savjesnost       7 100 19.14  2.85 0.29
## Ekstraverzija    8 100 19.21  2.95 0.30

Rasplet

Dakle, stanje je ovakvo. Osim varijable Edukacija (koju ionako nećemo koristiti) svi ispitanici su odgovorili na sva pitanja osim jednog (sjećate se, ja sam mu izbrisao odgovor). Obzirom da sam izbrisao odgovor na jedno (od pet) pitanja koja mjere Ugodnost, nismo mu mogli izmjeriti Ugodnost, stoga imamo 99 rezultata od Ugodnosti i po 100 za ostale crte ličnost.
Iako je prečesto zanemaren dio, sve najprije treba vizualizirati da dobijemo ideju što se događa s našim varijablama. Ono na što ćete najčešće naići su deskriptivni podaci (kao u gornjoj tablici gdje imate aritmetičku sredinu i standardnu devijaciju pa onda morate sami u glavi zamišljati kako te varijable izgledaju) no zar nije ljepše i preglednije da nam program nacrta ono što nas zanima?
#library(reshape2)
df_L<-df_netto[4:8]   #Za one koji žele znati više, samo malo okrećem podatke da mi
df_L<-melt(df_L)      #ih je lakše prikazati.
## No id variables; using all as measure variables
Vrijeme je za malo crtanja :) ( napokon!)
ggplot(df_L,aes(x=value, fill=variable)) + 
  geom_density(alpha=0.25)+
  theme_cowplot(font_size = 12)+
  xlab("Prosječan rezultat na crti ličnosti")+
  ylab("Distribucija podataka")
## Warning: Removed 1 rows containing non-finite values (stat_density).
ggplot(df_L,aes(x=variable, y=value, fill=variable)) + 
  geom_boxplot()+
  theme_cowplot(font_size=12)+
  xlab("Crta ličnosti")+
  ylab("Prosječni rezultat na crti ličnosti")
## Warning: Removed 1 rows containing non-finite values (stat_boxplot).
Prvo i prvo, ova dva grafa su jednaka. Dakle, gledate li jedan ili drugi - jednak zaključak ćete donijeti. Ako obratite pozornost, vidjet ćete Warning da je jedan rezultat izbrisan (odnosno nije prikazan na grafovima). Pretpostavljam da znamo o kome se radi… Sjećamo se posta o boxplotu (kad smo pričali o mjerama raspršenja tamo još na početku). Sjećamo se da su ove točkice izvan “brkova” extremno visoki/niski rezultati (u odnosu na uzorak). Isto tako se sjećamo da obzirom na veličinu box-ova a pogotovo brkova možemo dobiti uvid u to koliko se ljudi razlikuju obzirom na pojedine crte ličnosti pa tako npr. najviše se razlikujemo na Neuroticizmu a najhomogeniji smo na Ekstraverziji (iako kod Ekstraverzije) imamo najviše ekstremnih rezultata.
Sljedeće što nas zanima je jesu li crte ličnosti povezane/korelirane. Što bismo očekivali pronaći? Razmisilte sami za sebe, za koju crtu očekujete da postoji značajna povezanost (viši rezultati u jednoj crti prate više rezultate u drugoj crti)? Po meni, djeluje mi plauzibilno da je netko tko je ekstrovertiran i otvoreniji iskustvima. Postavit ću samo tu, jednu, hipotezu a ostale veze ćemo promatrati očima djeteta :)
mcor<-round(cor(df_netto[,3:8]),2)
upper<-mcor
upper[upper.tri(mcor)]<-""
upper<-as.data.frame(upper)
upper
##                 age Otvorenost Ugodnost Neuroticizam Savjesnost Ekstraverzija
## age               1                                                          
## Otvorenost     0.02          1                                               
## Ugodnost       <NA>       <NA>        1                                      
## Neuroticizam  -0.06       0.22     <NA>            1                         
## Savjesnost     0.16        0.1     <NA>         0.36          1              
## Ekstraverzija   0.1       0.28     <NA>         0.28       0.24             1
Imam dobru i lošu vijest. Dobra je da sam bio u pravu, netko tko je ekstorvertiran je i otvoreniji iskustvima (r = 0,28). Iako ta povezanost nije da padneš na guzicu (velika), svejedno je tu. Loša vijest je da mi nedostaju podaci o povezanosti Ugodnosti i ostalih crta ličnosti. Zašto? Zar jedno preskočeno ili nejasno zaokruženo pitanje može dovesti do potpunog izbacivanja cijele varijable? Može, ali ne mora. Postoje razni načini rješavanja problema podataka koji nedostaju. Jedan od njih je da se ispitanik cijeli ignorira i izbriše kao da nije pristupio ispitivanju, drugi je da se ignorira samo u situacijama u kojima postoji missing-odgovor. Defaultno u R-u je da ga se izbacuje kompletna varijabla u kojoj se missing vrijednost nalazi. Ali ako mi damo drukčiju naredbu tada izbacujemo ispitanika iz analiza o kojima se radi (pa npr. izbacujemo ispitanika gdje god koreliramo Ugodnost i ostale crte ličnosti):
mcor<-round(cor(df_netto[,3:8],use="complete.obs"),2) #Ovo complete.obs znači da smo izbacili ispitanika
upper<-mcor                                           #Koji nema rezultat u svim varijablama
upper[upper.tri(mcor)]<-""
upper<-as.data.frame(upper)
upper
##                 age Otvorenost Ugodnost Neuroticizam Savjesnost Ekstraverzija
## age               1                                                          
## Otvorenost     0.02          1                                               
## Ugodnost       0.07       0.09        1                                      
## Neuroticizam  -0.08       0.22      0.1            1                         
## Savjesnost     0.16        0.1     0.18         0.37          1              
## Ekstraverzija   0.1       0.28     0.29         0.28       0.24             1
Riješen problem, sad imamo podatke o korelacijama svih varijabli. Znajući da se koeficijent korelacije kreće od 0 do 1 (ili do -1) ove vrijednosti mi nekako male izgledaju. Možda će biti bolje grafički testirati našu hipotezu da su Otvorenost novim iskustvima i Ekstraverzija povezani:
ggscatterstats(df_netto, Ekstraverzija, Otvorenost,messages=F)
Ovo je baš simpatična funkcija jer nam pokazuje distribucija podataka i po x-osi i po y-osi a usput nam prezentira i vrijednosti Pearsonova koeficijenta korelacije (vidite ga gore r = 0.28) i njegovu značajnost pa čak i interval pouzdanosti od tog koeficijenta korelacije (no kako o njima nismo još pričali zasad ih zanemarite). Nagib pravca (prema gore) nam ukazuje da je povezanost pozitivna a grupiranost točkica (rezultata) oko njega nam vizualno prikazuje kako izgleda korelacija od 0,28.

Zaključak

Ono što nam je preostale je napisati da smo potvrdili našu hipotezu da su ekstrovertirane osobe sklonije iskušavanju novih stvari i još važnije (i zabavnije) objasniti zašto je tome tako. Naravno da bi objašnjenje trebalo biti potkrjepljeno znanstvenom literaturom ali kako se ipak radi o blogu dopustite da zdravorazumski napišem u formi u kojoj bi se i trebalo objašnjavati nalaze.
Činjenicu da su ekstrovertiranije osobe otvorenije iskustvom moguće je objasniti s obje strane. Obzirom da (samo) pomoću koeficijenta korelacije ne možemo tvrditi o utjecaju jednako je plauzibilno objašnjenje da izlaganjem i uživanjem u društvu većeg broja ljudi pojedinac postaje izložen njihovim (pozitivnim) iskustvima koja možda mogu potaknuti osobu da ih i sama iskuša. Alternativno (plauzibilno) objašnjenje moglo bi biti da osoba otvorena iskustvima dolazi u kontakt većeg broja ljudi te je samim time i ekstrovertiranija.
Naravno, sad treba dati preporuku za buduću istraživanja koja bi mogla presuditi što je bilo prvo, jaje ili kokoš na način da iskoristi predložena objašnjenja kao hipoteze za sljedeće radove.
Eto, nadam se da je nešto ostalo od danas pa makar to bio pokušaj replikacije (doslovno copy paste) mog istraživanja ili instalacija novog programa za obradu podataka ili se lampica upalila kako ćete sami pristupiti svom istraživanju. Možda je ostalo da cijeli život treba propitivati, ispitivati i sumnjati u sve i da zato ljude nećemoi jednim pitanjem pitati “Ej, koliko si ti ekstrovertiran?” nego ćemo ga ispitati kroz nekoliko pitanja dajući mu priliku da se izjasni da nekad jest a nekad nije. Vidjet ćete i sami da iako znanstvenici pokušavaju pojednostaviti svijet čim više recimo na crno i bijelo, ispitanicima je nekako uvijek najdraža jedna od 50 nijansi sive stoga se moramo potruditi da upitnikom zahvatimo svačiju nijansu sive boje!
Do sljedećeg puta, Matia

Nema komentara:

Objavi komentar