Bu ödevin amacı, Simpson Paradoksu keşfetmektir. Bu bağlamda, Palmer Penguins veri setini kullanarak veriyi hem toplam düzeyde hem de alt gruplar (tür bazında) incelemeye çalıştım; bu iki analiz düzeyi arasındaki farkın neden oluştuğunu tartıştım.
palmerpenguins paketinde penguins verisetini getirdim ve veri setini ön incelemelerle tanıdım.
library(openintro)
## Loading required package: airports
## Loading required package: cherryblossom
## Loading required package: usdata
library(dplyr)
##
## 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
library(openintro)
library(ggplot2)
library(palmerpenguins)
##
## Attaching package: 'palmerpenguins'
## The following objects are masked from 'package:datasets':
##
## penguins, penguins_raw
data(penguins)
head(penguins, 3)
## # A tibble: 3 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Adelie Torgersen 39.1 18.7 181 3750
## 2 Adelie Torgersen 39.5 17.4 186 3800
## 3 Adelie Torgersen 40.3 18 195 3250
## # ℹ 2 more variables: sex <fct>, year <int>
tail(penguins, 3)
## # A tibble: 3 × 8
## species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Chinstrap Dream 49.6 18.2 193 3775
## 2 Chinstrap Dream 50.8 19 210 4100
## 3 Chinstrap Dream 50.2 18.7 198 3775
## # ℹ 2 more variables: sex <fct>, year <int>
Bu veri setin Antarktika’daki üç penguen türüne ait (Adelie,
Chinstrap, Gentoo) morfolojik ölçümleri içermektedir: Gaga uzunluğu
(bill_length_mm), Gaga derinliği
(bill_depth_mm), Yüzgeç uzunluğu
(flipper_length_mm), Vücut kütlesi
(body_mass_g), Tür (species), Cinsiyet
(sex)
penguenler <-
penguins %>%
rename(gaga_uzunlugu = bill_length_mm,
gaga_derinligi = bill_depth_mm,
yuzgec_uzunlugu = flipper_length_mm,
vucut_kutlesi = body_mass_g,
tur = species,
cinsiyet = sex,
ada_adı = island,
yıl = year)
head(penguenler, 3)
## # A tibble: 3 × 8
## tur ada_adı gaga_uzunlugu gaga_derinligi yuzgec_uzunlugu vucut_kutlesi
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Adelie Torgersen 39.1 18.7 181 3750
## 2 Adelie Torgersen 39.5 17.4 186 3800
## 3 Adelie Torgersen 40.3 18 195 3250
## # ℹ 2 more variables: cinsiyet <fct>, yıl <int>
Eksik veri sayısını değişken bazında not ettim.
(colSums(is.na(penguenler))
Eksik verileri çıkarmadan önce (dim(penguenler) ve
sonra (dim(penguenler_tam) veri seti boyutlarını
ekledim.
Eksik verileri sildim (na.omit()) ve yeni bir veri
seti olarak tanımladım. penguenler_tam <-
Eksik verilerin kalmadığını görmek için
(colSums(is.na(penguenler_tam) şeklinde kontrol sağladım.
Bu sayede fonskiyonun işlevini gerçekleştiridğini fark ederek
pekiştirdim.
colSums(is.na(penguenler))
## tur ada_adı gaga_uzunlugu gaga_derinligi yuzgec_uzunlugu
## 0 0 2 2 2
## vucut_kutlesi cinsiyet yıl
## 2 11 0
dim(penguenler)
## [1] 344 8
penguenler_tam <-penguenler %>%
na.omit()
colSums(is.na(penguenler_tam))
## tur ada_adı gaga_uzunlugu gaga_derinligi yuzgec_uzunlugu
## 0 0 0 0 0
## vucut_kutlesi cinsiyet yıl
## 0 0 0
dim(penguenler_tam)
## [1] 333 8
bmi =Vücut
kütlesi /Yüzgeç uzunluğupenguenler_tam <- penguenler_tam %>%
mutate(bmi = vucut_kutlesi / yuzgec_uzunlugu)
head(penguenler_tam, 3)
## # A tibble: 3 × 9
## tur ada_adı gaga_uzunlugu gaga_derinligi yuzgec_uzunlugu vucut_kutlesi
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Adelie Torgersen 39.1 18.7 181 3750
## 2 Adelie Torgersen 39.5 17.4 186 3800
## 3 Adelie Torgersen 40.3 18 195 3250
## # ℹ 3 more variables: cinsiyet <fct>, yıl <int>, bmi <dbl>
Türlere göre (species) bu değişkenin:
ortalamasını, standart sapmasını, minimum ve maksimum değerlerini
hesaplayınız. Sonuçları bir tablo halinde gösteriniz
(summarise() + group_by()). Tabloya ek olarak
bir de kutu grafiği hazırlayınız. Türler arasında anlamlı fark var mı
yorumlayınız.
penguenler_tam %>%
group_by(tur) %>%
summarise(ort_bmi = mean(bmi),
ss_bmi = sd(bmi),
min_bmi = min(bmi),
max_bmi = max(bmi))
## # A tibble: 3 × 5
## tur ort_bmi ss_bmi min_bmi max_bmi
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 Adelie 19.5 2.18 15.2 25.3
## 2 Chinstrap 19.0 1.60 14.1 22.9
## 3 Gentoo 23.4 1.88 19.0 28.5
penguenler_hesaplanmıs <- penguenler_tam %>%
group_by(tur) %>%
mutate(ort_bmi = mean(bmi),
ss_bmi = sd(bmi),
min_bmi = min(bmi),
max_bmi = max(bmi))
ggplot(penguenler_tam, aes(x = tur, y = bmi, fill = tur)) +
geom_boxplot() +
theme_minimal() +
labs(
title = "Penguen Türlerine Göre BMI Dağılımı",
x = "Tür",
y = "Beden Kitle İndeksi (BMI)") +
theme(legend.position = "none")
NOT: Kutucukların farklı renk olması için
fill eklendi ama bu seferde sağa sanki farklı bir
değişkenmiş gibi legend geldi yine bu tür bir tekrarı gidermek adına
theme(legend.position = "none") kullanıldı.
Bu kutu grafiğine göre penguen türleri arasında BMI (Beden Kitle İndeksi) bakımından belirgin farklar görülmektedir. Özellikle Gentoo türünün ortalama BMI değeri diğer türlere göre daha yüksek, Chinstrap türünün ise daha düşüktür. Kutu aralıkları ve medyan çizgileri türler arasında çakışmadığından, bu farkın istatistiksel olarak da anlamlı olma olasılığı yüksektir. Kısacası, türler arasında BMI açısından anlamlı bir farklılık olduğu söylenebilir.
Gaga uzunluğu (bill_length_mm) ile gaga derinliği
(bill_depth_mm) arasındaki ilişkiyi inceledim.
geom_point() kullanarak scatter plot
oluşturdum.
Grafiğe bir regresyon doğrusu ekleyin
(geom_smooth(method="lm")).
Gözlem yorumu yazdım: İlişki pozitif mi, negatif mi gördüm.
Bu ilişkiyi doğrulamak için basit bir doğrusal regresyon modeli kurun: Eğim pozitif mi, negatif mi? İlişki anlamlı mı?
ggplot(penguenler_tam, aes(x = gaga_uzunlugu, y = gaga_derinligi)) +
geom_point() +
theme_minimal() +
geom_smooth(method = "lm") +
labs(
title = "Penguenlerin gaga uzunlukları ve gaga derinlikleri arasındaki ilişki",
x = "Gaga Uzunlukları",
y = "Gaga Derinlikleri")
## `geom_smooth()` using formula = 'y ~ x'
Grafiğe göre penguenlerin gaga uzunluğu arttıkça gaga derinliği azalma eğilimi gösteriyor. İlişki negatif görünüyor. Kurulan basit doğrusal regresyon modeli sonucuna göre, gaga uzunluğu değişkeninin eğimi negatiftir, bu da gaga uzunluğu arttıkça gaga derinliğinin azaldığını göstermektedir.
Veriyi türlere göre ayırdım
(group_by(tur) kullandım çünkü dataCamp’ta sıklıkla
kullanmıştım.
Her tür için aynı scatter plot’u oluşturdum ve noktaları farklı renklerle belirledim.
Tür bazında regresyon modelleri kurdum.
Elde ettiğiniz sonuçları karşılaştırdım. Her bir türde eğim pozitif mi? Bu tür düzeyinde elde edilen ilişki, toplam düzeydeki ilişkiyle çelişiyor mu?
penguenler_tam %>%
group_by(tur)
## # A tibble: 333 × 9
## # Groups: tur [3]
## tur ada_adı gaga_uzunlugu gaga_derinligi yuzgec_uzunlugu vucut_kutlesi
## <fct> <fct> <dbl> <dbl> <int> <int>
## 1 Adelie Torgersen 39.1 18.7 181 3750
## 2 Adelie Torgersen 39.5 17.4 186 3800
## 3 Adelie Torgersen 40.3 18 195 3250
## 4 Adelie Torgersen 36.7 19.3 193 3450
## 5 Adelie Torgersen 39.3 20.6 190 3650
## 6 Adelie Torgersen 38.9 17.8 181 3625
## 7 Adelie Torgersen 39.2 19.6 195 4675
## 8 Adelie Torgersen 41.1 17.6 182 3200
## 9 Adelie Torgersen 38.6 21.2 191 3800
## 10 Adelie Torgersen 34.6 21.1 198 4400
## # ℹ 323 more rows
## # ℹ 3 more variables: cinsiyet <fct>, yıl <int>, bmi <dbl>
ggplot(penguenler_tam, aes(x = gaga_uzunlugu, y = gaga_derinligi, color = tur)) +
geom_point() +
theme_minimal() +
geom_smooth(method = "lm") +
labs(
title = "Penguenlerin gaga uzunlukları ve gaga derinlikleri arasındaki ilişki",
x = "Gaga Uzunlukları",
y = "Gaga Derinlikleri",
color = "Tür")
## `geom_smooth()` using formula = 'y ~ x'
ggplot(penguenler_tam, aes(x = gaga_uzunlugu, y = gaga_derinligi, color = tur, fill = cinsiyet)) +
geom_point() +
theme_minimal() +
geom_smooth(method = "lm") +
labs(
title = "Penguenlerin gaga uzunlukları ve gaga derinlikleri arasındaki ilişki",
x = "Gaga Uzunlukları",
y = "Gaga Derinlikleri",
color = "Tür",
fill = "Cinsiyet") +
scale_fill_discrete(labels = c("female" = "Dişi", "male" = "Erkek"))
## `geom_smooth()` using formula = 'y ~ x'
ggplot(penguenler_tam, aes(x = gaga_uzunlugu, y = bmi, color = tur)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
theme_minimal() +
labs(title = "Türlere Göre Gaga Uzunluğu ve Beden Kütle İndeksi İlişkisi",
x = "Gaga Uzunluğu",
y = "Beden Kütle İnceksi",
color = "Tür")
## `geom_smooth()` using formula = 'y ~ x'
Her bir tür (Adelie, Chinstrap, Gentoo) için ayrı ayrı oluşturulan scatter plot’larda gaga uzunluğu ile gaga derinliği arasındaki ilişkinin tür düzeyinde pozitif olduğu görülmektedir. Yani her türün kendi içinde, gaga uzunluğu arttıkça gaga derinliği de artmaktadır. Bu durum, toplam veri setinde gözlemlenen negatif ilişkiyle çelişmektedir. Tür düzeyinde analiz yapıldığında, her bir türde ilişki pozitif yönlüdür.
Cinsiyet değişkeni de modele eklendiğinde, ilişkinin yönü genellikle korunmakta, ancak eğimin büyüklüğü tür ve cinsiyete göre bir miktar değişebilmektedir. Özellikle bazı türlerde erkek penguenlerin gagalarının genel olarak daha uzun ve derin olması, modelde cinsiyetin ek açıklayıcı bir değişken olarak etkili olduğunu göstermektedir.
Bu bulgular hem tür hem de cinsiyet gibi alt grupların dikkate alınmasının veriyi doğru yorumlamak açısından kritik olduğunu ortaya koymaktadır. Aksi halde, toplam düzeyde yapılan analizler yanıltıcı veya ters yönlü sonuçlar verebilir.
Toplam veri setinde neden negatif ilişki gözlemlediniz?
Tür bilgisi eklendiğinde neden ilişki yön değiştirdi?
Bu durumu Simpson Paradoksu çerçevesinde nasıl açıklarsınız?
Bu örnek, verileri alt gruplara göre incelemenin neden önemli olduğunu nasıl göstermektedir?
Toplam veri setine bakıldığında gaga uzunluğu ile gaga derinliği arasında negatif bir ilişki görülmektedir; yani genel olarak gaga uzunluğu arttıkça derinlik azalıyormuş gibi görünür. Ancak tür bilgisi eklendiğinde, her bir tür kendi içinde incelendiğinde bu ilişkinin pozitif olduğu, yani gaga uzunluğu arttıkça gaga derinliğinin de arttığı gözlenir. Bu durum, Simpson Paradoksu olarak adlandırılır. Bir veri kümesinde genel düzeyde gözlemlenen ilişki yönü, alt gruplar (örneğin türler) dikkate alındığında tam tersine dönebilir. Bunun nedeni, türlerin yapısal olarak farklı ortalama değerleri (örneğin Gentoo türünün hem daha uzun hem daha sığ gagalara sahip olması) nedeniyle, türler arası farkların toplam korelasyonu yanıltıcı hale getirmesidir. Bu örnek, verileri alt gruplara göre incelemenin önemini açık biçimde gösterir. Eğer tür bilgisi dikkate alınmadan analiz yapılırsa, türler arasındaki yapısal farklar yanlış bir genel sonuca yol açabilir. Dolayısıyla, verilerde gruplar arası farklılıkları hesaba katmak, doğru yorum ve kararlar için kritik öneme sahiptir.
4.Hafta Ev Çalışması: Penguins
Regresyon doğrusu eklemeyi öğrendim. Bu yüzden ilk kez R’ı ileride işime yarayacak kadar kullanabileceğime ilişkin motivasyonum arttı. DataCamp üzerinden ggplot2 ile görselleştirmeye yönelik yeni bir kursa başlamıştım orada öğrendiklerim ve derste öğrendiklerim ile görece geçen haftaya göre daha rahat ödevi tamamladım. scale_x_log10 ile x eksenindeki dereceli aralığı değiştirebildiğimi öğrendim. Ama bu ödevde kodlamadan ziyade Simpson Paradoksunun yarattığı ilizyonu fark etmek ve istatistiğin ne kadar kompleks katmanları olduğunu görmüş oldum.