Andmed: 400 eesti keele tasemeeksamite kirjutamisosa loovkirjutist, tasemed A2-C1, igalt tasemelt 100 teksti.

print(tekstid)
## # A tibble: 400 x 14
##    kood  eksam keeletase kirjtulemus sonad laused spikkus lpikkus J_osak lemmad
##    <chr> <chr>     <dbl>       <dbl> <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>
##  1 A2I_… 2018…         1          13    39      9    4.87    4.33 0.0256     31
##  2 A2I_… 2018…         1          18    72     12    4.19    6    0.0972     43
##  3 A2I_… 2018…         1          12    38      6    5.74    6.33 0.0263     26
##  4 A2I_… 2018…         1          16    61      8    5.46    7.62 0.0656     43
##  5 A2I_… 2018…         1          20    75     12    4.77    6.25 0.0933     45
##  6 A2II… 2018…         1          17    31      6    5.10    5.17 0          26
##  7 A2II… 2018…         1          16    47      6    4.64    7.83 0.0426     41
##  8 A2II… 2018…         1          14    40      6    4.78    6.67 0.025      32
##  9 A2II… 2018…         1          19    43      7    5       6.14 0.0698     33
## 10 A2II… 2018…         1          18    57      8    4.60    7.12 0.0526     42
## # … with 390 more rows, and 4 more variables: lss <dbl>, yld_kaanded <dbl>,
## #   yld_Nom <dbl>, V_aux <dbl>

Küsimus: kuivõrd on omavahel seotud sõnade ja lausete arv tekstis?

Vastus: sõnade ja lausete arvu vahel on tugev lineaarne seos (0,82). Mida rohkem sõnu, seda rohkem lauseid.

cor(tekstid$sonad, tekstid$laused)
## [1] 0.8197988

Ka joonisel on lineaarne seos näha, kuigi leidub erandlikke tekste, kus on palju sõnu ja vähe pikki lauseid või, vastupidi, võrdlemisi vähe sõnu ja palju lühikesi lauseid.

tekstid %>% ggplot(aes(sonad, laused)) + geom_point(position="jitter")

Eeldades, et minu valim on esinduslik - mis vahemikku võiks sõnade ja lausete arvu korrelatsioon erineva tasemega keeleõppijate loovkirjutistes jääda?

Vastus: 95% tõenäosusega vahemikku 0,78-0,85.

cor.test(tekstid$sonad, tekstid$laused)
## 
##  Pearson's product-moment correlation
## 
## data:  tekstid$sonad and tekstid$laused
## t = 28.56, df = 398, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.7848341 0.8495605
## sample estimates:
##       cor 
## 0.8197988

Võrdluseks: sõnade ja lausete keskmise pikkuse vahel on hoopis nõrgem, kuid siiski keskmise tugevusega seos - 0,53.

Tendents: mida pikemaid sõnu kasutatakse, seda pikemad kipuvad olema ka laused.

Joonis on samuti hajusam.

cor(tekstid$spikkus, tekstid$lpikkus)
## [1] 0.5281068
tekstid %>% ggplot(aes(spikkus, lpikkus)) + geom_point(position="jitter")

Koostan korrelatsioonimaatriksi, kust nähtub, et tugev seos (üle 0,7) on lisaks sõnade ja lausete arvule ka sõnade ja käänete arvul, erinevate sõnade (lemmade) ja käänete arvul, sõnade pikkusel ja lemmade arvul, lausete pikkusel ja lemmade arvul ning sõnade arvul ja lausete pikkusel.

Tugevaim seos on sõnade ja lemmade arvul (0,97) - mida rohkem on üldse sõnu, seda rohkem saab olla unikaalseid sõnu.

tekstid %>% select(-keeletase) %>% select_if(is.numeric) %>% cor()
##             kirjtulemus      sonad     laused     spikkus     lpikkus
## kirjtulemus  1.00000000  0.1334967  0.1499037  0.06955450  0.14700909
## sonad        0.13349671  1.0000000  0.8197988  0.66277715  0.74079857
## laused       0.14990370  0.8197988  1.0000000  0.48840185  0.29779749
## spikkus      0.06955450  0.6627772  0.4884019  1.00000000  0.52810678
## lpikkus      0.14700909  0.7407986  0.2977975  0.52810678  1.00000000
## J_osak       0.21743601  0.4579822  0.2762443  0.13301661  0.53420699
## lemmad       0.15237872  0.9715969  0.7975391  0.73047142  0.71783742
## lss         -0.17272383 -0.5798795 -0.5578207 -0.12012141 -0.46285660
## yld_kaanded  0.22433581  0.7575413  0.6374923  0.58800654  0.59565107
## yld_Nom     -0.09882183 -0.5756349 -0.3626287 -0.53439728 -0.53842854
## V_aux        0.07471666  0.1462816  0.1818147 -0.08758002  0.09366863
##                   J_osak     lemmad        lss yld_kaanded     yld_Nom
## kirjtulemus  0.217436005  0.1523787 -0.1727238   0.2243358 -0.09882183
## sonad        0.457982245  0.9715969 -0.5798795   0.7575413 -0.57563495
## laused       0.276244298  0.7975391 -0.5578207   0.6374923 -0.36262869
## spikkus      0.133016613  0.7304714 -0.1201214   0.5880065 -0.53439728
## lpikkus      0.534206994  0.7178374 -0.4628566   0.5956511 -0.53842854
## J_osak       1.000000000  0.4003925 -0.5174289   0.3639190 -0.34352493
## lemmad       0.400392462  1.0000000 -0.4233634   0.7602196 -0.58908607
## lss         -0.517428882 -0.4233634  1.0000000  -0.4675153  0.22875626
## yld_kaanded  0.363919010  0.7602196 -0.4675153   1.0000000 -0.55847666
## yld_Nom     -0.343524929 -0.5890861  0.2287563  -0.5584767  1.00000000
## V_aux        0.007270947  0.1129178 -0.2212928   0.1100944  0.03681864
##                    V_aux
## kirjtulemus  0.074716660
## sonad        0.146281620
## laused       0.181814749
## spikkus     -0.087580025
## lpikkus      0.093668634
## J_osak       0.007270947
## lemmad       0.112917765
## lss         -0.221292788
## yld_kaanded  0.110094437
## yld_Nom      0.036818644
## V_aux        1.000000000

Proovin ka pairs()-käsku. Valin tunnusteks väga tugevalt omavahel seotud sõnade ja lemmade arvu ning tekstis esindatud käänete arvu, mis on nii sõnade kui ka lemmade arvuga samuti tugevalt seotud.

tekstid %>% select(sonad, lemmad, yld_kaanded) %>% pairs()

Kui tahan vaadelda keeleoskustaseme seost erinevate arvtunnustega, siis ei ole Pearsoni lineaarne korrelatsioonikordaja selleks sobivaim. Kui üks kahest tunnusest on järjestustunnus (nagu keeleoskustase), siis peaks paremini sobima hoopis Spearmani ja Kendalli kordaja.Samuti ei ole need kordajad nii tundlikud jaotuse kuju ja äärmuslike väärtuste suhtes.

Järeldus: keeleoskustasemel on tugev või keskmine seos kõigi tunnustega peale abitegusõnade ja eksamitulemuse. Kasutades Pearsoni kordaja asemel Spearmani kordajat, muutuvad mõned seosed tugevamaks, teised nõrgemaks, kuid muutus on üsna vähe - tõlgendamise seisukohast jääb kõik samaks. Kendalli kordajat kasutades on kõik seosed nõrgemad, kuid tõlgendus endiselt sarnane.

tekstid %>% select_if(is.numeric) %>% cor(method="pearson")
##              keeletase kirjtulemus      sonad     laused     spikkus
## keeletase    1.0000000  0.11035948  0.9315687  0.7623918  0.72179209
## kirjtulemus  0.1103595  1.00000000  0.1334967  0.1499037  0.06955450
## sonad        0.9315687  0.13349671  1.0000000  0.8197988  0.66277715
## laused       0.7623918  0.14990370  0.8197988  1.0000000  0.48840185
## spikkus      0.7217921  0.06955450  0.6627772  0.4884019  1.00000000
## lpikkus      0.7347172  0.14700909  0.7407986  0.2977975  0.52810678
## J_osak       0.4643376  0.21743601  0.4579822  0.2762443  0.13301661
## lemmad       0.9304761  0.15237872  0.9715969  0.7975391  0.73047142
## lss         -0.5403149 -0.17272383 -0.5798795 -0.5578207 -0.12012141
## yld_kaanded  0.7704067  0.22433581  0.7575413  0.6374923  0.58800654
## yld_Nom     -0.6262201 -0.09882183 -0.5756349 -0.3626287 -0.53439728
## V_aux        0.1419286  0.07471666  0.1462816  0.1818147 -0.08758002
##                 lpikkus       J_osak     lemmad        lss yld_kaanded
## keeletase    0.73471722  0.464337645  0.9304761 -0.5403149   0.7704067
## kirjtulemus  0.14700909  0.217436005  0.1523787 -0.1727238   0.2243358
## sonad        0.74079857  0.457982245  0.9715969 -0.5798795   0.7575413
## laused       0.29779749  0.276244298  0.7975391 -0.5578207   0.6374923
## spikkus      0.52810678  0.133016613  0.7304714 -0.1201214   0.5880065
## lpikkus      1.00000000  0.534206994  0.7178374 -0.4628566   0.5956511
## J_osak       0.53420699  1.000000000  0.4003925 -0.5174289   0.3639190
## lemmad       0.71783742  0.400392462  1.0000000 -0.4233634   0.7602196
## lss         -0.46285660 -0.517428882 -0.4233634  1.0000000  -0.4675153
## yld_kaanded  0.59565107  0.363919010  0.7602196 -0.4675153   1.0000000
## yld_Nom     -0.53842854 -0.343524929 -0.5890861  0.2287563  -0.5584767
## V_aux        0.09366863  0.007270947  0.1129178 -0.2212928   0.1100944
##                 yld_Nom        V_aux
## keeletase   -0.62622009  0.141928585
## kirjtulemus -0.09882183  0.074716660
## sonad       -0.57563495  0.146281620
## laused      -0.36262869  0.181814749
## spikkus     -0.53439728 -0.087580025
## lpikkus     -0.53842854  0.093668634
## J_osak      -0.34352493  0.007270947
## lemmad      -0.58908607  0.112917765
## lss          0.22875626 -0.221292788
## yld_kaanded -0.55847666  0.110094437
## yld_Nom      1.00000000  0.036818644
## V_aux        0.03681864  1.000000000
tekstid %>% select_if(is.numeric) %>% cor(method="spearman")
##               keeletase kirjtulemus      sonad     laused     spikkus
## keeletase    1.00000000  0.06678885  0.9476440  0.7813211  0.71444319
## kirjtulemus  0.06678885  1.00000000  0.1233564  0.0993772  0.04077476
## sonad        0.94764404  0.12335642  1.0000000  0.8365681  0.63379700
## laused       0.78132111  0.09937720  0.8365681  1.0000000  0.50187649
## spikkus      0.71444319  0.04077476  0.6337970  0.5018765  1.00000000
## lpikkus      0.81768453  0.14666629  0.8291340  0.4168087  0.55691909
## J_osak       0.43803729  0.17872922  0.4773878  0.2637632  0.11426228
## lemmad       0.95335876  0.13734172  0.9808834  0.8209244  0.68691546
## lss         -0.50655043 -0.13924716 -0.5863326 -0.5404850 -0.09697324
## yld_kaanded  0.78348403  0.16704355  0.7881514  0.6561675  0.60062198
## yld_Nom     -0.64265826 -0.08142185 -0.5964723 -0.3757269 -0.55274558
## V_aux        0.15862933  0.04900890  0.1967456  0.2076550 -0.11040919
##                lpikkus      J_osak     lemmad         lss yld_kaanded
## keeletase    0.8176845  0.43803729  0.9533588 -0.50655043   0.7834840
## kirjtulemus  0.1466663  0.17872922  0.1373417 -0.13924716   0.1670435
## sonad        0.8291340  0.47738779  0.9808834 -0.58633259   0.7881514
## laused       0.4168087  0.26376317  0.8209244 -0.54048496   0.6561675
## spikkus      0.5569191  0.11426228  0.6869155 -0.09697324   0.6006220
## lpikkus      1.0000000  0.57267974  0.8203277 -0.48711895   0.6791857
## J_osak       0.5726797  1.00000000  0.4256295 -0.50999531   0.3409455
## lemmad       0.8203277  0.42562954  1.0000000 -0.44748293   0.7934824
## lss         -0.4871190 -0.50999531 -0.4474829  1.00000000  -0.4164636
## yld_kaanded  0.6791857  0.34094551  0.7934824 -0.41646360   1.0000000
## yld_Nom     -0.6030723 -0.33773805 -0.6136690  0.21085135  -0.5566035
## V_aux        0.1111629  0.03280829  0.1676767 -0.22024299   0.1132496
##                  yld_Nom        V_aux
## keeletase   -0.642658258  0.158629334
## kirjtulemus -0.081421852  0.049008901
## sonad       -0.596472299  0.196745552
## laused      -0.375726918  0.207655017
## spikkus     -0.552745579 -0.110409189
## lpikkus     -0.603072324  0.111162935
## J_osak      -0.337738053  0.032808291
## lemmad      -0.613669022  0.167676681
## lss          0.210851354 -0.220242993
## yld_kaanded -0.556603461  0.113249594
## yld_Nom      1.000000000  0.003889004
## V_aux        0.003889004  1.000000000
tekstid %>% select_if(is.numeric) %>% cor(method="kendall")
##               keeletase kirjtulemus       sonad      laused     spikkus
## keeletase    1.00000000  0.04681596  0.83934068  0.64976572  0.57045240
## kirjtulemus  0.04681596  1.00000000  0.08363404  0.07172274  0.02907943
## sonad        0.83934068  0.08363404  1.00000000  0.66091659  0.43807153
## laused       0.64976572  0.07172274  0.66091659  1.00000000  0.34977055
## spikkus      0.57045240  0.02907943  0.43807153  0.34977055  1.00000000
## lpikkus      0.66821183  0.10194186  0.62905500  0.27750747  0.38206931
## J_osak       0.32422171  0.12667106  0.32394741  0.17413910  0.07467633
## lemmad       0.84813759  0.09482741  0.88460151  0.64172954  0.49480101
## lss         -0.38124570 -0.09558730 -0.41382846 -0.38341172 -0.05952709
## yld_kaanded  0.67095725  0.12492255  0.61838842  0.50454442  0.44810026
## yld_Nom     -0.50629214 -0.05739841 -0.42019840 -0.25833156 -0.38647392
## V_aux        0.11793345  0.03214054  0.12871465  0.14537044 -0.07439084
##                 lpikkus      J_osak      lemmad         lss yld_kaanded
## keeletase    0.66821183  0.32422171  0.84813759 -0.38124570  0.67095725
## kirjtulemus  0.10194186  0.12667106  0.09482741 -0.09558730  0.12492255
## sonad        0.62905500  0.32394741  0.88460151 -0.41382846  0.61838842
## laused       0.27750747  0.17413910  0.64172954 -0.38341172  0.50454442
## spikkus      0.38206931  0.07467633  0.49480101 -0.05952709  0.44810026
## lpikkus      1.00000000  0.40600524  0.61696763 -0.33005948  0.51160350
## J_osak       0.40600524  1.00000000  0.28454439 -0.35573494  0.23596655
## lemmad       0.61696763  0.28454439  1.00000000 -0.29368570  0.62661806
## lss         -0.33005948 -0.35573494 -0.29368570  1.00000000 -0.29452136
## yld_kaanded  0.51160350  0.23596655  0.62661806 -0.29452136  1.00000000
## yld_Nom     -0.42585649 -0.23028665 -0.43285560  0.14358621 -0.41257936
## V_aux        0.07361263  0.02422311  0.10935255 -0.15127800  0.07868187
##                 yld_Nom       V_aux
## keeletase   -0.50629214  0.11793345
## kirjtulemus -0.05739841  0.03214054
## sonad       -0.42019840  0.12871465
## laused      -0.25833156  0.14537044
## spikkus     -0.38647392 -0.07439084
## lpikkus     -0.42585649  0.07361263
## J_osak      -0.23028665  0.02422311
## lemmad      -0.43285560  0.10935255
## lss          0.14358621 -0.15127800
## yld_kaanded -0.41257936  0.07868187
## yld_Nom      1.00000000 -0.00262138
## V_aux       -0.00262138  1.00000000

Peakomponentide analüüs

Ilma andmeid standardiseerimata ehk ilma valikuga “scale=TRUE” piisaks tekstide erinevuse kirjeldamiseks ainult ühest peakomponendist, mis kirjeldab 98,8% tekstide varieerumisest.

tekstid %>% select(-keeletase, -kirjtulemus) %>% select_if(is.numeric) %>% prcomp() %>% summary()
## Importance of components:
##                            PC1     PC2     PC3     PC4     PC5     PC6     PC7
## Standard deviation     95.2685 9.50976 3.88237 1.39480 1.13143 0.43127 0.05351
## Proportion of Variance  0.9881 0.00985 0.00164 0.00021 0.00014 0.00002 0.00000
## Cumulative Proportion   0.9881 0.99799 0.99963 0.99984 0.99998 1.00000 1.00000
##                            PC8     PC9    PC10
## Standard deviation     0.04387 0.03221 0.02254
## Proportion of Variance 0.00000 0.00000 0.00000
## Cumulative Proportion  1.00000 1.00000 1.00000

Kuna tunnustel on erinevad skaalad (nt sõnade arv võib küündida üle 300, keskmine sõnapikkus vaid veidi üle 7 ja mõned tunnused on sootuks esitatud osakaaludena vahemikus 0…1), siis tuleb tunnuste väärtused standardiseerida ehk skaalast lahti siduda. Tunnuste uus aritmeetiline keskmine on 0, väärtused jäävad vahemikku -3…3.

Nüüd kirjeldab esimene peakomponent tekstide tunnuste varieerumisest üksnes 54,1%. Esimene ja teine peakomponent kokku omavad 67,2% kirjeldusvõimet.

tekstid %>% select(-keeletase, -kirjtulemus) %>% select_if(is.numeric) %>% prcomp(scale=TRUE) %>% summary()
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5    PC6     PC7
## Standard deviation     2.3255 1.1441 1.0280 0.86804 0.69360 0.6181 0.56079
## Proportion of Variance 0.5408 0.1309 0.1057 0.07535 0.04811 0.0382 0.03145
## Cumulative Proportion  0.5408 0.6717 0.7773 0.85270 0.90081 0.9390 0.97046
##                            PC8     PC9    PC10
## Standard deviation     0.50166 0.18232 0.10234
## Proportion of Variance 0.02517 0.00332 0.00105
## Cumulative Proportion  0.99563 0.99895 1.00000

Jätan kõrvale abitegusõnade osakaalu (V_aux), sest tean korrelatsioonianalüüsi põhjal, et see ei erista tekste eriti tõhusalt.

Nüüd kirjeldab esimene peakomponent 59,9% ning kaks esimest peakomponenti kirjeldavad 73,2% varieerumisest.

tekstid %>% select(-keeletase, -kirjtulemus, -V_aux) %>% select_if(is.numeric) %>%
  prcomp(scale=TRUE) %>% summary()
## Importance of components:
##                           PC1    PC2    PC3    PC4     PC5     PC6     PC7
## Standard deviation     2.3221 1.0916 0.9555 0.6946 0.63006 0.56111 0.51498
## Proportion of Variance 0.5991 0.1324 0.1014 0.0536 0.04411 0.03498 0.02947
## Cumulative Proportion  0.5991 0.7315 0.8330 0.8866 0.93068 0.96566 0.99513
##                            PC8     PC9
## Standard deviation     0.18268 0.10238
## Proportion of Variance 0.00371 0.00116
## Cumulative Proportion  0.99884 1.00000

Et oleks mugavam jooniseid teha, jätan osa tunnuseid kõrvale ja muudan keeleoskustaseme arvtunnusest nimitunnuseks, kuna tahan võtta korraga arvesse kõiki ülejäänud arvunnuseid ja kuvada joonisel tasemete nimetused.

tekstid <- tekstid %>% select(-kood, -eksam, -kirjtulemus, -V_aux)

tekstid <- tekstid %>% mutate(keeletase=recode(keeletase, 
                                               '1'="A2", 
                                               '2'="B1", 
                                               '3'="B2", 
                                               '4'="C1"))

Joonisel eristuvad keeleoskustasemed üsna kenasti. Aga kuidas neid kahte mõõdet tõlgendada?

tekstid %>% select_if(is.numeric) %>% prcomp(scale=TRUE) %>% .$x %>% as_tibble() %>% 
  add_column(keeleoskustase=tekstid$keeletase) %>%
  ggplot(aes(PC1, PC2, color=keeleoskustase)) + geom_point()

Leian tegurid, millega tuleks tekstide tunnused läbi korrutada, et leida peakomponentide väärtused ja tekstid koordinaatteljestikule paigutada. Neid tegureid saab tõlgendada seostena vastava peakomponendi ja tunnuse vahel.

tekstid %>% select_if(is.numeric) %>% prcomp(scale=TRUE)
## Standard deviations (1, .., p=9):
## [1] 2.3221115 1.0915552 0.9555252 0.6945502 0.6300632 0.5611052 0.5149791
## [8] 0.1826842 0.1023785
## 
## Rotation (n x k) = (9 x 9):
##                    PC1         PC2         PC3         PC4         PC5
## sonad        0.4157841 -0.02039551 -0.13500498  0.13332821 -0.06317364
## laused       0.3335437 -0.01276420 -0.60187529 -0.19732699 -0.28187062
## spikkus      0.3067324 -0.49952255  0.08197507  0.26044058 -0.13873641
## lpikkus      0.3376386  0.09862073  0.44922965  0.49048654  0.32101928
## J_osak       0.2356971  0.57341883  0.37132975 -0.05501738 -0.63545892
## lemmad       0.4075633 -0.16024164 -0.09476141  0.15805259 -0.19104669
## lss         -0.2621261 -0.58046953  0.27305547  0.05082136 -0.48527289
## yld_kaanded  0.3622747 -0.07982048 -0.06522968 -0.13372034  0.31481479
## yld_Nom     -0.2935535  0.20583865 -0.43047984  0.76577270 -0.13911097
##                     PC6         PC7          PC8          PC9
## sonad       -0.19066295  0.24916463  0.485467854 -0.672755188
## laused      -0.10850573  0.09327942 -0.618893030 -0.066631280
## spikkus     -0.04065232 -0.74784385 -0.026165489 -0.031428744
## lpikkus     -0.14408400  0.25960949 -0.491379324 -0.035006848
## J_osak       0.21384707 -0.15793312  0.001414589 -0.015541878
## lemmad      -0.09767654  0.31765075  0.339699384  0.715483931
## lss          0.23931928  0.41712803 -0.151246990 -0.166036133
## yld_kaanded  0.85904382  0.04370278  0.018824372 -0.030344388
## yld_Nom      0.28099833 -0.02824579  0.022943984 -0.009994922

Tõlgendus:

Esimene peakomponent on positiivselt seotud eelkõige sõnade ja lemmade arvuga, samuti käänete arvu, lausete arvu, sõnade ja lausete keskmise pikkusega. Sidesõnade osakaaluga on nõrk seos (alla 0,3).

Nõrk negatiivne seos on nimetavas käändes sõnade osakaaluga ning unikaalsete sõnade suhtarvuga. Seega: mida pikem tekst, seda rohkem hakkab sõnavara korduma ja seda väiksem on unikaalsete sõnade osakaal kõigi sõnade hulgas. Samuti kaasneb pikemate ja keerukamate tekstidega nimetava käände taandumine, sest kasutatakse rohkem erinevaid grammatilisi vorme.

Teine peakomponent on kõige tugevamas positiivses seoses sidesõnade osakaaluga (mida rohkem sidesõnu, seda kõrgemal tekst teljestikul asub). Tugevaim negatiivne korrelatsioon on unikaalsete sõnade suhtarvuga (mida suurem suhtarv, seda madalamal tekst paikneb). Samuti on üsna tugev negatiivne seos keskmise sõnapikkusega (mida pikemad sõnad, seda madalamal tekstid paiknevad).

Võib järeldada, et suure unikaalsete sõnade osakaaluga (ehk pigem lühikesed tekstid) sisaldavad pigem vähe sidesõnu. Samuti on sidesõnade osakaal väiksem, kui sõnad on keskmiselt pikemad (loogiline tulemus, sest sidesõnade on pigem lühikesed).

Veel üks joonis, mis kinnitab minu tõlgendust:

tekstid %>% select_if(is.numeric) %>% prcomp(scale=TRUE) %>% 
  biplot(xlabs=tekstid$keeletase)