Muudan andmestikku, nii et vahetan numbriliselt kodeeritud keeleoskustasemed välja nimetuste vastu (selleks, et keeleoskustaset ei loetaks arvtunnuseks) ning jätan kõrvale abitegusõnade osakaalu tekstis (V_aux), mis eelneva vaatluse põhjal ei erista keeleoskustasemeid olulisel määral.

tekstid <- tekstid %>% select(-kirjtulemus, -V_aux) %>% mutate(keeletase=recode(keeletase, 
                                               '1'="A2", 
                                               '2'="B1", 
                                               '3'="B2", 
                                               '4'="C1"))
print(tekstid)
## # A tibble: 400 x 12
##    kood  eksam keeletase sonad laused spikkus lpikkus J_osak lemmad   lss
##    <chr> <chr> <chr>     <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl> <dbl>
##  1 A2I_… 2018… A2           39      9    4.87    4.33 0.0256     31 0.795
##  2 A2I_… 2018… A2           72     12    4.19    6    0.0972     43 0.597
##  3 A2I_… 2018… A2           38      6    5.74    6.33 0.0263     26 0.684
##  4 A2I_… 2018… A2           61      8    5.46    7.62 0.0656     43 0.705
##  5 A2I_… 2018… A2           75     12    4.77    6.25 0.0933     45 0.6  
##  6 A2II… 2018… A2           31      6    5.10    5.17 0          26 0.839
##  7 A2II… 2018… A2           47      6    4.64    7.83 0.0426     41 0.872
##  8 A2II… 2018… A2           40      6    4.78    6.67 0.025      32 0.8  
##  9 A2II… 2018… A2           43      7    5       6.14 0.0698     33 0.767
## 10 A2II… 2018… A2           57      8    4.60    7.12 0.0526     42 0.737
## # … with 390 more rows, and 2 more variables: yld_kaanded <dbl>, yld_Nom <dbl>

Teisendan andmed kaugusmõõtudeks, mis väljendavad seda, kuivõrd sarnased/erinevad on vaadeldavad tekstid andmestikus olevate arvtunnuste põhjal.

tekstid %>% head(10) %>% select_if(is_numeric) %>% dist()
##            1         2         3         4         5         6         7
## 2  35.416009                                                            
## 3   7.470696 38.529451                                                  
## 4  25.479577 11.885042 28.718589                                        
## 5  39.252273  4.732643 42.082768 15.078901                              
## 6  10.380580 44.805997  7.198101 34.629423 48.408103                    
## 7  13.759043 25.877598 17.707381 14.344597 29.233856 22.120845          
## 8   4.178169 34.435994  7.077900 23.904206 38.147476 11.106836 11.505847
## 9   6.580018 31.107945  8.696157 20.698301 34.599101 13.999085  9.380925
## 10 21.514750 15.602846 24.978982  4.242330 18.942488 30.661017 10.321508
##            8         9
## 2                     
## 3                     
## 4                     
## 5                     
## 6                     
## 7                     
## 8                     
## 9   4.508774          
## 10 19.931223 16.737143

Leian tekstide asukohad koordinaatteljestikul.

tekstid %>% head(10) %>% select_if(is_numeric) %>% dist() %>% cmdscale(2) 
##             [,1]       [,2]
##  [1,]  12.402236  0.6404981
##  [2,] -22.851801  2.9109321
##  [3,]  15.486187  4.0611819
##  [4,] -12.480866 -2.3162337
##  [5,] -26.519991  2.8565949
##  [6,]  21.870723  1.7049646
##  [7,]   1.241764 -6.2619168
##  [8,]  11.334945 -1.0421401
##  [9,]   7.975148  0.1965792
## [10,]  -8.458345 -2.7504602

Talletan koordinaadid tabelisse ja lisan tulba “keeleoskustase”.

tekstid %>% select_if(is_numeric) %>% dist() %>% cmdscale(2) %>%
  as_tibble() %>% add_column(keeleoskustase=tekstid$keeletase)
## # A tibble: 400 x 3
##        V1    V2 keeleoskustase
##     <dbl> <dbl> <chr>         
##  1 -120.   2.65 A2            
##  2  -84.9 -2.27 A2            
##  3 -123.  -1.19 A2            
##  4  -94.8  2.98 A2            
##  5  -81.3 -1.85 A2            
##  6 -129.   2.08 A2            
##  7 -108.   7.77 A2            
##  8 -119.   3.11 A2            
##  9 -115.   2.62 A2            
## 10  -98.8  3.95 A2            
## # … with 390 more rows

Koostan joonise, kus kuvatakse iga teksti keeleoskustase. Nii on näha, kas samale tasemele hinnatud tekstid koonduvad või mitte.

tekstid %>% select_if(is_numeric) %>% dist() %>% cmdscale(2) %>%
  as_tibble() %>% add_column(keeleoskustase=tekstid$keeletase) %>% 
  ggplot(aes(V1, V2, label=keeleoskustase)) + geom_text()

Tõstan eri tasemete tekstid eri värvidega esile, et joonist oleks lihtsam lugeda.

tekstid %>% select_if(is_numeric) %>% dist() %>% cmdscale(2) %>%
  as_tibble() %>% add_column(keeleoskustase=tekstid$keeletase) %>% 
  ggplot(aes(V1, V2, label=keeleoskustase, color=keeleoskustase)) + geom_text()

Piiritlen y-telje skaalat, et joonis oleks kompaktsem ja objektid selgemini eristatavad. Loobun legendist, et joonis oleks laiem.

tekstid %>% select_if(is_numeric) %>% dist() %>% cmdscale(2) %>%
  as_tibble() %>% add_column(keeleoskustase=tekstid$keeletase) %>% 
  ggplot(aes(V1, V2, label=keeleoskustase, color=keeleoskustase)) + 
  ylim(-30, 30) + geom_text(show.legend=FALSE)

Sarnaselt saab tekste kuvada ühe taseme kaupa, eristades eksamikordi.

tekstid_A2 <- tekstid %>% filter(keeletase=="A2")

tekstid_A2 %>% select_if(is_numeric) %>% dist() %>% cmdscale(2) %>% 
  as_tibble %>% add_column(eksamikord=tekstid_A2$eksam) %>%
  ggplot(aes(V1, V2, label=eksamikord, color=eksamikord)) + geom_text(show.legend=FALSE)