Faktorid

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 ...

Suurem andmekogum

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

Tulpade info

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)"

Isaga seotud tulbad

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

Katsetused seoste leidmisel isa ja ema haridustaseme teadmatuse suhtes

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.

Vanemate õpiaastate arvu ja kontrolltööpunktide seos

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

Haridustasemete järgi eristamine

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

Tulbaandmete esitamine

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)"