İ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.

1. HAFTA

Veri Doğruluğu

  • 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.

2. HAFTA

Kayıp Veri

  • 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.

UYGULAMA

Bu iki dersten öğrendiklerimi küçük bir uygulama üzerinde göstermek isterim

Örneğin

Verinin R ortamına alınması

library(haven)
pisa_data <- read_sav("C:/Users/Lenovo/Desktop/DÜZENLE/pisa.sav")

Türkiye verilerinden yeni bir veri seti oluşturulması

library(dplyr)

pisaturkiye <- pisa_data %>% 
  filter(CNT == "TUR")

İstediğim verilere kısaca bir göz gezdirmek için psych paketindeki describe fonksiyonu en kullanışlı bulduğum oldu

library(psych)
describe(pisaturkiye %>% 
  select(BULLIED, BELONG))
##         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

calisma <- pisaturkiye %>% 
  select(BULLIED, BELONG)

Veri setinde eksik veri olup olmadığını kontrol edelim

sum(is.na(calisma))
## [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)
BULLIED ve BELONG Değişkenlerinin Betimsel İstatistikleri
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

library(vtable)
sumtable(calisma, summ=c('notNA(x)','min(x)','max(x)'))
Summary Statistics
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

library(mice)
md.pattern(calisma)

##      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.)

library(expss)
calisma[] <- lapply(calisma, function(x) { var_lab(x) <- NULL; x })

Bu sefer MissMech paketini kullanalım

library(MissMech)

mcar_test_result <- TestMCARNormality(calisma)

print(mcar_test_result)
## 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.

Veri Setinin Doldurulması

calisma_imputed <- mice(calisma, method = "norm.predict", m = 1)  
## 
##  iter imp variable
##   1   1  BULLIED  BELONG
##   2   1  BULLIED  BELONG
##   3   1  BULLIED  BELONG
##   4   1  BULLIED  BELONG
##   5   1  BULLIED  BELONG
calisma_tam <- complete(calisma_imputed)

sum(is.na(calisma_tam))
## [1] 0

Veri setinde kayıp veri kalmamıştır

GÖRSELLEŞTİRME VE ANALİZLER

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()

  • Sonuçlar zorbalığın okul aidiyetini negatif yönde yordadığını göstermiş, HİPOTEZ DOĞRULANMIŞTIR.