# Gerekli paketleri yüklendi
library(dplyr)      # Veri Manipülasyonu
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(naniar)     # Eksik Veri Analizi
library(mice)       # Eksik Veri Tamamlama
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(MissMech)   # MCAR Testi
library(missForest) 
library(ggplot2)    # Görselleştirme
library(knitr)      # Tablo Gösterimi
  1. Veri seti adı: “TRUSA.RDS”. Bu veri setini R ortamına aktarınız.
data <- readRDS("TRUSA (1).RDS")
head(data)
##   IDSTUD IDBOOK M042182 M042081 M042049 M042052 M042076 M042302A M042302B
## 1  10210      1       0       0       1       1       1        0        0
## 2  10224      1       1       0       1       1       0        0        0
## 3  20302      1       0       0       0       0       1        0        0
## 4  20316      1       1       0       0       1       0        0        0
## 5  30412      1       0       0       0       0       1        0        0
## 6  30426      1       0       1       1       1       1        0        0
##   M042302C M042100 M042202 M042240 M042093 M042271 M042268 M042159 M042164
## 1        1       0       1       1       0       0       0       1       0
## 2        0       1       1       1       0       0       1       0       0
## 3        0       1       0       1       0       1       0       1       0
## 4        0       1       1       1       0       0       0       1       0
## 5        0       0       1       0       0       1       0       0       0
## 6        0       1       0       1       0       1       1       0       0
##   M042167 M062208 M062208A M062208B M062208C M062208D M062153 M062111A M062111B
## 1       0       0        1        1        0        0       0        0        0
## 2       1       1        1        1        1        1       1        1        1
## 3       0       0        1        0        1        0       0        0        0
## 4       1       0        0        1        0        0       0        0        0
## 5       0       0        1        0        0        1       0        0        0
## 6       1       1        1        1        1        1       1        0        0
##   M062237 M062314 M062074 M062183 M062202 M062246 M062286 M062325 M062106
## 1       0       0       1       0       0       0       0       0       0
## 2       0       0       0       1       1       0       0       0       0
## 3       0       0       0       0       0       0       0       1       0
## 4       0       0       0       0       0       0       1       1       0
## 5       0       0       1       0       0       0       0       0       0
## 6       0       0       1       1       1       0       0       1       1
##   M062124 CNT
## 1       0 TUR
## 2       0 TUR
## 3       0 TUR
## 4       1 TUR
## 5       0 TUR
## 6       1 TUR
str(data)
## 'data.frame':    1151 obs. of  38 variables:
##  $ IDSTUD  : num  10210 10224 20302 20316 30412 ...
##  $ IDBOOK  : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ M042182 : num  0 1 0 1 0 0 1 0 1 0 ...
##  $ M042081 : num  0 0 0 0 0 1 0 0 0 1 ...
##  $ M042049 : num  1 1 0 0 0 1 1 1 1 1 ...
##  $ M042052 : num  1 1 0 1 0 1 1 1 1 1 ...
##  $ M042076 : num  1 0 1 0 1 1 0 0 1 1 ...
##  $ M042302A: num  0 0 0 0 0 0 0 1 0 0 ...
##  $ M042302B: num  0 0 0 0 0 0 0 0 0 0 ...
##  $ M042302C: num  1 0 0 0 0 0 0 0 0 0 ...
##  $ M042100 : num  0 1 1 1 0 1 1 1 1 1 ...
##  $ M042202 : num  1 1 0 1 1 0 0 0 0 0 ...
##  $ M042240 : num  1 1 1 1 0 1 1 0 1 1 ...
##  $ M042093 : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ M042271 : num  0 0 1 0 1 1 1 0 0 1 ...
##  $ M042268 : num  0 1 0 0 0 1 0 1 0 0 ...
##  $ M042159 : num  1 0 1 1 0 0 1 1 1 1 ...
##  $ M042164 : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ M042167 : num  0 1 0 1 0 1 1 1 1 1 ...
##  $ M062208 : num  0 1 0 0 0 1 1 1 1 1 ...
##  $ M062208A: num  1 1 1 0 1 1 1 1 1 1 ...
##  $ M062208B: num  1 1 0 1 0 1 1 1 1 1 ...
##  $ M062208C: num  0 1 1 0 0 1 1 1 1 1 ...
##  $ M062208D: num  0 1 0 0 1 1 1 1 1 1 ...
##  $ M062153 : num  0 1 0 0 0 1 0 0 1 1 ...
##  $ M062111A: num  0 1 0 0 0 0 1 0 0 1 ...
##  $ M062111B: num  0 1 0 0 0 0 0 0 0 1 ...
##  $ M062237 : num  0 0 0 0 0 0 1 0 0 0 ...
##  $ M062314 : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ M062074 : num  1 0 0 0 1 1 0 1 0 1 ...
##  $ M062183 : num  0 1 0 0 0 1 0 0 0 0 ...
##  $ M062202 : num  0 1 0 0 0 1 1 1 1 1 ...
##  $ M062246 : num  0 0 0 0 0 0 1 1 1 1 ...
##  $ M062286 : num  0 0 0 1 0 0 0 0 0 0 ...
##  $ M062325 : num  0 0 1 1 0 1 0 1 1 0 ...
##  $ M062106 : num  0 0 0 0 0 1 1 1 1 0 ...
##  $ M062124 : num  0 0 0 1 0 1 1 1 1 0 ...
##  $ CNT     : chr  "TUR" "TUR" "TUR" "TUR" ...
  1. Veri setinde eksik veri olup olmadığını kontrol ediniz.
miss_var_table(data)
## # A tibble: 1 × 3
##   n_miss_in_var n_vars pct_vars
##           <int>  <int>    <dbl>
## 1             0     38      100
prop_miss(data)
## [1] 0
  1. Kitapçıktaki 35 maddenin toplamını hesaplayarak veri setine yeni bir sütun olarak ekleyiniz.
data <- data %>%
  rowwise() %>%
  mutate(total_score = sum(c_across(starts_with("M")), na.rm = TRUE)) %>%
  ungroup()
head(data$total_score)
## [1] 10 18  8 11  6 21
  1. Toplam puanın her iki ülkeye göre betimsel istatistiklerini hesaplayınız.
# Ülke bazında betimsel istatistikler
data %>%
  group_by(CNT) %>%
  summarise(
    Mean = mean(total_score, na.rm = TRUE),
    Median = median(total_score, na.rm = TRUE),
    SD = sd(total_score, na.rm = TRUE),
    Min = min(total_score, na.rm = TRUE),
    Max = max(total_score, na.rm = TRUE),
    N = n()
  )
## # A tibble: 2 × 7
##   CNT    Mean Median    SD   Min   Max     N
##   <chr> <dbl>  <dbl> <dbl> <dbl> <dbl> <int>
## 1 TUR    13.5     11  7.57     2    32   435
## 2 USA    17.0     17  7.53     1    34   716
  1. Toplam puanın, Türkiye ve ABD örneklemlerinde farklılaşıp farklılaşmadığını t testi ile test ediniz.
turkiye <- data %>% filter(CNT == "TUR") %>% pull(total_score)
abd <- data %>% filter(CNT == "USA") %>% pull(total_score)

asil_ttest <- t.test(turkiye, abd, var.equal = TRUE)
asil_ttest
## 
##  Two Sample t-test
## 
## data:  turkiye and abd
## t = -7.8348, df = 1149, p-value = 1.064e-14
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -4.493049 -2.693382
## sample estimates:
## mean of x mean of y 
##  13.45287  17.04609

Türkiye ve ABD örneklemleri arasındaki toplam puan farkını test eden bağımsız örneklem t-testi sonucunda, t = -7.83 ve p < 0.0001 bulunmuştur, bu da farkın istatistiksel olarak anlamlı olduğunu gösterir. Türkiye’nin ortalama toplam puanı 13.45, ABD’nin ise 17.04 olarak hesaplanmış olup, güven aralığı (-4.49, -2.69) olarak belirlenmiştir. Sonuçlar, ABD’nin TIMSS 2015 değerlendirmesinde Türkiye’ye kıyasla anlamlı şekilde daha yüksek puan aldığını göstermektedir.

  1. Veri setinde %5, %10 ve %15 oranında eksik veriler oluşturunuz.
set.seed(123)  # Rastgelelik için
n_rows <- nrow(data)
n_cols <- ncol(data[, 3:37])  # 35 soru sütun seçildi

# Eksik veri ekleme fonksiyonu yazdırıldı
create_missing_data <- function(data, rate) {
  data_missing <- data
  num_missing <- floor(rate * n_rows * n_cols)  

  missing_rows <- sample(1:n_rows, num_missing, replace = TRUE)  
  missing_cols <- sample(3:37, num_missing, replace = TRUE)  

  for (i in seq_along(missing_rows)) {
    data_missing[missing_rows[i], missing_cols[i]] <- NA
  }
  
  return(data_missing)
}

# %5, %10 ve %15 eksik veri içeren veri setleri oluşturuldu
data_5 <- create_missing_data(data, 0.05)
data_10 <- create_missing_data(data, 0.10)
data_15 <- create_missing_data(data, 0.15)

# Eksik veri oranlarını kontrol edildi
mean(is.na(data_5))
## [1] 0.04399742
mean(is.na(data_10))
## [1] 0.08529929
mean(is.na(data_15))
## [1] 0.1251532
  1. Oluşturulan eksik veri setlerinde önce eksik verinin rasgele olup olmadığını test ediniz. Ardından, liste bazında silme yöntemiyle eksik verileri temizleyerek e seçeneğinde gerçekleştirdiğiniz t testini tekrarlayınız. Tam veri ile elde edilen sonuçlarla karşılaştırınız.
data_5_numeric  <- dplyr::select(data_5, -c(IDSTUD, IDBOOK, CNT))
data_10_numeric <- dplyr::select(data_10, -c(IDSTUD, IDBOOK, CNT))
data_15_numeric <- dplyr::select(data_15, -c(IDSTUD, IDBOOK, CNT))

tamamen_bos_sutunlar <- colSums(is.na(data_5_numeric)) == nrow(data_5_numeric)
data_5_numeric  <- data_5_numeric[, !tamamen_bos_sutunlar]
data_10_numeric <- data_10_numeric[, !tamamen_bos_sutunlar]
data_15_numeric <- data_15_numeric[, !tamamen_bos_sutunlar]

# MCAR Testi ile verilerin rasgele olup olmadığı kontrol edildi
mcar5 <- mcar_test(data_5_numeric)
## Warning in norm::prelim.norm(data): NAs introduced by coercion to integer range
mcar10 <-mcar_test(data_10_numeric)
## Warning in norm::prelim.norm(data): NAs introduced by coercion to integer range
mcar15 <- mcar_test(data_15_numeric)
## Warning in norm::prelim.norm(data): NAs introduced by coercion to integer range
mcar_sonuclari <- data.frame(
  Eksiklik = c("%5 Eksik", "%10 Eksik", "%15 Eksik"),
  p_degeri = c(mcar5$p.value, mcar10$p.value, mcar15$p.value),
  Missing_patterns =  c(mcar5$missing.patterns, mcar10$missing.patterns, mcar15$missing.patterns)
)

kable(mcar_sonuclari, digits = 2, caption = "MCAR Test Sonuçları")
MCAR Test Sonuçları
Eksiklik p_degeri Missing_patterns
%5 Eksik 1 564
%10 Eksik 1 982
%15 Eksik 1 1121

MCAR (Missing Completely at Random) testi sonuçlarına göre, eksik verilerin tamamıyla rastgele dağıldığı görülmektedir (p = 1).

# Liste bazında silme yöntemiyle eksik veriler temizlendi
data_5_clean <- na.omit(data_5)
data_10_clean <- na.omit(data_10)
data_15_clean <- na.omit(data_15)

# Türkiye ve ABD toplam puanları ayrıldı
tr_toplam_05 <- data_5_clean %>% filter(CNT == "TUR") %>% pull(total_score)
usa_toplam_05 <- data_5_clean %>% filter(CNT == "USA") %>% pull(total_score)

tr_toplam_10 <- data_10_clean %>% filter(CNT == "TUR") %>% pull(total_score)
usa_toplam_10 <- data_10_clean %>% filter(CNT == "USA") %>% pull(total_score)

tr_toplam_15 <- data_15_clean %>% filter(CNT == "TUR") %>% pull(total_score)
usa_toplam_15 <- data_15_clean %>% filter(CNT == "USA") %>% pull(total_score)

# Eksik veri sonrası t-testleri yapıldı
miss_05 <- t.test(tr_toplam_05, usa_toplam_05, var.equal = TRUE)
miss_10 <- t.test(tr_toplam_10, usa_toplam_10, var.equal = TRUE)
miss_15 <- t.test(tr_toplam_15, usa_toplam_15, var.equal = TRUE)

# Sonuçların gösterilmesi (t-istatistikleri ve p-değerleri)
t_stat <- data.frame(
  Veri_Durumu = c("Tam Veri", "%5 Eksik Veri", "%10 Eksik Veri", "%15 Eksik Veri"),
  t_Istatistik = c(asil_ttest$statistic, miss_05$statistic, miss_10$statistic, miss_15$statistic),
  p_Degeri = c(asil_ttest$p.value, miss_05$p.value, miss_10$p.value, miss_15$p.value)
)

# Sonuçların yazdırılması
t_stat$p_Degeri <- format(t_stat$p_Degeri, scientific = FALSE)
print(t_stat)
##      Veri_Durumu t_Istatistik               p_Degeri
## 1       Tam Veri    -7.834784 0.00000000000001063776
## 2  %5 Eksik Veri    -3.242426 0.00139867355582603669
## 3 %10 Eksik Veri    -1.779378 0.08498486193270329836
## 4 %15 Eksik Veri    -1.314989 0.25883341944478210905

Eksik veri oranı arttıkça t-istatistiğinin mutlak değeri azalarak Türkiye ve ABD arasındaki farkın istatistiksel anlamlılığını kaybetmesine neden olmuştur. Tam veri ile yapılan t-testi sonucunda gruplar arasında anlamlı bir fark gözlemlenirken (t = -7.83, p < 0.001), eksik veri oranı %5’e çıkarıldığında fark azalmış ancak hâlâ anlamlı kalmıştır (t = -3.24). %10 ve %15 eksik veri oranlarında ise t-istatistiği anlamlılık eşiğinin altına düşerek (t = -1.78, t = -1.31) farkın artık istatistiksel olarak önemli olmadığını göstermiştir.

  1. f seçeneğinde oluşturulan veri setlerindeki eksik verileri, belirlediğiniz bir kayıp veri atama yöntemiyle doldurunuz. Daha sonra, e seçeneğinde gerçekleştirdiğiniz t testini tekrar ediniz ve tam veri ile elde edilen sonuçlarla karşılaştırınız.
# Eksik veri setlerinden sadece test değişkenleri seçildi (ID ve Ülke bilgilerini hariç tutarak)
data_5_mice  <- dplyr::select(data_5, -IDSTUD, -IDBOOK, -CNT)
data_10_mice <- dplyr::select(data_10, -IDSTUD, -IDBOOK, -CNT)
data_15_mice <- dplyr::select(data_15, -IDSTUD, -IDBOOK, -CNT)
# Multiple Imputation by Chained Equations (MICE) kullanarak eksik verileri dolduruldu
imputed_5 <- mice(data_5_mice, m = 5, method = "pmm", maxit = 5)
## Warning: Number of logged events: 32
imputed_10 <- mice(data_10_mice, m = 5, method = "pmm", maxit = 5)
## Warning: Number of logged events: 5
imputed_15 <- mice(data_15_mice, m = 5, method = "pmm", maxit = 5)
# Eksik verileri doldurulan yeni veri setleri oluşturuldu
data_5_filled <- complete(imputed_5)
data_10_filled <- complete(imputed_10)
data_15_filled <- complete(imputed_15)

# Eksik veriler doldurulduktan sonra ID ve Ülke bilgileri tekrar eklendi
data_5_filled <- cbind(data_5[, c("IDSTUD", "IDBOOK", "CNT")], data_5_filled)
data_10_filled <- cbind(data_10[, c("IDSTUD", "IDBOOK", "CNT")], data_10_filled)
data_15_filled <- cbind(data_15[, c("IDSTUD", "IDBOOK", "CNT")], data_15_filled)

# Eksik veriler doldurulduktan sonra toplam puan hesaplandı
data_5_filled <- data_5_filled %>%
  mutate(total_score = rowSums(select(., everything(), -IDSTUD, -IDBOOK, -CNT), na.rm = TRUE))

data_10_filled <- data_10_filled %>%
  mutate(total_score = rowSums(select(., everything(), -IDSTUD, -IDBOOK, -CNT), na.rm = TRUE))

data_15_filled <- data_15_filled %>%
  mutate(total_score = rowSums(select(., everything(), -IDSTUD, -IDBOOK, -CNT), na.rm = TRUE))


# Türkiye ve ABD toplam puanlarını alındı
tr_toplam_05_filled <- data_5_filled %>% filter(CNT == "TUR") %>% pull(total_score)
usa_toplam_05_filled <- data_5_filled %>% filter(CNT == "USA") %>% pull(total_score)

tr_toplam_10_filled <- data_10_filled %>% filter(CNT == "TUR") %>% pull(total_score)
usa_toplam_10_filled <- data_10_filled %>% filter(CNT == "USA") %>% pull(total_score)

tr_toplam_15_filled <- data_15_filled %>% filter(CNT == "TUR") %>% pull(total_score)
usa_toplam_15_filled <- data_15_filled %>% filter(CNT == "USA") %>% pull(total_score)

# t-Testi Yapıldı
miss_05_filled <- t.test(tr_toplam_05_filled, usa_toplam_05_filled, var.equal = TRUE)
miss_10_filled <- t.test(tr_toplam_10_filled, usa_toplam_10_filled, var.equal = TRUE)
miss_15_filled <- t.test(tr_toplam_15_filled, usa_toplam_15_filled, var.equal = TRUE)


t_stat_filled <- data.frame(
  Veri_Durumu = c("Tam Veri", "Eksik_5_İmpute", "Eksik_10_İmpute", "Eksik_15_İmpute"),
  t_Istatistik = c(asil_ttest$statistic, miss_05_filled$statistic, miss_10_filled$statistic, miss_15_filled$statistic),
  p_Degeri = c(asil_ttest$p.value, miss_05_filled$p.value, miss_10_filled$p.value, miss_15_filled$p.value)
)

# Sonuçlar ekrana yazdırıldı
t_stat_filled$p_Degeri <- format(t_stat$p_Degeri, scientific = FALSE)
print(t_stat_filled)
##       Veri_Durumu t_Istatistik               p_Degeri
## 1        Tam Veri    -7.834784 0.00000000000001063776
## 2  Eksik_5_İmpute    -7.836958 0.00139867355582603669
## 3 Eksik_10_İmpute    -7.856922 0.08498486193270329836
## 4 Eksik_15_İmpute    -7.850569 0.25883341944478210905
  1. Eksik veri oranının uygulanan yöntemlerin performansına etkisini açıklayınız.

Eksik veri oranı arttıkça, istatistiksel testlerin gücü ve güvenilirliği azalıyor. Düşük eksikliklerde (%5-10), liste bazlı silme veya basit doldurma yöntemleri genellikle yeterli olurken, eksiklik oranı arttıkça (%10-20) varyans küçülür ve anlamlılık kaybolmaya başlıyor.

Ödevi hazırlamam 2.5 3 saatimi aldı.