İlk hafta dersimizde, veri analizine başlamadan önce gerçekleştirilen ön işlemleri ikinci hafta dersimizde kayıp veri ile baş etme yöntemlerini ayrıntılı bir şekilde inceledik.
Veri analizi sürecinde en önemli aşamalardan biri, veri setinin doğruluğunu kontrol etmektir. Verinin yanlış girilmesi, analiz sonuçlarını ciddi şekilde etkileyebilir.
Örneğin, “5” yerine yanlışlıkla “55” girilmesi korelasyon analizini saptırabilir.
Küçük veri setlerinde verinin orijinal haliyle karşılaştırılması kolay olsa da, büyük veri setlerinde betimleyici istatistikler ve grafikler kullanılarak hata tespiti yapılmalıdır.
Kayıp veri analiz sürecinde karşılaşılabilecek en yaygın problemlerden biridir.
Kayıp verinin miktarı ve örüntüsü, analizin doğruluğunu doğrudan etkileyebilir.
Ders sırasında incelediğimiz Rubin’in (1976) kayıp veri
sınıflandırmasına göre, kayıp veri tamamen rastlantısal (MCAR),
rastlantısal (MAR) veya sistematik olarak kayıp olabilir.
Eğer kayıp veriler rastgele dağılmıyorsa, sonuçların genellenebilirliği tehlikeye girebilir.
Kayıp veri ile başa çıkmak için farklı yöntemler bulunmaktadır. Liste bazında veri silme yöntemi, kayıp veriye sahip bireyleri analizden çıkarmayı içerirken, çiftler bazında veri silme yöntemi bireylerin yalnızca eksik veriye sahip olduğu değişkenlerde göz ardı edilmesini sağlar. Ancak, her iki yöntemin de analiz gücünü azaltabileceği unutulmamalıdır.
Kayıp veri tahmini yöntemleri ise, eksik değerlerin istatistiksel yöntemlerle doldurulmasını içerir. Ortalama yerleştirme, regresyon yerleştirme, beklenti maksimizasyonu (EM) ve çoklu atıf gibi teknikleri kullanarak eksik veriler tamamlanabilir.
Ancak, bu yöntemlerin her birinin kendine özgü avantaj ve dezavantajları bulunmaktadır.
Örneğin, ortalama yerleştirme yöntemi varyansı daraltabilir ve değişkenler arası korelasyonları etkileyebilirken, çoklu atıf yöntemi bu olumsuzlukları en aza indirerek kayıp veri problemini daha doğru bir şekilde ele alabilir.
Bu iki dersten öğrendiklerimi küçük bir uygulama üzerinde göstermek isterim
Örneğin
PISA 2022 veri setindeki OECD tarafında türetilen indexlerden Zorbalığa Uğrama (BULLIED) ve Okul Aidiyeti (BELONG) verilerinden şöyle bir hipotez kuralım;
“Türkiye örnekleminde, öğrencilerin zorbalığa uğrama düzeyi (BULLIED) arttıkça, okul aidiyeti (BELONG) düzeyleri azalır.”
Verinin R ortamına alınması
Türkiye verilerinden yeni bir veri seti oluşturulması
İstediğim verilere kısaca bir göz gezdirmek için
psych
paketindeki describe
fonksiyonu en
kullanışlı bulduğum oldu
## vars n mean sd median trimmed mad min max range skew kurtosis
## BULLIED 1 7221 -0.20 1.05 -0.27 -0.31 1.42 -1.23 4.69 5.92 0.65 -0.18
## BELONG 2 7210 -0.31 0.97 -0.35 -0.37 0.80 -3.26 2.76 6.01 0.63 1.78
## se
## BULLIED 0.01
## BELONG 0.01
Kayıp veri analizine geçmeden önce Ödev 2’de zorlandığım için, Türkiye verisetindeki BULLIED ve BELONG değişkenlerinden yeni bir veri seti oluşturarak devam edeceğim
Veri setinde eksik veri olup olmadığını kontrol edelim
## [1] 69
Betimsel istatistikleri knitr
kullanarak tablo
şeklinde görmek istiyorum
library(knitr)
calisma %>% summarise(
N = n(),
Z_Ort = mean(BULLIED, na.rm = TRUE),
Z_Med = median(BULLIED, na.rm = TRUE),
Z_Sd = sd(BULLIED, na.rm = TRUE),
Z_Min = min(BULLIED, na.rm = TRUE),
Z_Max = max(BULLIED, na.rm = TRUE),
A_ort = mean(BELONG, na.rm = TRUE),
A_Med = median(BELONG, na.rm = TRUE),
A_Sd = sd(BELONG, na.rm = TRUE),
A_Min = min(BELONG, na.rm = TRUE),
A_Max = max(BELONG, na.rm = TRUE)
) %>%
kable(format = "markdown", caption = "BULLIED ve BELONG Değişkenlerinin Betimsel İstatistikleri", digits = 2)
N | Z_Ort | Z_Med | Z_Sd | Z_Min | Z_Max | A_ort | A_Med | A_Sd | A_Min | A_Max |
---|---|---|---|---|---|---|---|---|---|---|
7250 | -0.2 | -0.27 | 1.05 | -1.228 | 4.6939 | -0.31 | -0.35 | 0.97 | -3.2583 | 2.7562 |
V table paketi ile de gösterelim
Variable | NotNA | Min | Max |
---|---|---|---|
BULLIED | 7221 | -1.2 | 4.7 |
BELONG | 7210 | -3.3 | 2.8 |
vtable paketi görsellerini ve tablolarını oldukça anlaşılır buldum
Kayıp veri oranları
library(naniar)
kayip <- calisma %>%
summarise(
Missing_BULLIED = sum(is.na(BULLIED)),
Missing_BELONG = sum(is.na(BELONG)),
Percent_BULLIED = mean(is.na(BULLIED)) * 100,
Percent_BELONG = mean(is.na(BELONG)) * 100
)
print(kayip)
## # A tibble: 1 × 4
## Missing_BULLIED Missing_BELONG Percent_BULLIED Percent_BELONG
## <int> <int> <dbl> <dbl>
## 1 29 40 0.4 0.552
Kayıp veri oranlarının BULLIED için %0.40, BELONG için %0.55 olduğunu gördüm. Bu oranlar basit atama yöntemleri için uygun görülüyor. Yani ortalama bile atasak varyans daralması analizlerin güvenirliğini tehlikeye düşürecek seviyede olmayacaktır.
Eksik verilerin desenini görelim
## BULLIED BELONG
## 7197 1 1 0
## 24 1 0 1
## 13 0 1 1
## 16 0 0 2
## 29 40 69
Başka şekilde de görselleştirelim
library(VIM)
# Eksik veri matrisini görselleştirme
aggr(calisma, col=c("navyblue", "red"), numbers=TRUE, sortVars=TRUE, labels=names(calisma), cex.axis=0.7, gap=3)
##
## Variables sorted by number of missings:
## Variable Count
## BELONG 0.005517241
## BULLIED 0.004000000
Kayıp verilerin tamamen rastgele dağılıp dağılmadığını kontrol edelim (Bu kısımda labelleri silmediğim için yine sorun yaşadığımı fark ettim.)
Bu sefer MissMech paketini kullanalım
## Call:
## TestMCARNormality(data = calisma)
##
## Number of Patterns: 3
##
## Total number of cases used in the analysis: 7234
##
## Pattern(s) used:
## BULLIED BELONG Number of cases
## group.1 1 1 7197
## group.2 1 NA 24
## group.3 NA 1 13
##
##
## Test of normality and Homoscedasticity:
## -------------------------------------------
##
## Hawkins Test:
##
## P-value for the Hawkins test of normality and homoscedasticity: 1.971251e-274
##
## Either the test of multivariate normality or homoscedasticity (or both) is rejected.
## Provided that normality can be assumed, the hypothesis of MCAR is
## rejected at 0.05 significance level.
##
## Non-Parametric Test:
##
## P-value for the non-parametric test of homoscedasticity: 0.5099671
##
## Reject Normality at 0.05 significance level.
## There is not sufficient evidence to reject MCAR at 0.05 significance level.
Bu sonuçlara göre, testin p-değeri 0.51 olduğu için, MCAR hipotezini reddetmek için yeterli kanıt bulunmamaktadır. Yani eksik veriler tamamen rastgele (MCAR) olabilir.
Bu durumda, eksik verilerin yapısını daha iyi anlamak için eksik verilerin MAR (Missing at Random) veya MNAR (Missing Not at Random) olup olmadığını test etmek gerekebilir.
Eksik veri yönetimi için multiple imputation (çoklu atama) denenebilir.
Ödevde multiple imputation yaptığım için burada eksik verileri regresyon yöntemi ile doldurmak istiyorum.
##
## iter imp variable
## 1 1 BULLIED BELONG
## 2 1 BULLIED BELONG
## 3 1 BULLIED BELONG
## 4 1 BULLIED BELONG
## 5 1 BULLIED BELONG
## [1] 0
Veri setinde kayıp veri kalmamıştır
Artık veri seti ile analizleri yapabiliriz. Tüm kodları aynı chunk’ta çalıştıracağım.
library(ggplot2)
library(ggpubr)
library(patchwork)
library(broom)
library(gt)
library(gtsummary)
library(dplyr)
desc_stats <- calisma_tam %>%
summarise(
N_BULLIED = sum(!is.na(BULLIED)),
Mean_BULLIED = mean(BULLIED, na.rm = TRUE),
Median_BULLIED = median(BULLIED, na.rm = TRUE),
SD_BULLIED = sd(BULLIED, na.rm = TRUE),
Min_BULLIED = min(BULLIED, na.rm = TRUE),
Max_BULLIED = max(BULLIED, na.rm = TRUE),
N_BELONG = sum(!is.na(BELONG)),
Mean_BELONG = mean(BELONG, na.rm = TRUE),
Median_BELONG = median(BELONG, na.rm = TRUE),
SD_BELONG = sd(BELONG, na.rm = TRUE),
Min_BELONG = min(BELONG, na.rm = TRUE),
Max_BELONG = max(BELONG, na.rm = TRUE)
)
desc_stats %>%
gt() %>%
tab_header(title = "BULLIED ve BELONG Değişkenlerinin Betimsel İstatistikleri") %>%
tab_options(table.font.size = 14)
BULLIED ve BELONG Değişkenlerinin Betimsel İstatistikleri | |||||||||||
N_BULLIED | Mean_BULLIED | Median_BULLIED | SD_BULLIED | Min_BULLIED | Max_BULLIED | N_BELONG | Mean_BELONG | Median_BELONG | SD_BELONG | Min_BELONG | Max_BELONG |
---|---|---|---|---|---|---|---|---|---|---|---|
7250 | -0.1988952 | -0.267 | 1.049321 | -1.228 | 4.6939 | 7250 | -0.3075697 | -0.3485 | 0.9675925 | -3.2583 | 2.7562 |
p1 <- ggplot(calisma_tam, aes(x = BULLIED)) +
geom_histogram(aes(y = ..density..), bins = 30, fill = "steelblue", alpha = 0.6) +
geom_density(color = "red", size = 1.2) +
labs(title = "BULLIED Değişkeni - Normallik Grafiği", x = "BULLIED", y = "Density") +
theme_minimal()
p2 <- ggplot(calisma_tam, aes(x = BELONG)) +
geom_histogram(aes(y = ..density..), bins = 30, fill = "steelblue", alpha = 0.6) +
geom_density(color = "red", size = 1.2) +
labs(title = "BELONG Değişkeni - Normallik Grafiği", x = "BELONG", y = "Density") +
theme_minimal()
p1 + p2 + plot_layout(ncol = 2)
model <- lm(BULLIED ~ BELONG, data = calisma_tam)
tbl_regression(model) %>%
as_gt() %>%
tab_header(title = "BULLIED ve BELONG Arasındaki Regresyon Analizi")
BULLIED ve BELONG Arasındaki Regresyon Analizi | |||
Characteristic | Beta | 95% CI | p-value |
---|---|---|---|
BELONG | -0.24 | -0.26, -0.21 | <0.001 |
Abbreviation: CI = Confidence Interval |
ggplot(calisma_tam, aes(x = BELONG, y = BULLIED)) +
geom_point(alpha = 0.2, color = "blue") +
geom_smooth(method = "lm", color = "red", size = 1.2) +
labs(title = "Regresyon Grafiği: BULLIED ~ BELONG", x = "BELONG", y = "BULLIED") +
theme_minimal()