library(haven)
library(dplyr)
library(knitr)
library(ggplot2)
library(tidyr)
library(naniar)

1 Veri Seti Yükleme

Başlangıç olarak veri setini yükleyelim. Bu veri seti ICILS2023 İspanya, öğrenci örneklemine ait verileri içermektedir. Veri setinden seçilen bazı maddeler şu şekildedir: (bu açıklamaları copilot önerdi. Bence oldukça faydalı olabilir)

load("BSGESPI3.Rdata")
data <- BSGESPI3 %>%
  select(IS3G02, starts_with("IS3G24"),starts_with("IS3G25A")) %>%
  rename(CINSIYET = IS3G02) %>%
  expss::drop_var_labs() %>%
  mutate(across(everything(), ~ ifelse(. %in% c(8, 9), NA, .)))

knitr::kable(miss_var_summary(data),caption = "Kayıp Verilerin Özeti")
Kayıp Verilerin Özeti
variable n_miss pct_miss
IS3G25AE 1518 12.9
IS3G25AF 1446 12.3
IS3G25AH 1434 12.2
IS3G25AD 1433 12.1
IS3G25AG 1431 12.1
IS3G25AC 1400 11.9
IS3G24F 1323 11.2
IS3G25AA 1318 11.2
IS3G25AB 1311 11.1
IS3G24L 1276 10.8
IS3G24M 1273 10.8
IS3G24E 1268 10.7
IS3G24J 1264 10.7
IS3G24I 1215 10.3
IS3G24G 1205 10.2
IS3G24K 1182 10.0
IS3G24H 1181 10.0
IS3G24C 1140 9.66
IS3G24D 1057 8.96
IS3G24B 1044 8.85
IS3G24A 990 8.39
CINSIYET 62 0.525

Cinsiyet değişkeni ile birlikte öğrencilerin bilişim teknolojileriyle ilgili özyeterlik algılarını belirlemek amacıyla hazırlanmış 13 madde ve bilim teknolojilerine yönelik tutumlarını belirlemek için 8 madde yer almaktadır.

mcar_test(data)
## # A tibble: 1 × 4
##   statistic    df p.value missing.patterns
##       <dbl> <dbl>   <dbl>            <int>
## 1    10757.  8362       0              528
data <- na.omit(data)

Kayıp veriler incelenmiş ve veri setinde rastgele kayıp veri olmadığı tespit edilmiştir. Bu öğrenme günlüğünün odak noktası uç değerlerdir, bu nedenle kayıp veriler ile baş etmek için yalnızca liste bazlı silme yöntemi kullanılmıştır.

1.1 Tek Değişkenli Uç Değer

library(summarytools)
## Warning: package 'summarytools' was built under R version 4.4.3
freq(data$CINSIYET,round.digits = 2,report.nas = F,style = "rmarkdown")
## setting plain.ascii to FALSE
## ### Frequencies  
## #### data$CINSIYET  
## **Type:** Numeric  
## 
## |    &nbsp; | Freq |      % | % Cum. |
## |----------:|-----:|-------:|-------:|
## |     **1** | 3875 |  48.08 |  48.08 |
## |     **2** | 4184 |  51.92 | 100.00 |
## | **Total** | 8059 | 100.00 | 100.00 |

Cinsiyet değişkeninde grupların frekansları incelendiğinde, veri setinde kadın ve erkek öğrencilerin neredeyse eşit sayıda olduğu görülmektedir. Bu nedenle tek değişkenli uç değerler söz konusu değildir.

data <- data %>%
  mutate(SELFEFF = rowSums(data[2:12])) %>%
  mutate(ATTITUDE = rowSums(data[13:22]))
library(outliers)
z_scores <- data %>%
  select(23:24) %>% scores(type = "z") %>% round(2)
head(z_scores)
##   SELFEFF ATTITUDE
## 1    0.24     0.47
## 2    0.24    -0.02
## 3    0.80     0.96
## 4   -0.31     0.96
## 5    0.06    -0.02
## 6   -1.80    -2.46
library(summarytools)
descr(z_scores,stats = c("min","max"),transpose = T,headings = F) %>% kable()
Min Max
ATTITUDE -2.46 4.87
SELFEFF -1.80 4.32
library(DT)
DT::datatable(z_scores)

İnteraktif tablo incelendiğinde toplam puan bazında z-değerleri için kabul edilebilecek aralık [-3,3] varsayıldığında uç değerlerin olduğu görülmektedir.

ggplot(data, aes(x = SELFEFF)) +
  geom_histogram(bins = 30, fill = "lightblue") + 
  papaja::theme_apa()

ggplot(data, aes(x = ATTITUDE)) +
  geom_histogram(bins = 30, fill = "orange") + 
  papaja::theme_apa()

ggplot(data, aes(y = SELFEFF)) +
  geom_boxplot() + 
  papaja::theme_apa()

ggplot(data, aes(y = ATTITUDE)) +
  geom_boxplot() + 
  papaja::theme_apa()

Kutu grafikleri incelendiğinde özyeterlik ve tutum puanlarında uç değerlerin olduğu görülmektedir. Bu uç değerleri veri setinden çıkaralım.

out_z <- which(abs(z_scores) > 3)
data_nooutlier <- data[-out_z,]

1.2 Çok Değişkenli Uç Değer

1.2.1 Mahalanobis Uzaklığı

library(psych)
## Warning: package 'psych' was built under R version 4.4.2
## 
## Attaching package: 'psych'
## The following object is masked from 'package:outliers':
## 
##     outlier
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
veri <- data[,23:24]
md <- mahalanobis(veri,center = colMeans(veri), cov = cov(veri))
alpha = 0.001
cutoff <- qchisq(p = 1-alpha,df = ncol(veri))
ucdegerler <- which(md > cutoff)
veri_noout <- veri[-(ucdegerler),]
veri <- data_nooutlier[,23:24]
md <- mahalanobis(veri,center = colMeans(veri), cov = cov(veri))
alpha = 0.001
cutoff <- qchisq(p = 1-alpha,df = ncol(veri))
ucdegerler <- which(md > cutoff)
veri_noout <- veri[-(ucdegerler),]

Çok değişkenli uç değerler Mahalanobis Uzaklığına göre (p < 0.001) belirlenmiştir. Uç değerler veri setinden çıkarılmıştır.

nrow(data_nooutlier)
## [1] 7984
nrow(veri_noout)
## [1] 7933

Yalnızca tek değişkenli uç değerler için z-değerleri incelendiğinde 75 kişi uç değer, çok değişkenli uç değer belirleme yöntemlerine göre uç değerler incelendiğinde ise 97 kişi uç değer olarak belirlenmiştir. Hem tek hem de çok değişkenli uç değerlerin çıkarılması sonucunda veri setinde 126 kişi uç değer olarak belirlenmiştir. Bu bağlamda tek değişkenli uç değer ile çok değişkenli uç değerlerin farklılık gösterebileceği belirlenen uç değer sayısı bazında gösterilmiştir.