library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.1     ✔ stringr   1.5.2
## ✔ ggplot2   4.0.0     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.1.0     
## ── 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(haven)
library(openintro)
## Zorunlu paket yükleniyor: airports
## Zorunlu paket yükleniyor: cherryblossom
## Zorunlu paket yükleniyor: usdata

1.Kaynaklardan Öğrendiklerim

Okumam için verilen kaynaklardan ilkinde (Atalay Kabasakal & Gören, 2025) veri düzenleme, görselleştirme ve özetleme konuları ele alınmış.Diğer iki kaynağın odağını is veri görselleştirme konusu oluşturmaktadır. Üç kaynağı birlikte ele aldığımda yaptığımız işin aslında dört başlık altında incelenebileceğini düşündüm. Bu başlıkları aşağıda tek tek açıklamaya çalıştım:

1.1. Veri Düzenleme ve Özetleme Neden Gerekli

Veriyi düzenlemeyi, veriyi anlamanın ve veri ile hangi istatistiksel işlemlerin yapılabileceğini görmenin ilk adımı olarak görebiliriz. Ayrıca veri düzenleme yaptığımız analizleri ilgili bağlam çerçevesinde yorumlayabilmek için son derece önemli ve gereklidir. Doğru bir şekilde grafikler oluşturmak ve hangi grafiklerin veriye uygun olduğunu anlamak için de veri düzenlemenin çok önemli olduğunu düşünüyorum. Veri düzenleme ile kendimize analiz sürecini doğru yürütebileceğimiz sorular sorma ve bu sorular cevaplar bulma imkanımız olur.

1.2. Veriyi Anlamak ve Manipüle Etmek

Kaynaklardan ve şimdiye kadar derslerden öğrendiğim kadarıyla R ile veriyi anlamak için “dplyr” paketinin fonksiyonlarından faydalanabilirim. Bu bağlamda aklımda kalan fonksiyonlardan şu anki bilgimle önemli bulduklarımı (Zira bilgi gelişince önem ve önceliklerin değişmesi öğrenmenin doğasında var.) anladığım kadarıyla kısaca açıklamaya çalışacağım.

head: Veri setinin ilk 6 satırını görmeye yarar. Böylece verinin istenilen şekilde yüklenip yüklenmediği anlaşılabilir. head(veri) şeklinde kullanılınca ilk 6 satır veya head(veri, n=10)şeklinde kullanınca istediğimiz sayıda satır görüntüleyebiliriz.

glimpse: Veri setinin boyutlarını ev her bir değişkenin tipini incelemek için bu fonksiyondan faydalanırız. glimpse (veri) şeklinde kullanılır.

distinct: Bu fonksiyon ile veri setindeki değişkenlerin kategorilerini anlayabiliriz. Örneğin okul türü adında bir değişkenimiz olsun; bu fonksiyon ile “ilkokul, ortaokul, lise” gibi kategoriler olduğunu ve daha önemlisi aslında veride olmaması gereken veya yanlış bir kategorinin veri setine karışıp karışmadığını tespit etmeye yarar. distinct(veri, degisken1) şeklinde kullanılır.

filter: Belirtilen koşullara göre veri setinden ilgilendiğimiz verileri filtrelemeye yarar. Örneğin yukarıdaki örnekte okul türlerinden sadece ilkokul ile ilgilenmek istiyorsak bu fonksiyondan faydalanabiliriz. filter(veri, kosul1, kosu2) şeklinde kullanılır.

select: Veri setinde ilgilendiğimiz sütunları seçmeye veya hariç tutmaya yarar. Böylece büyük bir veri setinden sadece analizde ihtiyaç duyacağımız değişkenleri seçerek veri setini sadeleştirebiliriz. starts_with() veya matches() gibi yardımcı fonksiyonlarla birlikte toplu seçimler de yapabiliriz. select(veri, degsiken1, degisken2) şeklinde kullanınca ilgili değişkenleri seçer. Veri setinden belirttiğimiz ifade (örneğin:AAA) ile başlayanları seçmek için:

AAA_ile_baslayan<-veri %>%

select(starts_with("AAA"))

Veri setinden içinde belli ifadeler(örneğin:AAA_BBB) geçen değişkenleri seçmek için:

BBB_veri<-veri %>%

select(matches("BBB"))

mutate: Yeni sütunlar oluşturup bu sütunları veri setine dahil eder. Veriden yeni bilgiler türetmek için kullanabiliriz. Örneğin öğrencilerin vize ve final notlarının ortalmasını geçme notu olarak hesaplayıp yeni bir sütun olarak veriye ekleyebiliriz.

veri %>% mutate(gecme_notu = (vize + final)/2

transmute: mutate gibi yeni sütun oluşturur. Ancak oluşturulan bu sütun ve belirttiğimiz değişkenlerden oluşan bir veri seti oluşur.

gecme_notu <- veri %>%transmute(Ogrenci_No = Ogrenci_No,gecme_notu = (vize + final)/2)

unite: Birden fazla sütunu tek bir sütunda birleştirir. Örneğin veri setinde iki ayrı sütunda “Ad” ve “Soyad” isimli iki değişken olduğu bir durumda bu fonksiyon ile “Ad_Soyad” isimli tek bir sütunda toplanabilir.

yeni_ad_soyad <- veri %>% unite(col = "Ad_Soyad", c(Ad, Soyad), sep = " ")

separate:Tek bir sütunu, bir ayırıcıya göre birden fazla yeni sütuna ayırır. Örneğin veri setinde “Ad_Soyad” isimli tek bir değişken olduğu bir durumda, bu fonksiyon ile “Ad” ve “Soyad” isimli iki ayrı sütun oluşturulabilir. unite fonksiyonunun tersi gibi düşünebiliriz.

ad_soyad_ayri<- veri %>% separate(col = Ad_Soyad,into = c("Ad", "Soyad"),sep = " ")

as_factor: SPSS’ten alınan verilerde sayısal değerle ifade edilen etiket değerlerini R’da analize uygun kategorik değerlere dönüştürebiliriz. Örneğin Kadın=1 ve Erkek=2 şeklinde kodlanmış bir SPSS verisinde bu fonksiyon ile 1’ler “Kadın”, 2’leri “Erkek” olarak faktör değişkene çevrilebilir.

mutate(across(where(is_labelled), as_factor)) kalıbıyla kullanılır.

1.3. Veriyi Özetlemek

Veriyi genel hatlarıyla inceledikten sonra özetlemek hem araştırmacının veriyi anlamasına katkı sağlayacak hem de araştırma raporunu yazarken ihtiyaç duyulan pek çok bilgi sağlayacaktır. Bu kısmı SPSS’te betimeyici istatistikler dediğimiz analizlere benzetiyorum. Ancak öğrendikçe R ile çok daha etkili betimleyici analiz yapıldığını öğreniyorum. Burada kaynaklardan öğrenebildiğim fonksiyonları kendi bakış açımla ifade etmeye çalışacağım.

summary: İlgilendiğimiz değişkenin altı temel istatistiğini ((Minimum, İlk Çeyrek, Medyan, Ortalama, Üçüncü Çeyrek, Maksimum) verir. summary(veri$degisken) veya summary(veri) şeklinde kullanabiliriz.

mean: Değişkenin aritmetik ortalamasını hesaplar. mean(veri$degisken) kalıbıyla kullanılır.

(na.rm = TRUE) koda eklenince kayıp veriler dikkate alınmadan ortalama hesaplanır. Bu fonksiyona benzer biçimde median(), min(), max(), sd() ve var() fonksiyonları da kullanılabilir.

quantile(): Değişkenlerin yüzdelik dilimlerini hesaplamak için kullanabiliriz. Varsayılan olarak 0, 25, 50, ve 100’lük şekilde hesaplar. Ancak herhangi bir yüzde(örneğin 60) belirterek de hesaplama yapabiliriz.

İlk durum için quantile(veri$"degisken", na.rm = TRUE) şeklinde kullanabiliriz. İkinci durum için ise quantile(veri$"degisken", probs = 0.60, na.rm = TRUE) kodu kullanılabilir.

count(): Kategorik değişkenlerdeki her bir kategorinin kaç kez tekrar ettiğini saydırmak için kullanabiliriz. veri %>% count(degisken1, degisken2, sort = TRUE) şeklinde kullanabiliriz.

group_by(): summarise ve mutate gibi fonksiyonlarla birlikte kullanılarak analizin değişkendeki alt gruplara göre yapılmasını sağlar. Örneğin kız ve erkek öğrencilerin ortalamaları ayrı hesaplamak için kullanabiliriz.

cinsiyete_gore_ortalamalar <- veri %>% group_by(cinsiyet)%>%

summarise( ortalama_okuma_puani = mean(degisken, na.rm = TRUE))

across(): summarise ve mutate fonksiyonları ile birlikte kullanılır. Yapılan işlemin tek seferde birden fazla sütuna uygulanmasını sağlar. Örneğin farklı puanlara ait ortalamaları tek seferde hesaplamak için kullanabiliriz.

puan_ortalamalari<-veri %>% summarise(across(c(puan1,puan2,puan3),mean,na.rm = TRUE))

1.4. Veriyi Görselleştirmek

Verileri özetledikten sonra görsel olarak ele almak veriyi anlamak ve anlatmak için önemli bir adımdır. Bu adımda R’ın ggplot2 paketinin fonksiynlarından faydalanabiliriz. ggplot2 paketi fonksiyonları ile grafikler oluşturulurken + opratörü katmanlı yapı mantığı ile kullanılır.

ggplot : Grafik için temel katmanı oluşturur. Bu komut ile R’a grafik çizeceğimizi bildirmiş oluruz. Grafik çizilecek veri setini ve aes fonksiyonunu tanımlamak için kullanılır.

ggplot(data = veri, mapping = aes(x = degisken1, y = degisken2))

aes: Veri setindeki değişkenlerin yerini ve görsel özelliklerini tanımladığımız fonksiyondur.

geom_bar: Çubuk garfik oluşturur.

geom_histogram: Histogram grafiği oluşturur. bindwith sçeneği ile sayısal veri kategoriler ayrılabilir.

geom_density: Sayısal değişkenler için yoğunluk grafiği oluşturur.

geom_boxplot: Kutu grafiği oluşturur.

geom_dotplot: Saçılım grafiği oluşturur.

geom_col() + coord_polar(): Bu iki fonksiyon birlikte kullanılarak pasta grafiği oluşturulabilir.

ggplot(veri, aes(x ="", y = oranlar, fill = kategoriler)) +

geom_col(width = 1) + coord_polar("y")

position: geom_bar ile oluşturulmuş grafikleri karşılaştırma yapabilmek için yan yana dizmeye yarar. fill Her çubuğun toplam yüksekliğini %100’e (veya 1’e) eşitler ve çubuk içindeki kategorilerin “oransal” dağılımını gösterir.

ggplot(veri, aes(x = SINIF, fill = CINSIYET)) +

geom_bar(position = "dodge")

facet_wrap() / facet_grid(): Grafiği, bir veya iki kategorik değişkenin seviyelerine göre alt grafiklere ayırır . facet_wrap() genellikle tek bir değişkene göre ayırmak için, facet_grid() ise iki değişkene göre (satır ve sütun matrisi şeklinde) ayırmak için kullanılır.

... + facet_wrap(~ CINSIYET)

alpha: Şeffaflık seviyesini belirlemek için kullanılır. Böylelikle fark daha net gözlemlenebilir.

geom_density_ridges(): Farklı gruplar için yoğunluk grafiklerini üst üste binmeden, bir “dağ silsilesi” gibi kademeli bir düzende gösterir.

ggplot(veri,aes(x = OKUMA PUANI, y=SINIF, fill= SINIF)) +

geom_density_ridges()

labs: Grafiğin etiketlerini düzenlemek için kullanılır.

... +

labs(title = "Öğrenci Puan Dağılımı",

x = "Okuma Puanı",

y = "Frekans", fill = "Cinsiyet")

theme: Veri dışındaki arka plan gibi görsel unsurları düzenlemek için kullanılır.

geom_text: Grafiğe metin katmanı eklemek için kullanılır.

plot_ly(): Etkileşimli grafikler oluşturmaya yarayan ana fonksiyondur.

2. Veri Setinin Tanıtımı ve Hazırlanması

Veri seti olarak PIRLS 2021 Türkiye verilerinin özel bir versiyonundan yararlandım. Bu veri seti PIRLS 2021 döngüsüne ait daha önce bir araya getirdiğim öğrenci ve okul verilerini içeren bir SPSS veri dosyasıdır. Dosya 6032 öğrenci ve 191 okula ait;okul ID, Öğrenci ID, öğrenci (okumayı sevme, cinsiyet, okuma konusunda özgüven vb.) ve okullara (disiplin problemleri, akademik başarıya verilen önem, sosyoekonomi vb) ilişkin kategorie edilmiş çeşitli değişkenler ve öğrencileri olası okuma puanları var. Bu veri setini daha önce yüksek lisans tezimde kullanmıştım ve analizimi MPlus ile yapmıştım. Ancak biraz R öğrenince o zaman R bilseydim şunları da yapardım dediğim çok husus oldu. Veri setini tercih etmemdeki ilk neden bu ikinci neden ise çok sayıda öğrenciden alınmış oldukça kaliteli verilerle bir şeyler yapmayı denemek.

Sch_Std <- read_sav("Sch_Std.sav")
glimpse(Sch_Std)
## Rows: 6,032
## Columns: 20
## $ IDSCHOOL <dbl> 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5001, 5…
## $ IDSTUD   <dbl> 50010601, 50010602, 50010603, 50010604, 50010605, 50010607, 5…
## $ ITSEX    <dbl+lbl> 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 2, …
## $ ASDGSEC  <dbl+lbl> 1, 3, 2, 1, 3, 2, 1, 3, 1, 2, 2, 2, 1, 2, 1, 2, 2, 2, 1, …
## $ ASDGSSB  <dbl+lbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ ASDGSB   <dbl+lbl> 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, …
## $ ASDGERL  <dbl+lbl> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, …
## $ ASDGDRL  <dbl+lbl> 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, …
## $ ASDGSLR  <dbl+lbl> 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, …
## $ ASDGHRL  <dbl+lbl> 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, …
## $ ASDGSCR  <dbl+lbl> 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, …
## $ ACDGRRS  <dbl+lbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
## $ ACDGEAS  <dbl+lbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, …
## $ ACDGDAS  <dbl+lbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, …
## $ ACDGSBC  <dbl+lbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
## $ ASRREA01 <dbl+lbl> 575.4389, 624.1437, 566.9780, 559.1095, 569.8236, 599.029…
## $ ASRREA02 <dbl+lbl> 557.2702, 612.6839, 568.7682, 606.6993, 570.4883, 594.515…
## $ ASRREA03 <dbl+lbl> 561.9532, 544.7382, 532.7829, 618.6042, 577.8663, 535.789…
## $ ASRREA04 <dbl+lbl> 573.6631, 503.8760, 529.9671, 537.0766, 581.3183, 546.127…
## $ ASRREA05 <dbl+lbl> 567.4520, 556.7769, 574.7689, 578.1380, 563.8770, 568.321…

2.1. Değişken Adlarının Türkçeleştirilmesi

Veri setinde çeşitli kodlarla belirtilen değişkenlerin ismini Türkçe yaptım.

pirls_turkce<- Sch_Std%>% 
  rename(
    okul_id=IDSCHOOL,
    ogrenci_id=IDSTUD,
    cinsiyet=ITSEX,
    dijital_ozyeterlik=ASDGSEC,
    okula_aidiyet=ASDGSSB,
    zorbalik=ASDGSB,
    derse_katilim=ASDGERL,
    Duzeni_Bozan_Davr = ASDGDRL,
    Okumay_Sevme = ASDGSLR,
    Ev_Kaynaklari = ASDGHRL,
    Okuma_Guven = ASDGSCR,
    Kaynak_Eksikligi = ACDGRRS,
    Akademik_Vurgu = ACDGEAS,
    Okul_Disiplini = ACDGDAS,
    Ogrenci_Arkaplan = ACDGSBC
    
  ) 

2.2. Olası Puanlardan Ortalama Puanın Hesaplanması

Veri setindeki olası değerlerden ortalama bir okuma puanı hesapladım. Bu puanı hesaplarken daha önce kullanmadığım haven paketini kullanmam gerekti. Bu paketin SPSS verilerini okumakta kullanıldığını öğrendim.

ortalamali_okuma <- pirls_turkce %>%
  rowwise() %>% 
  mutate(
    Ortalama_Okuma = mean(
      c(zap_labels(ASRREA01),  
        zap_labels(ASRREA02),
        zap_labels(ASRREA03),  
        zap_labels(ASRREA04),  
        zap_labels(ASRREA05)),
      na.rm = TRUE
    )
  ) %>%
  ungroup()

3. Grafiklerin Çizilmesi

3.1. Dağılım Grafiği

Olası okuma puanları ile ortalama puan arasındaki ilişkiyi incelemeye çalıştım. Yapay zeka bunu yapabilmem için veriyi önce uzun formata çevirmem gerektiğini söyledi. Önce veriyi dönüştürüp daha sonra grafik çizdirdim.

ortalamali_okuma_yatay <- ortalamali_okuma %>%
  

  mutate(across(starts_with("ASRREA"), zap_labels)) %>%
  
  pivot_longer(
    cols = starts_with("ASRREA"),     
    names_to = "Olasi_Puan",    
    values_to = "Olasi_Puan_Degeri"   
  )

Olası puanlar ile okuma puanları arsında çok yüksek bir ilişki olduğunu düşünüyordum ancak biraz farklılık olacağını sandım. Bunu test etmek için korelasyon hesaplayıp grafiğe ekledim. Bu kısımda oldukça zorlandım, yapay zeka yardımı aldım. Tüm olası puanlarla ortalam puanın korelasyonu eşit çıktı. Hata yapmış olabilir miyim? Yoksa bu kadar büyük örenklemde IRT kusursuz sonuç

cor_labels <- ortalamali_okuma_yatay %>%
  
  group_by(Olasi_Puan) %>% 
  
  summarise(
    R_degeri = cor(Olasi_Puan_Degeri, Ortalama_Okuma, use = "pairwise.complete.obs")
  ) %>%
  mutate(
    Etiket = paste0("r = ", round(R_degeri, 2))
  )

ggplot(ortalamali_okuma_yatay, aes(x = Olasi_Puan_Degeri, y = Ortalama_Okuma)) +
  
  geom_point(alpha = 0.2, color = "blue") +
  geom_smooth(method = "lm", se = FALSE, color = "red", linewidth = 0.5) +
  
  geom_text(
    data = cor_labels, 
    aes(x = 250, y = 750, label = Etiket), 
    
    hjust = 0,
    color = "black",
    fontface = "bold"
  ) +
  
  facet_wrap(~ Olasi_Puan, ncol = 3) +
  
  
  labs(
    title = "Tüm Olası Puanların Ortalama Okuma Puanı ile İlişkisi",

    x = "Olası Puan Degeri",
    y = "Ortalama Okuma Puani",
    caption = "PIRLS 2021 TUrkiye"
  ) +
  
 
  theme_light()
## `geom_smooth()` using formula = 'y ~ x'

Yorum:Grafikte beş olası okuma puanı ile bu puanların ortalamaları arasındaki ilişki incelenmiştir. Tüm olası puanlar ile ortalama okuma puanı ilişkisi yüksek, doğrusal ve pozitiftir. Olası puanlar ile ortalama puanın bu kadar yüksek düzeyde (r=0.96, tüm olası puanlar için) olası değerlerin tutarlılığını göstermektedir. İki sayısal değişken arasındaki ilişkiyi göstermek için uygun bir grafik seçtiğimi düşünüyorum.

3.2. Sütun Grafiği

Öğrencilerin ortalama okuma puanlarının dijital öz yeterlik düzeyine göre nasıl değiştiğini inceledim.

ozet_veri <- ortalamali_okuma %>%
  filter(!is.na(dijital_ozyeterlik)) %>%
  group_by(dijital_ozyeterlik) %>%
  summarise(
    OrtalamaPuan = mean(Ortalama_Okuma, na.rm = TRUE),
    n = n(),
    .groups = 'drop'
  ) %>%
 
  mutate(
    dijital_etiket = factor(
      dijital_ozyeterlik,
      levels = c(1, 2, 3),
      labels = c("Yuksek", "Orta", "Dusuk")
    )
  )

ggplot(ozet_veri, 
       aes(x = dijital_etiket, y = OrtalamaPuan, fill = dijital_etiket)) +
  
  geom_col(show.legend = FALSE) +
  
  geom_text(
    aes(label = round(OrtalamaPuan, 1)),
    vjust = -0.5,  
    color = "black",
    size = 5,
    fontface = "bold"
  ) +
  
  ylim(0, max(ozet_veri$OrtalamaPuan) * 1.1) +
  
  labs(
    title = "Dijital Oz Yeterlik - Okuma Puanlari",
    x = "Dijital Oz Yeterlik",
    y = "Ortalama Okuma Puani"
  ) +
  
  theme_minimal()

Yorum: Grafiğe göre dijital öz yeterlik algısı arttıkça okuma puanı belirgin bir şekilde artıyor. Orta düzeyde öz yeterliğe sahip öğrencilerin okuma puanı düşük özyeterliğe sahip olanlarınkinden yaklaşık 32 puan daha yüksek iken yüksek öz yeterliğe sahip öğrencilerin okuma puanından 22 paun daha düşük. Öz yeterliği düşük olanlar ile yüksek olanların puanları arasında özyeterliği yüksek olanlar lehine yaklaşık 54 puan fark var.

Bu garfik sadece ortalamaları karşılaştırma imkanı veriyor ancak kutu grafiği ile daha detaylı inceleme yapma imkanı olabilirdi.

3.3. Kutu Grafiği

Öğrencilerin okuma puanlarının dağılımının cinsiyete göre okumayı sevme durumları ile ilişkisini inceledim.

genel_ortalama <- mean(ortalamali_okuma$Ortalama_Okuma, na.rm = TRUE)


plot_data <- ortalamali_okuma %>%
  filter(!is.na(Okumay_Sevme) & !is.na(cinsiyet) & !is.na(Ortalama_Okuma)) %>%
  mutate(
    Okumay_Sevme_Etiket = factor(
      Okumay_Sevme,
      levels = c(3, 2, 1),
      labels = c("Dusuk", "Orta", "Yuksek")  
    ), 
    Cinsiyet_Etiket = factor(
      cinsiyet,
      levels = c(1, 2),
      labels = c("Kiz", "Erkek")  
    )
  ) %>%
  filter(!is.na(Okumay_Sevme_Etiket) & !is.na(Cinsiyet_Etiket))


ggplot(plot_data, 
       aes(x = Okumay_Sevme_Etiket, y = Ortalama_Okuma, fill = Cinsiyet_Etiket)) +
  geom_boxplot(position = "dodge") +
  geom_hline(
    yintercept = genel_ortalama, 
    linetype = "dashed", 
    color = "black",
    linewidth = 1
  ) +
  labs(
    title = "Okumayi Sevme ve Cinsiyete Gore Okuma Puani Dagilimi",
   
    x = "Okumayi Sevme Seviyesi",
    y = "Ortalama Okuma Puani",
    fill = "Cinsiyet"
  ) +
  theme_minimal()

Yorum: Grafikte okumayı sevme düzeyi ile okuma başarısı arasında her iki cinsiyet açısından net bir ilişki olmadığı görülmektedir. Düşük okuma sevgisine sahip yüksek puanı olan öğrenciler olduğu gibi okumayı çok sevdiğini beyan ettiği halde okuma puanı düşük uç değer düzeyinde çok sayıda öğrenci vardır..

Bu grafiğin ele aladığım ilişki için son derec uygun olduğunu düşünüyorum. Grafiğe her bir kategorideki öğrenci sayısını ekleyebilseydim güzel olurdu ancak denediğimde hata verdi. Yorgundum çok fazla uğraşmadım.

3.4. Yoğunluk Grafiği

Kız ve erkek öğrencilerin ortalama okuma puanlarını yoğunluk grafiği ile gösterdim.

cinsiyet_ortalamalari <- plot_data %>%
  group_by(Cinsiyet_Etiket) %>%
  summarise(
    Grup_Ortalamasi = mean(Ortalama_Okuma, na.rm = TRUE)
  )

print(cinsiyet_ortalamalari)
## # A tibble: 2 × 2
##   Cinsiyet_Etiket Grup_Ortalamasi
##   <fct>                     <dbl>
## 1 Kiz                        511.
## 2 Erkek                      495.
ggplot(plot_data, 
       aes(x = Ortalama_Okuma, fill = Cinsiyet_Etiket, color = Cinsiyet_Etiket)) +
  
  geom_density(alpha = 0.5) +
  
  
  geom_vline(
    data = cinsiyet_ortalamalari,
    aes(xintercept = Grup_Ortalamasi, color = Cinsiyet_Etiket),
    linetype = "dashed",
    linewidth = 1,
    show.legend = FALSE
  ) +
  
  
  geom_text(
    data = cinsiyet_ortalamalari %>% filter(Cinsiyet_Etiket == "Erkek"),
    aes(x = 250, y = 0.0035, 
        label = paste("Erkek Ort:\n", round(Grup_Ortalamasi, 1)), 
        color = Cinsiyet_Etiket),
    fontface = "bold",
    size = 4.5,
    show.legend = FALSE
  ) +
  
  
  geom_text(
    data = cinsiyet_ortalamalari %>% filter(Cinsiyet_Etiket == "Kiz"),
    aes(x = 700, y = 0.0035, 
        label = paste("Kiz Ort:\n", round(Grup_Ortalamasi, 1)), 
        color = Cinsiyet_Etiket),
    fontface = "bold",
    size = 4.5,
    show.legend = FALSE
  ) +
  
  labs(
    title = "Cinsiyete Gore Ortalama Okuma Puani Dagilimi",
    x = "Ortalama Okuma Puani",
    y = "Yogunluk",
    fill = "Cinsiyet",
    color = "Cinsiyet"
  ) +
  
  theme_minimal()

Yorum: Grafikten kızların ortalama okuma puanlarının erkeklerden yüksek olduğu net bir şekilde anlaşılmaktadır. Grafikte örtüşen alanın büyük olması kız ve erkek öğrenciler arasında çok sayıda benzer puana sahip öğrenci olduğu şeklinde yorumlanabilir.

Bu grafik kutu grafiği ile birlikte yorumlanınca daha anlamlı olacaktır.

3.5. Çizgi Grafiği

Öğrencilerin okuma puanlarının değişiminin cinsiyete göre okumayı sevme durumları ile ilişkisini inceledim.

trend_data <- plot_data %>%
  group_by(Okumay_Sevme_Etiket, Cinsiyet_Etiket) %>%
  summarise(
    OrtalamaPuan = mean(Ortalama_Okuma, na.rm = TRUE),
    .groups = 'drop'  # Gruplamayı otomatik kaldır
  )



ggplot(trend_data, 
       
       aes(x = Okumay_Sevme_Etiket, y = OrtalamaPuan, 
           color = Cinsiyet_Etiket, group = Cinsiyet_Etiket)) +
  
 
  geom_line(linewidth = 1.2) +
  
 
  geom_point(size = 3) +
  
 
  geom_text(
    aes(label = round(OrtalamaPuan, 0)),
    vjust = -1, 
    fontface = "bold",
    show.legend = FALSE
  ) +
  
  ylim(min(trend_data$OrtalamaPuan) * 0.95, max(trend_data$OrtalamaPuan) * 1.05) +
  
  # Odev sartlari: labs() ve theme()
  labs(
    title = "Okumayi Sevme Duzeyine Gore Ortalama Okuma Puani",
    x = "Okumayi Sevme Seviyesi",
    y = "Ortalama Okuma Puani",
    color = "Cinsiyet"
  ) +
  
  theme_minimal() +


  theme(legend.position = "top")

Yorum: Grafiğe göre tüm düzeylerde kızların okuma puanları erkeklerden daha yüksek. Ancak her iki cinsiyet için “düşük” okuma sevgisinden “orta” okuma sevgisine geçişte önemli bir değişiklik olmazken “orta” okuma sevgisinden “yüksek” okuma sevgisine geçişte öğrencilerin okuma puanları anlamlı bir şekilde artıyor. Bu grafiğin de amaca çok uygn olduğunu düşünüyorum.

R Günlüğüm

Bu dersi çok sevmeme rağmen bu güne kadar günlük yazma olanağım yoktu. Ancak bundan sonra düzenli ve etkili günlük yazacağım. Bu gün daha ziyade R ve ders hakkındaki düşüncelerimi ifade etmeye çalışacağım. Daha sonraki günlüklerim bilgi içerikli olacak.

R dersini aldığımız günden beri defalarca keşke yüksek lisans tezimi yazarken bunu bilseydim diye içimden geçti. Hatta o zaman analizlerimi MPlus ile yaptım veMplus’ı öğrenmek için yoğun bir çaba ve zaman harcadım. Şimdi keşek aynı analizleri R ile yapmayı öğrenmeyi denesymişim diyorum. Bu düşüncemdeki temel etken MPlus’u öyle detaylı öğrenememiş olsam da şu ana kadar öğrendiğimle bile R olanaklarının çok daha fazla olduğunu ve öğrenme için kaynakların daha etkili olduğunu düşünüyorum.

R dersi benim açımdan R ile neler yapılabileceğini gözlemlediğim keyifli bir yolculuk. Neler yapılabildiğini görünce nasıl yapıldığını bir şekilde öğreneceğimi düşünüyorum. Bu yüzden fonksiyon isiimlerinin zihnimde kalmayışını çok dert etmiyorum. Daha çok yeniyim, bilmiyorum…Belki de dert etmeliyim veya daha çok analiz yapınca fonksiyonlar aklımda kalmaya başlayacak.

Ödevlerimi yaparken sık sık yapay zeka desteği alıyorum. Tecrübeme göre denediklerim arasında R için en az hatalı kodları Claude AI yazıyor. Belki daha iyi yapay zeka araçları vardır, henüz keşfetmedim.