R EKSİK VERİ ANALİZİ

Yüz kişilik bir anket toplayan öğrencinin verisinde ortalama her sekizinci kişinin en az bir cevabı boştur — alan araştırmalarında %10-15 eksik oranı istisna değil olağandır. Katılımcı soruyu atlar, sayfayı çevirmeyi unutur, gelirini söylemek istemez. Eksik veri utanılacak bir kusur değildir; raporlanmadan geçiştirilmesi kusurdur. Jüriler "eksik verilerle ne yaptınız?" sorusunu giderek daha sık soruyor, çünkü seçilen yöntem bulguları gerçekten değiştirebiliyor.
Örneğimiz 100 kişilik bir yaşam doyumu anketi: doyum puanında 12, gelir algısında 8 boş cevap var. Eksikleri tespit edecek, iki temel baş etme yöntemini uygulayacak ve birinin gizli bedelini sayılarla göreceğiz. Tüm çıktılar gerçek çalıştırmadan.
R scriptini indir (.R) — veri: r-eksik-veri-analizi-veri.csv1. Eksikleri Tespit Etmek
colSums(is.na(veri))
# katilimci yas gelir_algisi yasam_doyumu
# 0 0 8 12
mean(is.na(veri$yasam_doyumu)) # 0.12 → %12 eksik
sum(complete.cases(veri)) # 82 → tamamen dolu satır
Üç komut eksik haritasını çıkarır: hangi değişkende kaç boşluk var (colSums), oran ne (mean(is.na()) — mantıksal değerlerin ortalaması doğrudan oranı verir) ve kaç satır her değişkende dolu (complete.cases). Tablo şunu söylüyor: 100 katılımcının yalnızca 82'si her soruyu cevaplamış. Tespitten sonraki asıl soru desendir — eksikler rastgele mi dağılıyor, yoksa belirli bir grup mu (örneğin geliri düşük olanlar gelir sorusunu mu) atlıyor? Sistematik eksik, hangi yöntem seçilirse seçilsin yanlılık riski taşır ve tartışma bölümünde anılmayı hak eder.
2. NA Hesapları Nasıl Bozar: na.rm
mean(veri$yasam_doyumu) # NA
mean(veri$yasam_doyumu, na.rm = TRUE) # 22.35R'ın burada bir felsefesi var ve kasıtlı: içinde bilinmeyen olan bir toplamın kendisi de bilinmeyendir, bu yüzden mean() tek NA gördüğünde sonuca NA der. Excel'in aynı durumda boşları sessizce atlayıp sayı döndürmesiyle taban tabana zıttır — R sizi eksikle yüzleşmeye zorlar. na.rm = TRUE "eksikleri hesaptan çıkar" talimatıdır ve mean, sd, median, sum gibi özet fonksiyonlarının hepsinde çalışır. "Ortalamam NA çıkıyor" şikâyeti, R forumlarındaki en sık başlangıç sorusudur ve cevabı bu parametredir.
3. Yöntem 1: Satır Silme
tam <- na.omit(veri)
nrow(tam) # 82Listwise deletion — herhangi bir değişkeni eksik olan satırı tamamen atmak. En yalın yöntemdir ve iki koşul birlikte sağlanıyorsa savunulabilir: eksik oranı düşük (%5 bandı sık anılan eşiktir) ve eksikler rastgele dağılmış. Bedeli örneklem kaybıdır: burada 100 kişi 82'ye indi — %18 kayıp. Küçük örneklemli tezlerde bu kayıp, testlerin gücünü görünür biçimde düşürür; 30 kişilik grubun 24'e inmesi anlamlı bir farkı gözden kaçırtabilir.
4. Yöntem 2: Ortalama Doldurma ve Gizli Bedeli
ort <- mean(veri$yasam_doyumu, na.rm = TRUE)
doldurulmus$yasam_doyumu[is.na(doldurulmus$yasam_doyumu)] <- ort
sd(veri$yasam_doyumu, na.rm = TRUE) # 4.75 → orijinal
sd(doldurulmus$yasam_doyumu) # 4.46 → doldurma sonrasıMean imputation eksikleri değişkenin ortalamasıyla doldurur; örneklem büyüklüğü korunur, kod üç satırdır. Ama son iki satıra bakın: standart sapma 4.75'ten 4.46'ya düştü. Sebep mekanik — 12 kişiye tam ortalama değer atandığında dağılımın ortası yapay olarak kalabalıklaşır, saçılım küçülür. Küçülen sapma, korelasyonları ve test istatistiklerini de sistematik biçimde saptırır: veri olduğundan daha "derli toplu" görünür.

Bu yüzden modern istatistik, ortalama doldurmayı ancak eksik oranı çok düşükken ve gerekçesiyle kabul eder. Ciddi eksik oranlarında altın standart çoklu atamadır (multiple imputation, R'da mice paketi): eksikler diğer değişkenlerden tahminle, belirsizliği koruyarak ve birden çok kopyada doldurulur. Lisansüstü tezlerde mice'ı yöntem bölümüne yazmak giderek standartlaşıyor.
5. Kategorik Değişkende Eksik
table(veri$gelir_algisi, useNA = "ifany")
# Dusuk Orta Yuksek <NA>
# 25 51 16 8
veri$gelir_algisi[is.na(veri$gelir_algisi)] <- "Belirtilmemis"Sayısal değişkendeki çözümler kategorikte anlamsızdır — "gelir algısı ortalaması" diye bir doldurma değeri yoktur. Yaygın ve dürüst pratik, eksikliği kendi kategorisine dönüştürmektir: "Belirtilmemiş". Bu, bilgiyi kaybetmek yerine görünür kılar; hatta bazen kendisi bulgudur — gelir sorusunu boş bırakanların profili başlı başına yorumlanabilir. table() içindeki useNA = "ifany" parametresine dikkat: yazılmazsa tablo NA'ları sessizce gizler ve 8 kişilik eksik gözden kaçar.
6. Tezde Raporlama ve Dosyalar
Yöntem bölümü kalıbı: "Veri setinde yaşam doyumu değişkeninde %12, gelir algısında %8 oranında eksik gözlem bulunmaktadır. Eksiklerin dağılımı incelenmiş, sistematik bir desen gözlenmemiştir. Analizler tam veriye sahip 82 katılımcı üzerinden yürütülmüş; kategorik gelir algısı değişkeninde eksik cevaplar 'Belirtilmemiş' kategorisinde toplanmıştır." Üç öğe eksiksiz: oran, desen değerlendirmesi, seçilen yöntem. Bu paragrafın yokluğu, jüri için "eksiklerle ne yapıldığı belli değil" notudur.
Örnek veriyi indir (.csv) — 100 katılımcı, NA'lı anket verisiScript ile veriyi aynı klasörde çalıştırıp tespitten doldurmaya bütün adımları yeniden üretebilirsiniz; sd'nin küçülüşünü kendi konsolunuzda görmek, bu dersin en kalıcı hâlidir. Eksik veri kararı, analiz zincirinin ilk halkasıdır — sonrasında hangi teste gidileceği test seçimi rehberinde. Veri temizliğinden çoklu atamaya, gerçek ve dağınık verilerle çalışmayı uygulamalı öğrenmek için R veri analizi eğitimi bu senaryoların tamamını kapsıyor; büyük veri kümelerinde aynı işlerin Python karşılığı için Python veri analizi eğitimi paralel bir hat sunar.
Sıkça Sorulan Sorular
mean() fonksiyonum NA döndürüyor; verim mi bozuk?
Hayır — R'ın tasarımı böyle: vektörde tek bir NA varsa mean, sum, sd gibi fonksiyonlar sonuca NA der; bilinmeyen içeren hesabın sonucu bilinmeyendir mantığı. Çözüm na.rm=TRUE parametresidir: mean(x, na.rm=TRUE). Bu davranış sizi eksik veriyle bilinçli yüzleşmeye zorlar; Excel'in sessizce atlamasından daha güvenlidir.
Eksik oranı yüzde kaça kadar kabul edilebilir?
Katı bir evrensel eşik yoktur; %5 altı genellikle sorunsuz sayılır ve basit yöntemlerle geçilir. %10-20 bandında yöntem seçimi önem kazanır — bu örnekteki %12'de satır silme %18 örneklem kaybettirdi. %20 üzerinde çoklu atama (mice) fiilen zorunludur. Orandan daha kritik olan desendir: %3'lük ama sistematik bir eksik, %15'lik rastgele eksikten daha tehlikelidir.
Ortalama doldurma neden sakıncalı, madem örneklemi koruyor?
Çünkü dağılımı yapay olarak sıkıştırır: eksik hücrelere tam ortalama atandığında saçılım daralır — bu örnekte sd 4.75'ten 4.46'ya indi. Küçülen varyans, korelasyonları zayıflatır, güven aralıklarını olduğundan dar gösterir ve p değerlerini saptırır. Örneklemi korumanın bedeli, verinin gerçek belirsizliğini silmektir; ciddi oranlarda mice gibi çoklu atama tercih edilir.
Eksiklerin rastgele dağılıp dağılmadığını nasıl anlarım?
Pratik ilk adım: eksik olanlarla olmayanları diğer değişkenlerde karşılaştırın — doyum puanı boş olanların yaş ortalaması farklı mı? naniar paketi bu keşif için görsel araçlar sunar; ayrıca Little'ın MCAR testi (naniar::mcar_test) 'tamamen rastgele eksik' hipotezini resmi olarak sınar. Fark bulunursa eksik sistematiktir ve yöntem seçimi buna göre yapılır.
Anketi yarım bırakan katılımcıyı tamamen silmeli miyim?
Duruma göre: birkaç maddesi boş katılımcı, ölçek kurallarının izin verdiği ölçüde (örneğin maddelerin %80'i doluysa kişi ortalamasıyla puanlama) korunabilir. Anketin büyük bölümünü boş bırakan katılımcı ise veri kalitesi gerekçesiyle çıkarılır ve bu karar sayısıyla raporlanır: 'Anketin yarısından fazlasını boş bırakan 3 katılımcı analiz dışı tutulmuştur' gibi.
mice paketi ne yapar, ne zaman öğrenmeliyim?
mice (Multivariate Imputation by Chained Equations) eksik değerleri diğer değişkenlerden tahmin ederek doldurur — üstelik tek değer değil, belirsizliği yansıtan birden çok veri kopyası üretir; analizler her kopyada yapılıp sonuçlar birleştirilir. Eksik oranı %10'u aşan lisansüstü çalışmalarda öğrenmeye değer; yöntem bölümünde 'çoklu atama uygulanmıştır' cümlesi giderek beklenti hâline geliyor.


