Veri İnceleme

🎯 Amaç

  • Bu derste temel amacımız, veri düzenleme ve özetleme tekniklerini uygulamalı olarak öğrenmektir.

  • Özellikle, değişkenler arasındaki ilişkileri incelerken verilerin farklı düzeylerde (toplam vs. alt gruplar) nasıl farklı görünebileceğini keşfedeceğiz.

  • Bu bağlamda Simpson Paradoksu ve verilerin uygun şekilde düzenlenip gruplanmaması durumunda nasıl yanıltıcı sonuçlara ulaşılabileceğini göstermesi açısından güçlü bir örnektir.

  • Anscombe’un Dörtlüsü ise, aynı özet istatistiklere sahip veri setlerinin görselleştirilmeden yanlış yorumlanabileceğini ortaya koyar.

Veri düzenlemenin önemi, sadece “doğru hesaplama” yapmak değil; aynı zamanda hangi değişkenlerin kontrol edilmesi gerektiğini fark ederek daha anlamlı sonuçlar çıkarmaktır.

🔎 Uygulamalar

  • Simpson Paradoksu (ucb_admit Örneği)
    • Genel oranlar ile alt grup oranlarını karşılaştırma
    • Karıştırıcı (confounding) değişkenlerin etkisini görme
    • Veri düzenlemenin ve doğru gruplamanın önemini tartışma
  • Anscombe’un Dörtlüsü
    • Aynı özet istatistiklere sahip farklı veri setlerini keşfetme
    • Özet istatistikler (ortalama, sd, korelasyon, regresyon) ile görselleştirme sonuçlarını karşılaştırma
    • Veriyi görselleştirmeden sadece özet istatistiklere güvenmenin sakıncalarını tartışma
    • Dersin simspon paradoksu kısmı OpenIntro’nun Introduction to Modern Statistics bölümünden uyarlanmıştır.

1 Simpson Paradoxu

  • Simpson Paradoksu, bir gruptaki iki değişken arasındaki ilişkinin, alt gruplara bölündüğünde ortaya çıktığı, kaybolduğu veya tersine döndüğü istatistiksel bir olgudur.

  • Örneğin, iki değişken bir grupta pozitif ilişkili olabilir, ancak tüm alt gruplarda bağımsız veya hatta negatif ilişkili olabilir.

  • Paradoksu sergileyen vakalar matematik ve olasılık teorisi açısından problemsizdir, ancak yine de birçok insanı şaşırtmaktadır.

  • Bir ilişkiyi incelerken önemli bir değişkeni dikkate almamak Simpson paradoksu ile sonuçlanabilir.

  • Simpson paradoksu, açıklayıcı bir değişkenin ihmal edilmesinin, başka bir açıklayıcı değişken ile yanıt değişkeni arasındaki ilişkinin ölçüsü üzerinde yaratabileceği etkiyi göstermektedir.

  • Üçüncü bir değişkenin analize dahil edilmesi, diğer iki değişken arasındaki görünür ilişkiyi değiştirebilir

📦 Örnek Senaryo: Çok Değişkenli İlişkiler

Günlük alınan kalori miktarı ile kalp sağlığı arasındaki ilişkiyi düşündüğümüzde, bu iki değişkenin tek başına incelenmesi yanıltıcı olabilir. Çünkü kişinin yaşı ve fiziksel kondisyonu gibi başka faktörler de bu ilişkiyi etkiler.

👉 Gerçek dünyada değişkenler arasındaki ilişkiler genellikle çok boyutludur ve bu nedenle analizlerde birden fazla değişkeni dikkate almak gerekir.

1.0.1 Berkeley’deki cinsiyete dayalı kabul oranları:

  • “Berkeley’deki California Üniversitesi’ne 1973 sonbaharında yapılan lisansüstü kabullere ilişkin toplu veriler incelendiğinde, kadın başvuru sahiplerine karşı açık ama yanıltıcı bir önyargı örüntüsü görülmektedir.

  • Veriler altı bölümden gelmektedir. Gizlilik için bölümler A-F olarak kodlanmıştır.

  • Elimizde başvuru sahibinin kadın mı erkek mi olduğu ve kabul edilip edilmediğine dair bilgiler var.

  • İlk olarak, kabul edilen erkeklerin yüzdesinin genel olarak kadınlardan gerçekten daha yüksek olup olmadığını değerlendireceğiz. Daha sonra, her bölüm için aynı yüzdeyi hesaplayacağız.

library(openintro)
Warning: package 'openintro' was built under R version 4.4.3
Loading required package: airports
Warning: package 'airports' was built under R version 4.4.3
Loading required package: cherryblossom
Warning: package 'cherryblossom' was built under R version 4.4.3
Loading required package: usdata
Warning: package 'usdata' was built under R version 4.4.3
library(dplyr)
Warning: package 'dplyr' was built under R version 4.4.3

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
ucb_admit %>%
  count(gender)
ucb_admit %>%
  count(dept)
ucb_admit %>%
  count(admit)

Genel cinsiyet dağılımı hakkında ne söyleyebilirsiniz?

📌 İpucu: Aşağıdaki olasılıkları hesaplayın: \(P(Kabul | Erkek)\) ve \(P(Kabul | Kadın)\).

ucb_admit %>%
  count(gender, admit)
ucb_admit %>%
  count(gender, admit) %>%
  group_by(gender) %>%
  mutate(prop_admit = n / sum(n))
  • \(P(Kabul | Kadın)\) = 0.304
  • \(P(Kabul | Erkek)\) = 0.445
library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(ucb_admit, aes(y = gender, fill = admit)) +
  geom_bar(position = "fill") + 
  labs(title = "Admit by gender",
       y = NULL, x = NULL)

  • Departmanlara göre cinsiyet dağılımı hakkında ne söyleyebilirsiniz?
ucb_admit %>%
  count(dept, gender, admit)

Veri setini uzun formattan geniş formata getirelim

library(tidyr)
ucb_admit %>%
  count(dept, gender, admit) %>%
  pivot_wider(names_from = dept, values_from = n)
ggplot(ucb_admit, aes(y = gender, fill = admit)) +
  geom_bar(position = "fill") +
  facet_wrap(. ~ dept) +
  scale_x_continuous(labels = scales::label_percent()) +
  labs(title = "cinsiyet ve bölümlere göre kabul",
       x = NULL, y = NULL, fill = NULL) +
  theme(legend.position = "bottom")

ucb_admit %>%
  count(dept, gender, admit) %>%
  group_by(dept, gender) %>%
  mutate(
    n_applied  = sum(n),
    prop_admit = n / n_applied
    ) %>%
  filter(admit == "Admitted") %>%
  rename(n_admitted = n) %>%
  dplyr::select(-admit) %>%
  print(n = 12)
# A tibble: 0 × 5
# Groups:   dept, gender [0]
# ℹ 5 variables: dept <chr>, gender <chr>, n_admitted <int>, n_applied <int>,
#   prop_admit <dbl>

Tabloya bakıldığında kadın öğrenciler, üniversitenin en büyük 6 bölümünün 4’ünde erkek öğrencilere göre daha fazla kabul almıştır. Yani A, B, D ve F bölümlerine kabul gören erkek sayısı kadın sayısına göre daha azdır. Şöyle ki erkekler en fazla öğrenci kabul edilen bölüme başvuruyu daha fazla yaparken kız öğrenciler ise en az öğrenci kabul edilen bölüme daha fazla başvuru yapmıştır. Bu sebeple grup yüzdeleri ile toplam yüzdeleri birbirinden farklılık göstermektedir. Konuyu pekiştirmek için başka bir örnekle devam edelim.

🔹 Genel olarak: Erkeklerin kabul edilme olasılığı daha yüksekti.

🔹 Çoğu bölüm içinde: Kadınların kabul edilme olasılığı daha yüksekti.

🔹 Bölüm etkisi kontrol edildiğinde: Cinsiyet ile kabul edilme durumu arasındaki ilişki tersine döndü.

📌 Olası neden:

Kadınlar, kabul oranı daha düşük olan rekabetçi bölümlere başvurma eğilimindeydi.

Erkekler ise, kabul oranı daha yüksek olan daha az rekabetçi bölümlere başvurma eğilimindeydi.

👉 Görüldüğü gibi, erkeklerin genel kabul oranı daha yüksek çıkmış olsa da bölüm bilgisi dikkate alındığında, çoğu bölümde kadınların kabul edilme olasılığı aslında daha yüksektir. Bu durumu Simpson paradoksu olarak adlandırıyoruz.

⚠️ Bu çelişkili bulguyu yalnızca başvurulan bölüm bilgisi analize eklendiğinde keşfedebildik. Bu tür örnekler, bir araştırmada yüzeyde ilgisiz gibi görünen ancak potansiyel olarak karıştırıcı (confounding) etkisi olabilecek değişkenlerin dikkate alınmasının ve toplanmasının önemini vurgular.

İki değişken arasındaki ilişki

`geom_smooth()` using method = 'loess' and formula = 'y ~ x'

Üç değişken arasındaki ilişki

`geom_smooth()` using formula = 'y ~ x'

`geom_smooth()` using formula = 'y ~ x'
`geom_smooth()` using formula = 'y ~ x'

2 Anscombe’un Dörtlüsü

anscombe_quartet veri setinin amacı, verilerinizi görselleştirmenin önemli olduğu noktasını vurgulamaya yardımcı olmaktır. Francis Anscombe bu dört veri setini, istatistiksel özet ölçümlerin tek başına iki değişken (burada x ve y) arasındaki tam ilişkiyi yakalayamayacağını göstermek için oluşturmuştur. Anscombe, özet istatistikleri hesaplamadan önce verileri görselleştirmenin önemini vurgulamıştır.

  • Veri seti 1, x ve y arasında doğrusal bir ilişkiye sahiptir
  • Veri Seti 2, x ve y arasında doğrusal olmayan bir ilişki olduğunu göstermektedir
  • Veri seti 3, x ve y arasında tek bir aykırı değer ile doğrusal bir ilişkiye sahiptir
  • Veri seti 4, etkili değer olarak işlev gören tek bir aykırı değer ile x ve y arasında hiçbir ilişki göstermemektedir.
library(datasets)
datasets::anscombe
  • değişkenlerin ortalamaları
colMeans(anscombe) 
      x1       x2       x3       x4       y1       y2       y3       y4 
9.000000 9.000000 9.000000 9.000000 7.500909 7.500909 7.500000 7.500909 
  • değişkenlerin standart sapmaları
sapply(anscombe,sd)
      x1       x2       x3       x4       y1       y2       y3       y4 
3.316625 3.316625 3.316625 3.316625 2.031568 2.031657 2.030424 2.030579 
  • değişkenler arası korelasyonlar
cor(anscombe[,1:4],anscombe[,5:8])
           y1         y2         y3         y4
x1  0.8164205  0.8162365  0.8162867 -0.3140467
x2  0.8164205  0.8162365  0.8162867 -0.3140467
x3  0.8164205  0.8162365  0.8162867 -0.3140467
x4 -0.5290927 -0.7184365 -0.3446610  0.8165214
  • regresyon denklemleri
ff <- y ~ x
mods <- setNames(as.list(1:4), paste0("lm", 1:4))
for(i in 1:4) {
  ff[2:3] <- lapply(paste0(c("y","x"), i), as.name)
  mods[[i]] <- lmi <- lm(ff, data = anscombe)
  print(anova(lmi))
}
Analysis of Variance Table

Response: y1
          Df Sum Sq Mean Sq F value  Pr(>F)   
x1         1 27.510 27.5100   17.99 0.00217 **
Residuals  9 13.763  1.5292                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Analysis of Variance Table

Response: y2
          Df Sum Sq Mean Sq F value   Pr(>F)   
x2         1 27.500 27.5000  17.966 0.002179 **
Residuals  9 13.776  1.5307                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Analysis of Variance Table

Response: y3
          Df Sum Sq Mean Sq F value   Pr(>F)   
x3         1 27.470 27.4700  17.972 0.002176 **
Residuals  9 13.756  1.5285                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Analysis of Variance Table

Response: y4
          Df Sum Sq Mean Sq F value   Pr(>F)   
x4         1 27.490 27.4900  18.003 0.002165 **
Residuals  9 13.742  1.5269                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
sapply(mods, coef)
                  lm1      lm2       lm3       lm4
(Intercept) 3.0000909 3.000909 3.0024545 3.0017273
x1          0.5000909 0.500000 0.4997273 0.4999091

Bu kısım karışık geldiyse denklemleri tek tek oluşturabilirsiniz

lm(y1~ x1, data=anscombe)

Call:
lm(formula = y1 ~ x1, data = anscombe)

Coefficients:
(Intercept)           x1  
     3.0001       0.5001  
lm(y2~ x2, data=anscombe)

Call:
lm(formula = y2 ~ x2, data = anscombe)

Coefficients:
(Intercept)           x2  
      3.001        0.500  
lm(y3~ x3, data=anscombe)

Call:
lm(formula = y3 ~ x3, data = anscombe)

Coefficients:
(Intercept)           x3  
     3.0025       0.4997  
lm(y4~ x4, data=anscombe)

Call:
lm(formula = y4 ~ x4, data = anscombe)

Coefficients:
(Intercept)           x4  
     3.0017       0.4999  
  • Özetle
  • \(\overline{X}\): 9
  • \(sd_{\overline{X}}\): 3.32
  • \(\overline{Y}\): 7.5
  • \(sd_{\overline{Y}}\): 4.125
  • \(cor_{XY}\): 0.816
  • Regresyon denklemleri: \(y = 3 + 0.5x\)
  • Açıklanan varyans \(R^2\) : 0.67

Görselleştirme için quartets paketindeki anscombe_quartet verisini kullandım. Bu veri uzun formatta

library(tidyverse)
Warning: package 'purrr' was built under R version 4.4.3
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.0     ✔ readr     2.1.5
✔ lubridate 1.9.4     ✔ stringr   1.5.1
✔ purrr     1.0.4     ✔ tibble    3.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(quartets)

ggplot(anscombe_quartet, aes(x = x, y = y)) +
  geom_point() + 
  geom_smooth(method = "lm", formula = "y ~ x") +
  facet_wrap(~dataset)

anscombe_quartet |>
  group_by(dataset) |>
  summarise(mean_x = mean(x),
            sd_x = sd(x),
            mean_y = mean(y),
            sd_y = sd(y),
            cor = cor(x, y)) |> 
  knitr::kable(digits = 2) 
dataset mean_x sd_x mean_y sd_y cor
(1) Linear 9 3.32 7.5 2.03 0.82
(2) Nonlinear 9 3.32 7.5 2.03 0.82
(3) Outlier 9 3.32 7.5 2.03 0.82
(4) Leverage 9 3.32 7.5 2.03 0.82

💡 Uygulama Görevi

palmerpenguins paketinden penguins veri setini yükleyin.

Veri seti Antarktika’daki penguenlerin türü, ad, boy, ağırlık, yüzgeç uzunluğu, cinsiyet vb.bilgilerini içerir.

  • penguenlerin vücut kitle indeksini (body_mass_g / flipper_length_mm) veri setine ekleyin

  • Bu yeni değişken için türler göre ortalama, standart sapma, minimum ve maksimum değerlerini hesaplayın.

Warning: package 'palmerpenguins' was built under R version 4.4.3
Warning: Removed 2 rows containing non-finite outside the scale range
(`stat_boxplot()`).

📚 Ödev

🔗 Derste yaptıklarımızın tekrarını aşağıdaki iki bölümü tekrarlayınız

🔗 Language of data

🔗 Language of data