Kataloog paika
setwd("c:/jaagup/16/analyytika/9")
Andmed loetakse sisse komadega eraldatud failist
head(read.csv("Pisa1.csv"))
## PVMATH PVREAD PVSCIE GENSCIE INSTSCIE INTSCIE JOYSCIE PERSCIE
## 1 429.5762 256.9510 482.6859 -0.3580 0.0195 0.2143 0.8776 -0.5345
## 2 504.4322 555.0678 511.1264 0.8962 1.4096 1.2039 1.6230 1.3959
## 3 481.2977 392.9196 565.4896 0.0792 0.0195 0.0663 0.1728 0.0553
## 4 480.7525 535.2859 544.1359 0.0792 -0.2138 -0.7100 -0.5825 0.3867
## 5 366.5602 398.6397 377.6894 0.1780 0.7257 -0.0820 -0.1028 0.3867
## 6 599.0731 487.4719 557.6568 -0.7753 -0.6225 0.6732 -0.8455 -0.2497
## SEX ME1 ME2 AGE emaharidus
## 1 Male Alg No 16.25 Alg
## 2 Female Kesk No 16.17 Kesk
## 3 Female Alg No 16.08 Alg
## 4 Female Kesk No 15.58 Kesk
## 5 Female Kesk Yes 16.25 KƵrg
## 6 Male Kesk Yes 16.17 KƵrg
või semikoolonitega eraldatud failist
head(read.csv2("Pisa2.csv"))
## PVMATH PVREAD PVSCIE GENSCIE INSTSCIE INTSCIE JOYSCIE PERSCIE
## 1 429.5762 256.9510 482.6859 -0.3580 0.0195 0.2143 0.8776 -0.5345
## 2 504.4322 555.0678 511.1264 0.8962 1.4096 1.2039 1.6230 1.3959
## 3 481.2977 392.9196 565.4896 0.0792 0.0195 0.0663 0.1728 0.0553
## 4 480.7525 535.2859 544.1359 0.0792 -0.2138 -0.7100 -0.5825 0.3867
## 5 366.5602 398.6397 377.6894 0.1780 0.7257 -0.0820 -0.1028 0.3867
## 6 599.0731 487.4719 557.6568 -0.7753 -0.6225 0.6732 -0.8455 -0.2497
## SEX ME1 ME2 AGE emaharidus
## 1 Male Alg No 16.25 Alg
## 2 Female Kesk No 16.17 Kesk
## 3 Female Alg No 16.08 Alg
## 4 Female Kesk No 15.58 Kesk
## 5 Female Kesk Yes 16.25 KƵrg
## 6 Male Kesk Yes 16.17 KƵrg
Komasid eraldajatena eeldades kui tegelikult on semikoolonid, saadakse kõik pealkirjad kokku üheks tulbanimeks. Kui andmete seas on aga mõni koma, siis see tekitab eraldi tulba mille peale pahandatakse.
#read.csv("Pisa2.csv")
#Error in read.table(file = file, header = header, sep = sep, quote = quote, :
# more columns than column names
Vastupidisel juhul aga tulevad tulbanimed taas kokku üheks tulbaks ning üheks tulbaks (faktori tüüpi) lähevad ka andmed - kuna neil eraldavat semikoolonit sisse ei satu.
head(read.csv2("Pisa1.csv"))
## PVMATH.PVREAD.PVSCIE.GENSCIE.INSTSCIE.INTSCIE.JOYSCIE.PERSCIE.SEX.ME1.ME2.AGE.emaharidus
## 1 429.57624,256.95098,482.68592,-0.358,0.0195,0.2143,0.8776,-0.5345,Male,Alg,No,16.25,Alg
## 2 504.43216,555.06778,511.1264,0.8962,1.4096,1.2039,1.623,1.3959,Female,Kesk,No,16.17,Kesk
## 3 481.2977,392.91962,565.4896,0.0792,0.0195,0.0663,0.1728,0.0553,Female,Alg,No,16.08,Alg
## 4 480.75246,535.28588,544.13592,0.0792,-0.2138,-0.71,-0.5825,0.3867,Female,Kesk,No,15.58,Kesk
## 5 366.56018,398.6397,377.68938,0.178,0.7257,-0.082,-0.1028,0.3867,Female,Kesk,Yes,16.25,KƵrg
## 6 599.07306,487.4719,557.65682,-0.7753,-0.6225,0.6732,-0.8455,-0.2497,Male,Kesk,Yes,16.17,KƵrg
ncol(head(read.csv2("Pisa1.csv")))
## [1] 1
colnames(head(read.csv2("Pisa1.csv")))
## [1] "PVMATH.PVREAD.PVSCIE.GENSCIE.INSTSCIE.INTSCIE.JOYSCIE.PERSCIE.SEX.ME1.ME2.AGE.emaharidus"
class(head(read.csv2("Pisa1.csv"))[, 1])
## [1] "factor"
Ridade ja veergude arv tabelis
Pisa=read.csv("Pisa1.csv")
nrow(Pisa)
## [1] 1000
ncol(Pisa)
## [1] 13
Tulpade lühitutvustus
str(Pisa)
## 'data.frame': 1000 obs. of 13 variables:
## $ PVMATH : num 430 504 481 481 367 ...
## $ PVREAD : num 257 555 393 535 399 ...
## $ PVSCIE : num 483 511 565 544 378 ...
## $ GENSCIE : num -0.358 0.8962 0.0792 0.0792 0.178 ...
## $ INSTSCIE : num 0.0195 1.4096 0.0195 -0.2138 0.7257 ...
## $ INTSCIE : num 0.2143 1.2039 0.0663 -0.71 -0.082 ...
## $ JOYSCIE : num 0.878 1.623 0.173 -0.583 -0.103 ...
## $ PERSCIE : num -0.5345 1.3959 0.0553 0.3867 0.3867 ...
## $ SEX : Factor w/ 2 levels "Female","Male": 2 1 1 1 1 2 2 1 1 1 ...
## $ ME1 : Factor w/ 4 levels "Alg","Kesk","Kutse",..: 1 2 1 2 2 2 2 2 2 2 ...
## $ ME2 : Factor w/ 2 levels "No","Yes": 1 1 1 1 2 2 1 1 1 1 ...
## $ AGE : num 16.2 16.2 16.1 15.6 16.2 ...
## $ emaharidus: Factor w/ 5 levels "Alg","KƵrg",..: 1 3 1 3 2 2 3 3 3 3 ...
load("Pisa.rda")
#str(Pisa)
class(Pisa)
## [1] "data.frame"
colnames(Pisa)
## [1] "PVMATH" "PVREAD" "PVSCIE" "GENSCIE" "INSTSCIE" "INTSCIE"
## [7] "JOYSCIE" "PERSCIE" "SCIEEFF" "SCIEFUT" "SCSCIE" "CARINFO"
## [13] "ENVAWARE" "ENVOPT" "ENVPERC" "RESPDEV" "SUBNATIO" "SCHOOLID"
## [19] "STIDSTD" "CNT" "COUNTRY" "OECD" "ST01Q01" "ST02Q01"
## [25] "ST03Q02" "ST03Q03" "ST04Q01" "ST05Q01" "ST06Q01" "ST07Q01"
## [31] "ST07Q02" "ST07Q03" "ST08Q01" "ST09Q01" "ST10Q01" "ST10Q02"
## [37] "ST10Q03" "ST11Q01" "ST11Q02" "ST11Q03" "ST11Q04" "ST12Q01"
## [43] "ST27Q01" "ST27Q02" "ST27Q03" "ST27Q04" "ST28Q01" "ST28Q02"
## [49] "ST28Q03" "ST28Q04" "ST29Q01" "ST29Q02" "ST29Q03" "ST29Q04"
## [55] "ST30Q01" "ST31Q01" "ST31Q02" "ST31Q03" "ST31Q04" "ST31Q05"
## [61] "ST31Q06" "ST31Q07" "ST31Q08" "ST31Q09" "ST31Q10" "ST31Q11"
## [67] "ST31Q12" "ST32Q01" "ST32Q02" "ST32Q03" "ST32Q04" "ST32Q05"
## [73] "ST32Q06" "ST33Q11" "ST33Q12" "ST33Q21" "ST33Q22" "ST33Q31"
## [79] "ST33Q32" "ST33Q41" "ST33Q42" "ST33Q51" "ST33Q52" "ST33Q61"
## [85] "ST33Q62" "ST33Q71" "ST33Q72" "ST33Q81" "ST33Q82" "ST34Q01"
## [91] "ST34Q02" "ST34Q03" "ST34Q04" "ST34Q05" "ST34Q06" "ST34Q07"
## [97] "ST34Q08" "ST34Q09" "ST34Q10" "ST34Q11" "ST34Q12" "ST34Q13"
## [103] "ST34Q14" "ST34Q15" "ST34Q16" "ST34Q17" "ST35Q01" "ST35Q02"
## [109] "ST35Q03" "ST35Q04" "ST35Q05" "ST36Q01" "ST36Q02" "ST36Q03"
## [115] "ST37Q01" "ST37Q02" "ST37Q03" "ST37Q04" "ST37Q05" "ST37Q06"
## [121] "IC01Q01" "IC02Q01" "IC03Q01" "IC03Q02" "IC03Q03" "IC04Q01"
## [127] "IC04Q02" "IC04Q03" "IC04Q04" "IC04Q05" "IC04Q06" "IC04Q07"
## [133] "IC04Q08" "IC04Q09" "IC04Q10" "IC04Q11" "IC05Q01" "IC05Q02"
## [139] "IC05Q03" "IC05Q04" "IC05Q05" "IC05Q06" "IC05Q07" "IC05Q08"
## [145] "IC05Q09" "IC05Q10" "IC05Q11" "IC05Q12" "IC05Q13" "IC05Q14"
## [151] "IC05Q15" "IC05Q16" "AGE" "ISCEDL" "ISCEDD" "ISCEDO"
## [157] "PROGN" "BMMJ" "BFMJ" "BSMJ" "HISEI" "MSECATEG"
## [163] "FSECATEG" "HSECATEG" "SRC_M" "SRC_F" "SRC_E" "SRC_S"
## [169] "MISCED" "FISCED" "HISCED" "PARED" "COBN_M" "COBN_F"
## [175] "COBN_S" "IMMIG" "LANGN" "CARPREP" "CULTPOSS" "HEDRES"
## [181] "HOMEPOS" "SCAPPLY" "SCHANDS" "SCIEACT" "SCINTACT" "SCINVEST"
## [187] "WEALTH" "HIGHCONF" "INTCONF" "INTUSE" "PRGUSE" "ESCS"
## [193] "PV1MATH" "PV2MATH" "PV3MATH" "PV4MATH" "PV5MATH" "PV1READ"
## [199] "PV2READ" "PV3READ" "PV4READ" "PV5READ" "PV1SCIE" "PV2SCIE"
## [205] "PV3SCIE" "PV4SCIE" "PV5SCIE" "W_FSTUWT" "SEX"
nrow(Pisa)
## [1] 4768
ncol(Pisa)
## [1] 209
Keelte loetelu algus
head(Pisa$LANGN)
## [1] Missing Russian Russian Estonian Estonian Estonian
## 153 Levels: Kurdish Tagalog Indonesian Romanian Estonian ... Missing
Keeled ja nende sagedused (algus)
head(table(Pisa$LANGN))
##
## Kurdish Tagalog Indonesian Romanian Estonian Romansh
## 0 0 0 0 3445 0
Sagedused data.frame-na (jääb selgusetuks, mis oludes tavaline table-tüüpi klass hea on)
sagedused=as.data.frame(table(Pisa$LANGN))
#sagedused
Keeled, mida on vähemalt ühel korral mainitud
sagedused[sagedused$Freq>0, ]
## Var1 Freq
## 5 Estonian 3445
## 54 Russian 1252
## 108 Other languages (EST) 20
## 152 Invalid 42
## 153 Missing 9
Keelte nimed, mida on mainitud rohkem kui 50 korda
levinumad=sagedused[sagedused$Freq>50, "Var1"]
levinumad
## [1] Estonian Russian
## 153 Levels: Kurdish Tagalog Indonesian Romanian Estonian ... Missing
Reanumbrid, kus vastava kirje keele sagedus ei ületa viitkümmet.
which(!(Pisa$LANGN %in% sagedused[sagedused$Freq>50, "Var1"]))
## [1] 1 25 42 200 259 292 309 323 329 335 368 397 622 719
## [15] 749 779 960 967 983 1059 1072 1073 1092 1104 1111 1161 1425 1459
## [29] 1534 1591 1657 1692 1702 1718 1791 1857 1862 2112 2176 2212 2522 2566
## [43] 2567 2615 2664 2732 2757 2790 2811 2869 2983 3046 3284 3287 3292 3332
## [57] 3346 3466 3496 3636 3676 3799 3800 4068 4161 4245 4449 4538 4585 4605
## [71] 4644
Need võtan analüüsist välja ja määran keele NA-ks
Pisa$LANGN[!(Pisa$LANGN %in% levinumad)]=NA
Vaatan, mis tüübina hoitakse keeleandmeid
class(Pisa$LANGN)
## [1] "factor"
Jätan alles faktori lubatud väärtusteks vaid levinumad keeled - ennem olid muud väärtused tühjaks muudetud.
Pisa$LANGN=factor(Pisa$LANGN, levels=levinumad)
Tulemuse kontroll
head(Pisa$LANGN)
## [1] <NA> Russian Russian Estonian Estonian Estonian
## Levels: Estonian Russian
Sageduse jaotus, omaette rühma moodustavad NA-d
table(Pisa$LANGN, useNA = "always")
##
## Estonian Russian <NA>
## 3445 1252 71
head(attributes(Pisa)$variable.labels)
## PVMATH
## ""
## PVREAD
## ""
## PVSCIE
## ""
## GENSCIE
## "General value of science PISA 2006 (WLE)"
## INSTSCIE
## "Instrumental motivation in science PISA 2006 (WLE)"
## INTSCIE
## "General interest in learning science PISA 2006 (WLE)"
Isa haridustase
head(Pisa$FISCED)
## [1] <NA> ISCED 5A, 6 ISCED 5B ISCED 3A, ISCED 4
## [5] ISCED 3B, C ISCED 3A, ISCED 4
## 7 Levels: None ISCED 1 ISCED 2 ISCED 3B, C ISCED 3A, ISCED 4 ... ISCED 5A, 6
Kas on rakenduskõrgharidus (5B)
head(Pisa$ST10Q02)
## [1] <NA> Yes Yes No <NA> No
## Levels: Yes No
Kas kutseharidus keskhariduse baasil (4B)
head(Pisa$ST03Q03)
## [1] <NA> <NA> <NA> <NA> <NA> <NA>
## Levels: Missing
#haridus=Pisa[, c("MISCED", "FISCED")]
Millistel ridadel puuduvad väärtused ema haridustaseme kohta
which(is.na(Pisa$MISCED))
## [1] 1 47 256 342 598 857 1040 1085 1369 1611 1677 1767 1855 3167
## [15] 3192 3440 3480 3610 3666 3795 3831 4161 4428 4568
Millistel puuduvad isa haridustaseme kohta
which(is.na(Pisa$FISCED))
## [1] 1 9 14 16 36 39 63 71 77 81 92 103 113 123
## [15] 124 128 141 144 150 153 165 167 184 190 196 198 201 215
## [29] 220 227 228 229 233 238 245 246 247 249 255 263 268 289
## [43] 291 305 317 337 347 368 369 384 386 407 447 452 454 459
## [57] 465 491 498 513 529 532 554 570 576 590 609 610 648 651
## [71] 658 680 693 698 716 741 752 760 769 792 823 825 838 844
## [85] 845 857 860 869 871 890 921 923 946 952 958 985 990 994
## [99] 1007 1021 1023 1029 1035 1043 1051 1052 1064 1085 1123 1135 1139 1171
## [113] 1189 1204 1214 1224 1226 1235 1239 1257 1281 1307 1359 1376 1383 1397
## [127] 1433 1436 1448 1461 1468 1484 1517 1525 1533 1535 1566 1581 1585 1596
## [141] 1601 1626 1660 1663 1677 1678 1681 1698 1703 1724 1730 1743 1752 1765
## [155] 1773 1793 1794 1801 1847 1850 1855 1868 1877 1889 1900 1914 1920 1921
## [169] 1926 1932 1951 1959 1962 1988 1995 2058 2066 2067 2072 2074 2082 2089
## [183] 2110 2113 2116 2122 2137 2143 2147 2165 2166 2178 2180 2199 2205 2247
## [197] 2256 2261 2265 2276 2341 2356 2358 2373 2400 2402 2410 2416 2421 2432
## [211] 2437 2440 2444 2449 2482 2488 2497 2514 2530 2543 2549 2599 2610 2632
## [225] 2675 2682 2698 2702 2708 2731 2732 2739 2747 2750 2759 2766 2777 2816
## [239] 2818 2865 2869 2873 2882 2883 2900 2904 2907 2952 2957 3002 3036 3052
## [253] 3074 3097 3105 3109 3166 3167 3169 3174 3175 3177 3189 3192 3204 3205
## [267] 3215 3222 3243 3263 3297 3318 3357 3399 3403 3423 3428 3465 3470 3480
## [281] 3491 3525 3538 3552 3565 3587 3591 3592 3594 3596 3610 3612 3614 3642
## [295] 3644 3699 3703 3717 3735 3744 3750 3751 3778 3810 3815 3817 3823 3835
## [309] 3842 3844 3860 3861 3877 3883 3888 3893 3897 3942 3962 3972 3983 4004
## [323] 4006 4012 4017 4019 4022 4036 4061 4116 4120 4126 4134 4135 4140 4147
## [337] 4161 4162 4177 4186 4187 4195 4196 4199 4202 4268 4296 4306 4364 4380
## [351] 4390 4392 4429 4430 4434 4449 4460 4476 4491 4500 4522 4568 4590 4592
## [365] 4617 4632 4643 4647 4654 4687 4710 4746 4757 4758
Mõlema haridus teadmata
which(is.na(Pisa$MISCED)) %in% which(is.na(Pisa$FISCED))
## [1] TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE
## [12] FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE FALSE TRUE
## [23] FALSE TRUE
Osakaal, kel ema haridus teadmata
(t1=sum(is.na(Pisa$MISCED)) / length(Pisa$MISCED))
## [1] 0.005033557
Osakaal, kel ema haridus teadmata neist kel ka isa haridus teadmata
(t2=sum(which(is.na(Pisa$MISCED)) %in% which(is.na(Pisa$FISCED))) / sum(is.na(Pisa$FISCED)) )
## [1] 0.02941176
Kui isa haridustase on teadmata, siis on tõenäosus, et ka ema oma on teadmata 5.8 korda suurem.
Püüan kindlaks teha, et kas see erinevus on tingitud lihtsalt sellest, et mõne lapse puhul on vähem andmeid kirjas, või mõjutab ühe vanema detailsete (haridustase) andmete puudumine eraldi ka teise vanema kohta samade andmete olemasolu - rohkem kui mõne muu tunnuse oma. Katsun leida vanematest võimalikult sõltumatu tunnuse, millel oleks sobiv kogus puuduvaid väärtusi - mitte otse ühe ega teise äärmuse juures.
puuduvad=unlist(lapply(colnames(Pisa), function(cname){sum(is.na(Pisa[, cname]))}))
puuduvad
## [1] 0 0 0 0 0 0 0 0 0 0 0 5 4 2
## [15] 10 4 0 0 0 0 0 0 0 0 0 4768 0 177
## [29] 164 671 910 700 544 508 1084 1211 1385 43 83 198 4515 51
## [43] 6 5 7 7 12 13 11 9 4 5 3 7 647 54
## [57] 57 39 60 72 34 48 46 42 69 48 43 107 116 131
## [71] 132 130 126 167 294 264 323 187 138 309 282 207 136 302
## [85] 259 201 122 300 248 14 20 31 39 49 36 44 22 15
## [99] 26 48 31 59 39 38 24 31 6 15 13 8 8 43
## [113] 31 33 3 11 12 17 8 11 4768 4768 4768 4768 4768 4768
## [127] 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768
## [141] 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768 4768 0 0
## [155] 0 0 0 266 610 1212 67 266 610 67 193 586 48 1
## [169] 24 374 11 11 0 0 0 93 71 1 12 4 0 9
## [183] 10 10 9 10 0 4768 4768 4768 4768 2 0 0 0 0
## [197] 0 0 0 0 0 0 0 0 0 0 0 0 0
Lisan andmestiku elementidele ka nimed. “Tavalisele” programmeerijale ehk tundubki R-i ühe omapärasema omadusena, et igasugustele väärtustele saab nimetuse juurde panna, et millega parasjagu tegemist on.
names(puuduvad)=colnames(Pisa)
puuduvad
## PVMATH PVREAD PVSCIE GENSCIE INSTSCIE INTSCIE JOYSCIE PERSCIE
## 0 0 0 0 0 0 0 0
## SCIEEFF SCIEFUT SCSCIE CARINFO ENVAWARE ENVOPT ENVPERC RESPDEV
## 0 0 0 5 4 2 10 4
## SUBNATIO SCHOOLID STIDSTD CNT COUNTRY OECD ST01Q01 ST02Q01
## 0 0 0 0 0 0 0 0
## ST03Q02 ST03Q03 ST04Q01 ST05Q01 ST06Q01 ST07Q01 ST07Q02 ST07Q03
## 0 4768 0 177 164 671 910 700
## ST08Q01 ST09Q01 ST10Q01 ST10Q02 ST10Q03 ST11Q01 ST11Q02 ST11Q03
## 544 508 1084 1211 1385 43 83 198
## ST11Q04 ST12Q01 ST27Q01 ST27Q02 ST27Q03 ST27Q04 ST28Q01 ST28Q02
## 4515 51 6 5 7 7 12 13
## ST28Q03 ST28Q04 ST29Q01 ST29Q02 ST29Q03 ST29Q04 ST30Q01 ST31Q01
## 11 9 4 5 3 7 647 54
## ST31Q02 ST31Q03 ST31Q04 ST31Q05 ST31Q06 ST31Q07 ST31Q08 ST31Q09
## 57 39 60 72 34 48 46 42
## ST31Q10 ST31Q11 ST31Q12 ST32Q01 ST32Q02 ST32Q03 ST32Q04 ST32Q05
## 69 48 43 107 116 131 132 130
## ST32Q06 ST33Q11 ST33Q12 ST33Q21 ST33Q22 ST33Q31 ST33Q32 ST33Q41
## 126 167 294 264 323 187 138 309
## ST33Q42 ST33Q51 ST33Q52 ST33Q61 ST33Q62 ST33Q71 ST33Q72 ST33Q81
## 282 207 136 302 259 201 122 300
## ST33Q82 ST34Q01 ST34Q02 ST34Q03 ST34Q04 ST34Q05 ST34Q06 ST34Q07
## 248 14 20 31 39 49 36 44
## ST34Q08 ST34Q09 ST34Q10 ST34Q11 ST34Q12 ST34Q13 ST34Q14 ST34Q15
## 22 15 26 48 31 59 39 38
## ST34Q16 ST34Q17 ST35Q01 ST35Q02 ST35Q03 ST35Q04 ST35Q05 ST36Q01
## 24 31 6 15 13 8 8 43
## ST36Q02 ST36Q03 ST37Q01 ST37Q02 ST37Q03 ST37Q04 ST37Q05 ST37Q06
## 31 33 3 11 12 17 8 11
## IC01Q01 IC02Q01 IC03Q01 IC03Q02 IC03Q03 IC04Q01 IC04Q02 IC04Q03
## 4768 4768 4768 4768 4768 4768 4768 4768
## IC04Q04 IC04Q05 IC04Q06 IC04Q07 IC04Q08 IC04Q09 IC04Q10 IC04Q11
## 4768 4768 4768 4768 4768 4768 4768 4768
## IC05Q01 IC05Q02 IC05Q03 IC05Q04 IC05Q05 IC05Q06 IC05Q07 IC05Q08
## 4768 4768 4768 4768 4768 4768 4768 4768
## IC05Q09 IC05Q10 IC05Q11 IC05Q12 IC05Q13 IC05Q14 IC05Q15 IC05Q16
## 4768 4768 4768 4768 4768 4768 4768 4768
## AGE ISCEDL ISCEDD ISCEDO PROGN BMMJ BFMJ BSMJ
## 0 0 0 0 0 266 610 1212
## HISEI MSECATEG FSECATEG HSECATEG SRC_M SRC_F SRC_E SRC_S
## 67 266 610 67 193 586 48 1
## MISCED FISCED HISCED PARED COBN_M COBN_F COBN_S IMMIG
## 24 374 11 11 0 0 0 93
## LANGN CARPREP CULTPOSS HEDRES HOMEPOS SCAPPLY SCHANDS SCIEACT
## 71 1 12 4 0 9 10 10
## SCINTACT SCINVEST WEALTH HIGHCONF INTCONF INTUSE PRGUSE ESCS
## 9 10 0 4768 4768 4768 4768 2
## PV1MATH PV2MATH PV3MATH PV4MATH PV5MATH PV1READ PV2READ PV3READ
## 0 0 0 0 0 0 0 0
## PV4READ PV5READ PV1SCIE PV2SCIE PV3SCIE PV4SCIE PV5SCIE W_FSTUWT
## 0 0 0 0 0 0 0 0
## SEX
## 0
Valin tulba, mis näitab, kas füüsikas on sel aastal lisakursus võetud. Loen kokku, mitmel korral on väärtus teadmata.
sum(is.na(Pisa$ST33Q62))
## [1] 259
Tulba väärtuste puudumise sageduse jaotus võrrelduna ema haridustaseme teadaoleku puudumise sageduste jaotusega.
table(is.na(Pisa$ST33Q62), is.na(Pisa$MISCED))
##
## FALSE TRUE
## FALSE 4487 22
## TRUE 257 2
Sama isa puhul.
table(is.na(Pisa$ST33Q62), is.na(Pisa$FISCED))
##
## FALSE TRUE
## FALSE 4168 341
## TRUE 226 33
Mõningad erinevused olemas, aga püüan välja selgitada, kas erineb vaid väärtuste arv või on ka suhte erinevus vastavalt vanema soole.
Mugavamaks töötlemiseks andmed data.frame kujule
sagedused=as.data.frame.matrix(table(is.na(Pisa$ST33Q62), is.na(Pisa$MISCED)))
Ridadeks teadmine füüsika lisakursuse kohta, veergudeks teadmine ema haridustaseme kohta
Ühtlasi siin mõtisklen, et kuidas seda saaks selgemalt väljendada. Ning kas R-il on mõni enamvähem standardne ja mugav vahend ka tabelite esitamiseks - nii et sinna saab peal/allkirju panna ning rea ja veeru kohta sobivat seletavat teksti. Ning et see pärast HTMLis või mujal mugavalt nähtav oleks. Kui on kindla suurusega tabel, siis saab selle vastavate käskudega valmis ehitada. Kui aga suurus teadmata, siis kuluks mõni kavalam moodus ära.
sagedused
## FALSE TRUE
## FALSE 4487 22
## TRUE 257 2
Lisatulp arvutamaks kokku, kui palju oli lisakursusest teadlikke ja kui palju mitte. Sama tulemuse võiks anda ka
sagedused$kokku=cbind(rowSums(sagedused))
sagedused
## FALSE TRUE kokku
## FALSE 4487 22 4509
## TRUE 257 2 259
Millegipärast aga cbind-i abil lisatud tulba puhul ei suudeta pärast rbind-i juures ühte rida juurde panna. Veateade:
Error in rbind(deparse.level, …) : replacement has length zero
Samas kui uue tulba lisamisel esimese kahe tulba väärtused lihtsalt kokku liita, siis kannatab ka pärast ridu kokku liita ja sama muutuja alla salvestada.
sagedused$kokku=sagedused[, 1]+sagedused[, 2]
sagedused
## FALSE TRUE kokku
## FALSE 4487 22 4509
## TRUE 257 2 259
Tulemused samuti ridade kaupa kokku
sagedused=rbind(sagedused, sagedused[1, ]+sagedused[2, ])
sagedused
## FALSE TRUE kokku
## FALSE 4487 22 4509
## TRUE 257 2 259
## FALSE1 4744 24 4768
Loodud kolmandale reale ka nimi
rownames(sagedused)[3]="kokku"
sagedused
## FALSE TRUE kokku
## FALSE 4487 22 4509
## TRUE 257 2 259
## kokku 4744 24 4768
Neljandaks reaks kahe esimese rea suhe. Siis näha, kuivõrd vanema haridustaseme teadmine mõjutab teadmist füüsika lisakursuse kohta.
sagedused=rbind(sagedused, sagedused[1, ]/sagedused[2, ])
rownames(sagedused)[4]="suhe"
sagedused
## FALSE TRUE kokku
## FALSE 4487.00000 22 4509.00000
## TRUE 257.00000 2 259.00000
## kokku 4744.00000 24 4768.00000
## suhe 17.45914 11 17.40927
Keskmiselt pole iga 17nda kohta teada, kas laps võttis sel aastal lisakursust füüsikas. Kus lapse ema haridustase pole teada, sellisel juhul pole iga 11nda lapse kohta teada, kas ta võttis sel aastal lisakursust füüsikas. Ema hariduse mitteteadmine on vähendab konkreetse muu tulba kohta teadmist 1.59 korda.
Sama arvutuskäik isa haridustaseme puudumise puhul
sagedusedisa=as.data.frame.matrix(table(is.na(Pisa$ST33Q62), is.na(Pisa$FISCED)))
sagedusedisa["suhe", ]=sagedusedisa[1, ]/sagedusedisa[2, ]
sagedusedisa
## FALSE TRUE
## FALSE 4168.00000 341.00000
## TRUE 226.00000 33.00000
## suhe 18.44248 10.33333
Isa haridusandmete mitteteadmise puhul teatakse füüsika lisakursuse olemasolu
1.7847559 korda vähem kui teadmise puhul.
Võrrelduna ema haridusandmete puudumisega on isa haridustaseme teadmise puudumise korral veel `r
round((sagedusedisa[“suhe”, 1]/sagedusedisa[“suhe”, 2]) / (sagedused[“suhe”, 1]/sagedused[“suhe”, 2]), 1) ` korda vähem tõenäoline, et õppur teaks, kas tal on parajasti lisakursus füüsikas.
Seos matemaatikaga
cor(Pisa$PARED, Pisa$PVMATH, use="complete.obs")
## [1] 0.1714669
Matemaatika ja lugemisoskuse tulemuste seos
cor(Pisa$PVREAD, Pisa$PVMATH, use="complete.obs")
## [1] 0.8373094
Lugemisoskusel paistab vanemate haridustee pikkusega olema väiksem seos kui matemaatikatulemustel.
cor(Pisa$PARED, Pisa$PVREAD, use="complete.obs")
## [1] 0.1157657
Kõige selgemaks tundus ikkagi olema FISCED - tulp. Seal aga mitu väärtust vahel korraga sees - vist oludes, kus mitu haridust omandatud. Otsustasin võtta kõrgeima ning selle järgi väärtuse sisse panna. Kõigepealt määrasin haridusandmed puuduvaks.
Pisa$isaharidus=NA
Kel oli kirjas tase ISCED 0 - sellele panin kirja alghariduse.
Pisa$isaharidus[grepl(pattern="ISCED 0", x=Pisa$FISCED)]="alg"
ISCED 1 või 2 annab põhihariduse - sõltumata sellest, kas alghariduse märge eraldi kirjas või mitte
Pisa$isaharidus[grepl(pattern="ISCED 1", x=Pisa$FISCED)]="põhi"
Pisa$isaharidus[grepl(pattern="ISCED 2", x=Pisa$FISCED)]="põhi"
Muude kõrgemate tasemetega sama lugu.
Pisa$isaharidus[grepl(pattern="ISCED 3", x=Pisa$FISCED)]="kesk"
Pisa$isaharidus[grepl(pattern="ISCED 4", x=Pisa$FISCED)]="kesk"
Pisa$isaharidus[grepl(pattern="ISCED 5", x=Pisa$FISCED)]="kõrg"
Pisa$isaharidus[grepl(pattern="ISCED 6", x=Pisa$FISCED)]="kõrg"
Haridustasemete jaotus isadel
table(Pisa$isaharidus)
##
## kesk kõrg põhi
## 2496 1618 260
Kontrolliks esimese kümne isa hariduse väljund. Ehkki tulp oli faktorina, suutis grepl sealt seest teksti otsida.
Pisa[1:10, c("isaharidus", "FISCED")]
## isaharidus FISCED
## 1 <NA> <NA>
## 2 kõrg ISCED 5A, 6
## 3 kõrg ISCED 5B
## 4 kesk ISCED 3A, ISCED 4
## 5 kesk ISCED 3B, C
## 6 kesk ISCED 3A, ISCED 4
## 7 kõrg ISCED 5B
## 8 kesk ISCED 3A, ISCED 4
## 9 <NA> <NA>
## 10 kesk ISCED 3A, ISCED 4
Sama operatsioon emadega. Tõenäoliselt saaks seda tsükli või mõne kavalama käsu abil ka lühemalt vormistada.
Pisa$emaharidus=NA
Pisa$emaharidus[grepl(pattern="ISCED 0", x=Pisa$MISCED)]="alg"
Pisa$emaharidus[grepl(pattern="ISCED 1", x=Pisa$MISCED)]="põhi"
Pisa$emaharidus[grepl(pattern="ISCED 2", x=Pisa$MISCED)]="põhi"
Pisa$emaharidus[grepl(pattern="ISCED 3", x=Pisa$MISCED)]="kesk"
Pisa$emaharidus[grepl(pattern="ISCED 4", x=Pisa$MISCED)]="kesk"
Pisa$emaharidus[grepl(pattern="ISCED 5", x=Pisa$MISCED)]="kõrg"
Pisa$emaharidus[grepl(pattern="ISCED 6", x=Pisa$MISCED)]="kõrg"
Emade hariduse jaotus
table(Pisa$emaharidus)
##
## kesk kõrg põhi
## 2516 2047 172
Kontroll
Pisa[1:10, c("emaharidus", "MISCED")]
## emaharidus MISCED
## 1 <NA> <NA>
## 2 kõrg ISCED 5A, 6
## 3 kesk ISCED 3A, ISCED 4
## 4 kesk ISCED 3B, C
## 5 põhi ISCED 2
## 6 kesk ISCED 3A, ISCED 4
## 7 kõrg ISCED 5A, 6
## 8 kesk ISCED 3A, ISCED 4
## 9 kesk ISCED 3A, ISCED 4
## 10 kesk ISCED 3A, ISCED 4
Ümberjärjestus, nii et põhiharidust loetakse vähimaks - algharidust eraldi ei paistnud selles andmestikus leiduma.
Pisa$isaharidus=factor(Pisa$isaharidus, levels=c("põhi", "kesk", "kõrg"))
Sama emade juures
Pisa$emaharidus=factor(Pisa$emaharidus, levels=c("põhi", "kesk", "kõrg"))
Haridustasemete kooseksisteerimine
table(Pisa$isaharidus, Pisa$emaharidus)
##
## põhi kesk kõrg
## põhi 55 147 56
## kesk 85 1694 703
## kõrg 20 454 1141
Juurde ka puuduvad väärtused. Eraldi rea/veeruprotsente leides võiks näha, kas mõne haridustaseme puhul on puuduvate väärtuste osakaal suurem. Silma järgi paistab, et kui üks on puudu, siis ka teine suurema tõenäosusega - ju selle õpilase puhul lihtsalt andmete sisestamisega probleemid olnud.
table(Pisa$isaharidus, Pisa$emaharidus, useNA="always")
##
## põhi kesk kõrg <NA>
## põhi 55 147 56 2
## kesk 85 1694 703 14
## kõrg 20 454 1141 3
## <NA> 12 221 147 14
Kontroll, et kuidas haridustasemed numbrilisena välja paistavad
head(Pisa$isaharidus)
## [1] <NA> kõrg kõrg kesk kesk kesk
## Levels: põhi kesk kõrg
head(as.numeric(Pisa$isaharidus))
## [1] NA 3 3 2 2 2
Mudelid teemade kaupa. Lugemisoskus sõltuvana ühe või teise vanema haridustasemest. Paistab, et ema mõju on suurem.
lm(PVREAD ~ isaharidus, data=Pisa)
##
## Call:
## lm(formula = PVREAD ~ isaharidus, data = Pisa)
##
## Coefficients:
## (Intercept) isahariduskesk isahariduskõrg
## 494.56 10.48 12.70
lm(PVREAD ~ emaharidus, data=Pisa)
##
## Call:
## lm(formula = PVREAD ~ emaharidus, data = Pisa)
##
## Coefficients:
## (Intercept) emahariduskesk emahariduskõrg
## 467.29 29.15 50.35
Ka matemaatika puhul paistab ema mõju suurem olema - vahe pole aga nõnda suur.
lm(PVMATH ~ isaharidus, data=Pisa)
##
## Call:
## lm(formula = PVMATH ~ isaharidus, data = Pisa)
##
## Coefficients:
## (Intercept) isahariduskesk isahariduskõrg
## 498.60 17.09 30.25
lm(PVMATH ~ emaharidus, data=Pisa)
##
## Call:
## lm(formula = PVMATH ~ emaharidus, data = Pisa)
##
## Coefficients:
## (Intercept) emahariduskesk emahariduskõrg
## 481.88 26.48 51.82
Kui mõlemad kokku võtta, siis tundub, et lugemise puhul on isa haridus eraldi suhteliselt vähese tähtsusega. Pigem on seose põhjustajaks see, et kõrgema haridusega isa juures on sageli ka kõrgema haridusega ema, kes omakorda aitab lapse paremini lugema.
lm(PVMATH ~ isaharidus+emaharidus, data=Pisa)
##
## Call:
## lm(formula = PVMATH ~ isaharidus + emaharidus, data = Pisa)
##
## Coefficients:
## (Intercept) isahariduskesk isahariduskõrg emahariduskesk
## 474.15 11.13 13.58 24.49
## emahariduskõrg
## 48.51
lm(PVREAD ~ isaharidus+emaharidus, data=Pisa)
##
## Call:
## lm(formula = PVREAD ~ isaharidus + emaharidus, data = Pisa)
##
## Coefficients:
## (Intercept) isahariduskesk isahariduskõrg emahariduskesk
## 467.090 3.255 -5.444 28.808
## emahariduskõrg
## 53.092
Nimed muutuja nimedest ja seletused väärtustest
tulbad=data.frame(tulbanimi=names(attributes(Pisa)$variable.labels), seletus=unname(attributes(Pisa)$variable.labels))
head(tulbad)
## tulbanimi seletus
## 1 PVMATH
## 2 PVREAD
## 3 PVSCIE
## 4 GENSCIE General value of science PISA 2006 (WLE)
## 5 INSTSCIE Instrumental motivation in science PISA 2006 (WLE)
## 6 INTSCIE General interest in learning science PISA 2006 (WLE)
Andmed faili. Kui eraldajat ei määranud, siis jäi tühjaks. Ridadele taheti vaikimisi numbrid ette kirjutada, kuid pealkirjareale mitte ning seal tulnuks nõnda üks tulp vähem.
write.table(tulbad, file="tulbad.csv", sep=",", row.names = FALSE)
Failist tagasi loetuna
cat(paste(readLines("tulbad.csv")[1:8], collapse='\n'))
## "tulbanimi","seletus"
## "PVMATH",""
## "PVREAD",""
## "PVSCIE",""
## "GENSCIE","General value of science PISA 2006 (WLE)"
## "INSTSCIE","Instrumental motivation in science PISA 2006 (WLE)"
## "INTSCIE","General interest in learning science PISA 2006 (WLE)"
## "JOYSCIE","Enjoyment of science PISA 2006 (WLE)"