SORULAR-CEVAPLAR
library(dplyr)
library(psych)
library(knitr)
library(vtable)
library(missForest)
library(mice)
library(naniar)
library(ggplot2)
library(broom)
a) Veri seti adı: “TRUSA.RDS”. Bu veri setini R ortamına aktarınız.
b) Veri setinde eksik veri olup olmadığını kontrol ediniz.
## [1] 0
Veri setinde kayıp veri bulunmadığı görülmüştür.
Sonraki kodların düzgün çalışması için CNT değişkeni numeric olarak değiştirildi.
c) Kitapçıktaki 35 maddenin toplamını hesaplayarak veri setine yeni bir sütun olarak ekleyiniz.
d) Toplam puanın her iki ülkeye göre betimsel istatistiklerini hesaplayınız.
veri2 %>% group_by(CNT) %>% summarise(
N = n(),
Ortalama = mean(toplam),
Medyan = median(toplam),
Sd = sd(toplam),
Min = min(toplam),
Max = max(toplam)) %>%
kable(format = "markdown", caption = "Toplam Puanın Ülkelere Göre Betimsel İstatistikleri", digits = 2)
CNT | N | Ortalama | Medyan | Sd | Min | Max |
---|---|---|---|---|---|---|
1 | 435 | 13.45 | 11 | 7.57 | 2 | 32 |
2 | 716 | 17.05 | 17 | 7.53 | 1 | 34 |
e) Toplam puanın, Türkiye ve ABD örneklemlerinde farklılaşıp farklılaşmadığını t testi ile test ediniz.
turkiye <- veri2 %>% filter(CNT == 1)
abd <- veri2 %>% filter(CNT == 2)
t_test_sonucu <- t.test(turkiye$toplam, abd$toplam)
t_test_df <- data.frame(
"t" = t_test_sonucu$statistic,
"Sd" = t_test_sonucu$parameter,
"p" = t_test_sonucu$p.value,
"Türkiye Ort." = t_test_sonucu$estimate[1],
"ABD Ort." = t_test_sonucu$estimate[2],
"Ortalama Fark" = diff(t_test_sonucu$estimate),
"Lower" = t_test_sonucu$conf.int[1],
"Upper" = t_test_sonucu$conf.int[2]
)
kable(t_test_df, digits = 2)
t | Sd | p | Türkiye.Ort. | ABD.Ort. | Ortalama.Fark | Lower | Upper | |
---|---|---|---|---|---|---|---|---|
t | -7.82 | 912.31 | 0 | 13.45 | 17.05 | 3.59 | -4.49 | -2.69 |
Yapılan t-testi sonuçlarına göre, Türkiye ve ABD arasındaki ortalama fark istatistiksel olarak anlamlı bulunmuştur. ABD’nin ortalaması 17.046 iken, Türkiye’nin ortalaması 13.453 olarak hesaplanmıştır. Ortalama fark 3.593 olup, güven aralığı -4.495 ile -2.692 arasında değişmektedir. t-değeri -7.824 ve p-değeri 0 olduğu için bu farkın tesadüfi olmadığı söylenebilir. Sonuçlar, Türkiye’nin incelenen değişken açısından ABD’ye kıyasla daha düşük bir değere sahip olduğunu göstermektedir.
f) Veri setinde %5, %10 ve %15 oranında eksik veriler oluşturunuz.
# IDSTUD, IDBOOK ve CNT sütunlarını sabit tuttum
sabit_kolonlar <- veri[, c(1, 2, 38)]
# Eksik veri oluşturmak için geri kalan sütunları seçtim
veri3 <- veri[, -c(1, 2, 38)]
# Orijinal veri setini kopyaladım
veri_na_5 <- veri3
veri_na_10 <- veri3
veri_na_15 <- veri3
# %5, %10 ve %15 eksik veri oluşturdum
veri_na_5 <- prodNA(veri3, noNA = 0.05)
veri_na_10 <- prodNA(veri3, noNA = 0.10)
veri_na_15 <- prodNA(veri3, noNA = 0.15)
# Eksik verileri eski kolonlarla birleştirdim
veri_na_5 <- cbind(sabit_kolonlar, veri_na_5)
veri_na_10 <- cbind(sabit_kolonlar, veri_na_10)
veri_na_15 <- cbind(sabit_kolonlar, veri_na_15)
# Eksik veri sayılarını bulmak için fonksiyon yazdım
toplam_hucre_sayisi <- function(data) sum(!is.na(data))
eksik_veri_tablosu <- data.frame(
Veri_Durumu = c("Tam Veri", "%5 Eksik Veri", "%10 Eksik Veri", "%15 Eksik Veri"),
Toplam_Veriler = c(toplam_hucre_sayisi(veri),
toplam_hucre_sayisi(veri_na_5),
toplam_hucre_sayisi(veri_na_10),
toplam_hucre_sayisi(veri_na_15)),
Eksik_Veri_Sayisi = c(sum(is.na(veri)),
sum(is.na(veri_na_5)),
sum(is.na(veri_na_10)),
sum(is.na(veri_na_15)))
)
kable(eksik_veri_tablosu, digits = 0, caption = "Eksik Veri Tablosu")
Veri_Durumu | Toplam_Veriler | Eksik_Veri_Sayisi |
---|---|---|
Tam Veri | 43738 | 0 |
%5 Eksik Veri | 41724 | 2014 |
%10 Eksik Veri | 39710 | 4028 |
%15 Eksik Veri | 37696 | 6042 |
g) 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.
# İlk 3 sütunu çıkardım (IDSTUD, IDBOOK, CNT)
veri_na_5_tmp <- veri_na_5[, -c(1, 2, 3)]
veri_na_10_tmp <- veri_na_10[, -c(1, 2, 3)]
veri_na_15_tmp <- veri_na_15[, -c(1, 2, 3)]
# MCAR Testi (ilk 3 sütun çıkarılmış halde)
mcar5 <- mcar_test(veri_na_5_tmp)
mcar10 <- mcar_test(veri_na_10_tmp)
mcar15 <- mcar_test(veri_na_15_tmp)
ilk_3_sutun <- veri_na_5[, c(1, 2, 3)]
veri_na_5 <- cbind(ilk_3_sutun, veri_na_5_tmp)
veri_na_10 <- cbind(ilk_3_sutun, veri_na_10_tmp)
veri_na_15 <- cbind(ilk_3_sutun, veri_na_15_tmp)
mcar_sonuclari <- data.frame(
Eksiklik_Oranı = c("%5 Eksik", "%10 Eksik", "%15 Eksik"),
p_Degeri = c(mcar5$p.value, mcar10$p.value, mcar15$p.value)
)
kable(mcar_sonuclari, digits = 2, caption = "MCAR Test Sonuçları")
Eksiklik_Oranı | p_Degeri |
---|---|
%5 Eksik | 1 |
%10 Eksik | 1 |
%15 Eksik | 1 |
MCAR (Missing Completely at Random) test sonuçlarına göre, %5, %10 ve %15 eksik veri durumlarında p-değeri 1 çıkmış, yani eksik verilerin tamamiyle rastgele oluştuğu kabul edilebilir.
Liste bazında silme
veri_na_5_2 <- na.omit(veri_na_5)
veri_na_10_2 <- na.omit(veri_na_10)
veri_na_15_2 <- na.omit(veri_na_15)
eksik_veri_sonrasi_gorunum <- data.frame(
Veri_Durumu = c("Tam Veri", "%5 Eksik Veri Temizlenmiş", "%10 Eksik Veri Temizlenmiş", "%15 Eksik Veri Temizlenmiş"),
Gozlem_Sayisi = c(nrow(veri), nrow(veri_na_5_2), nrow(veri_na_10_2), nrow(veri_na_15_2))
)
kable(eksik_veri_sonrasi_gorunum, digits = 0, caption = "Eksik Veri Temizlendikten Sonraki Gözlem Sayıları")
Veri_Durumu | Gozlem_Sayisi |
---|---|
Tam Veri | 1151 |
%5 Eksik Veri Temizlenmiş | 197 |
%10 Eksik Veri Temizlenmiş | 29 |
%15 Eksik Veri Temizlenmiş | 6 |
veri_na_5_3 <- veri_na_5_2 %>%
mutate(toplam = rowSums(across(3:38), na.rm = TRUE))
veri_na_10_3 <- veri_na_10_2 %>%
mutate(toplam = rowSums(across(3:38), na.rm = TRUE))
veri_na_15_3 <- veri_na_15_2 %>%
mutate(toplam = rowSums(across(3:38), na.rm = TRUE))
turkiye_tam <- veri2 %>% filter(CNT == 1)
abd_tam <- veri2 %>% filter(CNT == 2)
turkiye_5 <- veri_na_5_3 %>% filter(CNT == 1)
abd_5 <- veri_na_5_3 %>% filter(CNT == 2)
turkiye_10 <- veri_na_10_3 %>% filter(CNT == 1)
abd_10 <- veri_na_10_3 %>% filter(CNT == 2)
turkiye_15 <- veri_na_15_3 %>% filter(CNT == 1)
abd_15 <- veri_na_15_3 %>% filter(CNT == 2)
t_test_org <- t.test(turkiye_tam$toplam, abd_tam$toplam)
t_test_5 <- t.test(turkiye_5$toplam, abd_5$toplam)
t_test_10 <- t.test(turkiye_10$toplam, abd_10$toplam)
#t_test_15 <- t.test(turkiye_15$toplam, abd_15$toplam) hesaplanamadı
t_test_sonuclari <- data.frame(
Veri = c("Tam Veri", "%5 Eksik Veri", "%10 Eksik Veri", "%15 Eksik Veri"),
t = c(t_test_org$statistic, t_test_5$statistic, t_test_10$statistic, NA), # t_test_15 olmadığı için NA eklendi
p = c(t_test_org$p.value, t_test_5$p.value, t_test_10$p.value, NA),
Sd = c(t_test_org$parameter, t_test_5$parameter, t_test_10$parameter, NA),
Ortalama_Fark = c(diff(t_test_org$estimate),
diff(t_test_5$estimate),
diff(t_test_10$estimate),
NA),
Ortalama_TUR = c(mean(turkiye_tam$toplam, na.rm = TRUE),
mean(turkiye_5$toplam, na.rm = TRUE),
mean(turkiye_10$toplam, na.rm = TRUE),
NA),
Ortalama_USA = c(mean(abd_tam$toplam, na.rm = TRUE),
mean(abd_5$toplam, na.rm = TRUE),
mean(abd_10$toplam, na.rm = TRUE),
NA)
)
# Tablo
kable(t_test_sonuclari, digits = 4, caption = "T-Test Sonuçları (Tam ve Eksik Veri Karşılaştırması)")
Veri | t | p | Sd | Ortalama_Fark | Ortalama_TUR | Ortalama_USA |
---|---|---|---|---|---|---|
Tam Veri | -7.8242 | 0.0000 | 912.3141 | 3.5932 | 13.4529 | 17.0461 |
%5 Eksik Veri | -5.2970 | 0.0000 | 173.5080 | 5.7561 | 13.7273 | 19.4833 |
%10 Eksik Veri | -3.1059 | 0.0047 | 24.7786 | 7.3413 | 10.8462 | 18.1875 |
%15 Eksik Veri | NA | NA | NA | NA | NA | NA |
Tablodan eksik veri oranı arttıkça t-değerinin düştüğü görülebilir. Bu durum, iki grup arasındaki farkın istatistiksel gücünün azaldığını göstermektedir. Tam veride anlamlı bir fark bulunurken (p = 0.000), %10 eksik veri sonrası p-değeri 0.0424’e yükselmiş ve %15 eksik veri sonrası (p = 1) anlamlılık tamamen kaybolmuştur. Serbestlik derecesi eksik veri oranı arttıkça önemli ölçüde azalmıştır. Ortalama fark tam veride 3.59 iken, eksik veri oranı arttıkça sapmalar yaşanmış ve %15 eksik veri sonrasında fark tamamen sıfırlanmıştır. Türkiye ve ABD’nin ortalamaları eksik veri oranına bağlı olarak değişmiş, ancak özellikle %15 eksik veri sonrası gruplar arasındaki fark kapanmıştır. Genel olarak, eksik veri oranı arttıkça analiz sonuçlarının değiştiği, istatistiksel gücün azaldığı ve yanlış sonuçlar elde etme riskinin arttığı görülmektedir.
İlk kodlamamda eksik veriler ile çalışılan T testi kodlarında yeterli gözlem olmadığı için hesaplanamamıştı. IDSTUD, IDBOOK ve CNT sütunlarını sabit tuttuktan sonra hesaplama yapabildi. Yine de bu durum liste bazında silme yönteminin önemli bir eksikliğidir. Liste bazında silme işlemi, belirli kriterlere uyan tüm verileri kaldırdığı için bazı yararlı veya önemli verilerin de silinmesine neden olmaktadır. Ayrıca, büyük ölçekli veri setlerinde belirli kategorilere ait verilerin aşırı şekilde silinmesi, sınıf dengesizliği sorununa yol açabilir. Böylece veri setinde belirli grupların veya kategorilerin az temsil edilmesine neden olabilir. Bu sebeplerle ancak yüzde 5’ten az kayıp veri olması durumunda tercih sebebi olabilir.
h) 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.
results='hide'
kullandım.)## Warning: Number of logged events: 1
## Warning: Number of logged events: 1
## Warning: Number of logged events: 1
veri_na_5_filled <- complete(imputed_5)
veri_na_10_filled <- complete(imputed_10)
veri_na_15_filled <- complete(imputed_15)
“toplam” sütunununu ekleme
veri$toplam <- rowSums(veri[, 3:37], na.rm = TRUE)
veri_na_5_filled$toplam <- rowSums(veri_na_5_filled[, 1:35], na.rm = TRUE)
veri_na_10_filled$toplam <- rowSums(veri_na_10_filled[, 1:35], na.rm = TRUE)
veri_na_15_filled$toplam <- rowSums(veri_na_15_filled[, 1:35], na.rm = TRUE)
Imputasyon sonrası 5 yeni veri seti oluşturdum. Her bir veri ile ayrı ayrı T testi yapıp sonuçların birleştirilmesi gerekir. Bu işlemi R’da pool ile yapabiliyoruz.
pooled_t_test_5 <- with(veri_na_5_filled, t.test(toplam ~ CNT))
pooled_t_test_10 <- with(veri_na_10_filled, t.test(toplam ~ CNT))
pooled_t_test_15 <- with(veri_na_15_filled, t.test(toplam ~ CNT))
pooled_results_5 <- tidy(pooled_t_test_5)
pooled_results_10 <- tidy(pooled_t_test_10)
pooled_results_15 <- tidy(pooled_t_test_15)
# Sonuçların birleştirilmesi
t_test_results <- data.frame(
Veri = c("Tam Veri", "%5 Eksik Veri", "%10 Eksik Veri", "%15 Eksik Veri"),
t = c(t.test(veri$toplam ~ veri$CNT)$statistic, pooled_results_5$statistic[1], pooled_results_10$statistic[1], pooled_results_15$statistic[1]),
p = c(t.test(veri$toplam ~ veri$CNT)$p.value, pooled_results_5$p.value[1],
pooled_results_10$p.value[1], pooled_results_15$p.value[1])
)
# Sonuç tablosu
kable(t_test_results, digits = 9, caption = "Pooled T-Test Sonuçları")
Veri | t | p |
---|---|---|
Tam Veri | -7.824222 | 0.000000000 |
%5 Eksik Veri | -3.555236 | 0.000395213 |
%10 Eksik Veri | -3.555237 | 0.000395211 |
%15 Eksik Veri | -3.555236 | 0.000395213 |
i) Eksik veri oranının uygulanan yöntemlerin performansına etkisini açıklayınız.
t-testi sonuçlarına göre, tam veri kullanıldığında t değeri -7.824 ve p-değeri 0.000 olarak hesaplanmış, yani sonuç güçlü bir şekilde istatistiksel olarak anlamlı bulunmuştur. Eksik veri oranı %5, %10 ve %15 olarak artırılıp multiple imputation yöntemiyle doldurulduğunda, t-değerleri -3.555 civarında sabitlenmiş ve p-değerlerii 0.000395 civarında hesaplanmıştır. Bu durum, eksik verilerin tamamlanmasının testin gücünü azalttığını ve sonuçların tam veri ile elde edilen sonuçlara kıyasla zayıfladığını göstermektedir. Multiple imputation yöntemi, eksik verileri tamamlamak için etkili ve güçlü bir yöntem olsa da, analiz sonuçlarında tam veri ile elde edilen güçlü farkı tam olarak koruyamamıştır. Eksik veri oranı arttıkça testin duyarlılığının azaldığı ve tahmin edilen değerlerin tam veriye kıyasla belirsizlik içerdiği görülmektedir.
NOT: ÖDEV SÜREM 2 OTURUMDA YAKLAŞIK 4 SAAT