# 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
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" ...
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
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
# Ü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
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.
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
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ı")
| 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.
# 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
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ı.