Jak pracovat s daty TALIS v R Jan Hučín (
[email protected]), červenec 2014
Co je to R? R je svobodný software umožňující statistické zpracování dat pomocí velkého množství metod, a to od základních až po vysoce sofistikované a speciální. Více o prostředí R se dozvíte na oficiální stránce projektu www.r-project.org, v češtině existuje stránka www.r-project.cz. Pokud jste s R dosud nepracovali, pak není vhodné, abyste se ihned pouštěli do zpracování dat TALIS. Nejprve si R vyzkoušejte, naučte se s ním pracovat. Můžete k tomu využít manuály v angličtině (cran.r-project.org/manuals.html). V češtině již existují návody také, např. www.nti.tul.cz/cz/images/7/7d/Navod_R_cesky.pdf.
Ukázkové příkazy R v tomto návodu Standardně se příkazy a funkce prostředí R volají z příkazového řádku. V tomto návodu je příkazová řádka uvozena znakem > na začátku a příkaz rozdělený na víc řádků má na začátku každé nové řádky znak +. Pokud příklady příkazů budete kopírovat, je potřeba tyto znaky smazat. V závislosti na tom, kterou verzi grafického rozhraní pro prostředí R používáte, lze některé operace efektivněji provádět pomocí volby z menu.
Načtení dat TALIS Data TALIS jsou uložena ve formátu SPSS (.sav). Prostředí R ale umí tento formát importovat pomocí funkce read.spss z knihovny foreign. Tato knihovna je součástí standardní instalace prostředí R. Pokud by z jakéhokoliv důvodu ve vaší instalaci chyběla, je možné ji dodatečně instalovat. Před prvním použitím funkce je potřeba knihovnu aktivovat. > library(foreign)
Pokud se objeví chybová hláška: Error in library(foreign) : there is no package called ‘foreign’,
je potřeba knihovnu dodatečně instalovat. K tomu slouží funkce install.packages: > install.packages("foreign")
Je možné, že vám prostředí nabídne výběr místa, odkud má knihovnu stáhnout. V případě úspěchu se objeví něco takového: package ‘foreign’ successfully unpacked and MD5 sums checked
Jestliže se knihovna nenainstalovala, poraďte se s administrátorem svého počítače, možná vám chybí práva k instalaci. Po aktivaci knihovny importujeme data: > Uc = read.spss("data_ucitele.sav",to.data.frame=TRUE)
Je možné, že se objeví nějaké takové varování: Warning messages: 1: In read.spss("data_ucitele.sav", to.data.frame = TRUE) : data_ucitele.sav: Unrecognized record type 7, subtype 14 encountered in system file
Klidně ho ignorujte. Data za dotazníky učitelů byste nyní měli mít načtená v datové matici Uc (můžete si ji samozřejmě nazvat jinak). Podobným způsobem můžete načíst i data za dotazníky ředitelů: > Red = read.spss("data_reditele.sav",to.data.frame=TRUE)
Výpočty v datech TALIS s ohledem na design šetření Po načtení datové matice lze samozřejmě používat všechny funkce prostředí R. Pokud ale chceme z výběrového souboru korektně odhadovat hodnoty pro celou populaci, je potřeba vzít v úvahu komplexní design šetření TALIS. V datech jsou k tomu připraveny váhy jednotlivých pozorování, aby odhady pro populaci nebyly vychýlené. Přesnost odhadů pro populaci se pak stanoví pomocí tzv. Fayových replikací. V datech TALIS jsou váhy pozorování a Fayovy váhy již zkombinovány. Pro data učitelů jsou ve sloupcích TRWGT1 až TRWGT100, pro data ředitelů ve sloupcích SRWGT1 až SRWGT100. Pro výpočty v komplexním designu šetření je v R určena knihovna survey. Není standardní součástí instalace R, a proto je třeba ji před prvním použitím doinstalovat pomocí příkazu install.packages (viz rámeček výše): > install.packages("survey")
Knihovna se pak aktivuje opět příkazem library: > library(survey)
Pro výpočty pomocí funkcí z knihovny survey je třeba předem definovat, která datová matice se používá, ve kterých sloupcích jsou váhy a že se s nimi má pracovat jako s Fayovými vahami. Dále je potřeba určit u Fayových vah koeficient rho, který je v šetření TALIS 0,5. Toho se dosáhne tak, že vytvoříme objekt, v němž budou všechny potřebné informace uloženy, a dále již budeme pracovat s tímto objektem: > talis.uc = svrepdesign( + weights = ~TCHWGT, + repweights = "TRWGT[0-9]+", + type = "Fay", + rho = 0.5, + data = Uc, + combined.weights = TRUE + )
Podobně by bylo možné definovat další objekt pro datovou matici z dotazníků za ředitele. Nyní již je možné používat funkce z knihovny survey. Funkce se podobají běžným funkcím prostředí R, pouze jejich názvy začínají svy a jako parametr používají objekt s informacemi o designu. Je možné např.:
spočítat odhady populačního průměru, rozptylu, kvantilů, relativních četností, poměrů a úhrnů včetně informace o přesnosti odhadu sestrojit obecný lineární model (lineární regrese, logistická regrese, analýza rozptylu a kovariance) včetně testování hypotéz o nulovosti koeficientů počítat četnosti v kontingenčních tabulkách a testovat nezávislost včetně logaritmickolineárních modelů pro vícerozměrné tabulky použít faktorovou analýzu a metodu hlavních komponent používat obvyklé grafy jako scatterplot (X-Y graf), boxplot, histogramy, grafy kumulativní distribuční funkce, sloupcové grafy
U odhadů parametrů je uvedena tzv. standardní chyba (SE nebo S. E., Standard error). Jedná se vlastně o směrodatnou odchylku odhadu (přesněji řečeno o odhad této směrodatné odchylky). Skutečná hodnota parametru se od odhadnuté hodnoty s pravděpodobností přibližně 95 % liší nejvýše o dvě standardní chyby. Vezmeme-li tedy odhad parametru a na obě strany od něj přidáme dvojnásobek standardní chyby, získáme interval, ve kterém se s pravděpodobností přibližně 95 % nachází skutečná hodnota parametru.
Příklady výpočtů
Odhad populačního průměru spokojenosti se zaměstnáním:
> svymean(~TJOBSATS,design=talis.uc,na.rm=TRUE) mean SE TJOBSATS 11.531 0.0418
Odhad téhož parametru odděleně pro muže a ženy:
> svyby(~TJOBSATS,~TT2G01,design=talis.uc,svymean,na.rm=TRUE) TT2G01 TJOBSATS se Female Female 11.58443 0.04823237 Male Male 11.35468 0.07616365
T-test shody populačního průměru spokojenosti se zaměstnáním pro muže a ženy:
> svyttest(TJOBSATS~TT2G01,design=talis.uc) Design-based t-test data: TJOBSATS ~ TT2G01 t = -2.6317, df = 98, p-value = 0.009869 alternative hypothesis: true difference in mean is not equal to 0 sample estimates: difference in mean -0.229749
Totéž jako model analýzy rozptylu:
> model.jobs = svyglm(TJOBSATS~TT2G01,design=talis.uc) > summary(model.jobs) Call: svyglm(formula = TJOBSATS ~ TT2G01, design = talis.uc) Survey design: svrepdesign.default(weights = ~TCHWGT, repweights = "TRWGT[0-9]+", type = "Fay", rho = 0.5, data = Uc, combined.weights = TRUE) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 11.58443 0.04823 240.180 < 2e-16 *** TT2G01Male -0.22975 0.08730 -2.632 0.00987 ** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for gaussian family taken to be 2.730281) Number of Fisher Scoring iterations: 2
Scatterplot spokojenosti v práci podle sebehodnocení zdatnosti:
> svyplot(TJOBSATS~TSELEFFS,design=talis.uc,style="transparent")
Regresní model lineární závislosti spokojenosti v práci na sebehodnocení zdatnosti:
> model.reg=svyglm(TJOBSATS~TSELEFFS,design=talis.uc) > summary(model.reg) Call: svyglm(formula = TJOBSATS ~ TSELEFFS, design = talis.uc) Survey design: svrepdesign.default(weights = ~TCHWGT, repweights = "TRWGT[0-9]+", type = "Fay", rho = 0.5, data = Uc, combined.weights = TRUE) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 8.80730 0.23772 37.05 <2e-16 *** TSELEFFS 0.25308 0.02245 11.27 <2e-16 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for gaussian family taken to be 2.574615) Number of Fisher Scoring iterations: 2
Kontingenční tabulka četností podle pohlaví a výše úvazku včetně testu nezávislosti:
> svytable(~TT2G03+TT2G01,design=talis.uc) TT2G03 Full-time Part-time Part-time Part-time
(more than (71-90% of (50-70% of (less than
90% of full-time full-time hours) full-time hours) 50% of full-time
TT2G01 Female hours) 23196.1513 1973.9070 1787.1266 hours) 1669.2127
> svychisq(~TT2G03+TT2G01,design=talis.uc) Pearson's X^2: Rao & Scott adjustment data: svychisq(~TT2G03 + TT2G01, design = talis.uc) F = 0.0954, ndf = 2.916, ddf = 288.648, p-value = 0.9597
Male 7139.6421 557.1301 569.0001 527.2037
Logistický regresní model vysvětlující názor na převažující výhody či nevýhody učitelského povolání pomocí aspektů sebedůvěry učitele
> model.logis=svyglm( + I(TT2G46A%in%c("Agree","Strongly agree"))~SECLSS+SEINSS+SEENGS, + design=talis.uc, + family=quasibinomial()) > summary(model.logis) Call: svyglm(formula = I(TT2G46A %in% c("Agree", "Strongly agree")) ~ SECLSS + SEINSS + SEENGS, design = talis.uc, family = quasibinomial()) Survey design: svrepdesign.default(weights = ~TCHWGT, repweights = "TRWGT[0-9]+", type = "Fay", rho = 0.5, data = Uc, combined.weights = TRUE) Coefficients: Estimate Std. Error t value (Intercept) -1.18863 0.26595 -4.469 SECLSS -0.03534 0.02717 -1.301 SEINSS -0.04993 0.04792 -1.042 SEENGS 0.23801 0.05119 4.649 --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01
Pr(>|t|) 2.15e-05 *** 0.196 0.300 1.06e-05 *** ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for quasibinomial family taken to be 0.9969464) Number of Fisher Scoring iterations: 3
Proč je nutné používat výpočty v komplexním designu a nestačí běžné statistické funkce? Pokud bychom použili pro odhady populačních parametrů běžné funkce popisné statistiky jako (nevážený) průměr, dostali bychom vychýlené odhady, protože výběrový soubor vznikl dvoustupňovým výběrem, v němž neměli všichni respondenti stejnou pravděpodobnost zahrnutí. Při použití vah uvedených v datové matici (TCHWGT a SCHWGT) sice dostaneme nevychýlené odhady, ale informace o přesnosti těchto odhadů bude zkreslená. V komplexním designu dotazníkového šetření má na přesnost odhadu vliv mnoho faktorů jako stratifikace nebo korelace mezi odpověďmi respondentů ze stejné školy. Zkreslení nebývá zpravidla nijak hrubé, ale pro určení statistické významnosti rozdílů je potřeba použít jiný postup. Další komplikací je, že některé funkce popisné statistiky neumožňují použití vah. Funkce z knihovny survey jednak s použitím vah předem počítají, jednak modelují přesnost odhadu populačních parametrů pomocí podvýběrů. V každém podvýběru je spočten odhad populačního parametru a z variability těchto odhadů mezi podvýběry se dá dobře zjistit, jak přesný je odhad populačního parametru z celého výběrového souboru.