Standart sapma R’da “sd()” fonksiyonu ile hesaplanır. Sizden beklenen (sd1) adlı kişisel bir fonksiyon oluşturmanız. Oluşturduğunuz fonksiyon örneklem için standart sapmayı aşağıdaki denkleme göre hesaplasın (“sd()” fonksiyonunu kullanmayınız). Oluşturduğunuz fonksiyona yuvarla isminde ondalık sayıları kaç ondalığa yuvarlayacağını belirten bir argüman tanımlayın ve bu argümanın olağan değeri 3 olsun. Fonksiyonu kendi ürettiğiniz üç farklı vektör üzerinde sd() fonksiyonu ile karşılaştırarak test ediniz. Kendiniz vektör oluştururken rep,seq,rnorm gibi fonksiyonlar kullanabilirsiniz.
Örneklem standart sapmasının (s) formülü aşağıdaki gibidir:
\[ s = \sqrt{\frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{\,n - 1\,}} \] Burada: \[\begin{align*} x_i &: \text{Veri setindeki her bir gözlem değeri} \\ \bar{x} &: \text{Veri setinin aritmetik ortalaması} \\ n &: \text{Örneklem büyüklüğü} \end{align*}\] anlamına gelmektedir.
Bu bölümde, örneklem için standart sapmayı sd()
fonksiyonunu kullanmadan, verilen formül yardımıyla
manuel olarak hesaplayan bir fonksiyon oluşturulacaktır.
Fonksiyonun adı sd1() olacak ve
yuvarla isimli bir argümanla
ondalık sayıları belirli bir basamağa kadar yuvarlama özelliği
bulunacaktır.
Varsayılan yuvarlama değeri 3’tür.
Aşağıdaki formül, örneklem standart sapmasını hesaplamak için kullanılan klasik tanımdır. Standart sapma, verilerin ortalama etrafında ne kadar saçıldığını gösteren bir değişkenlik ölçüsüdür.
\[ s = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n - 1}} \]
Burada:
- \(x_i\): Her bir gözlem değeri
- \(\bar{x}\): Örneklem
ortalaması
- \(n\): Örneklem büyüklüğü
Fonksiyonu test etmek için rastgele üretilmiş vektörler
kullanılmıştır. Bu sayede sd1() fonksiyonunun R’ın kendi
sd() fonksiyonuyla benzer sonuçlar üretip üretmediği
kontrol edilmiştir.
sd1 <- function(x, yuvarla = 3) {
n <- length(x) # örneklem büyüklüğü
x_ort <- mean(x) # ortalama
fark_kare <- (x - x_ort)^2 # her bir farkın karesi
s <- sqrt(sum(fark_kare) / (n - 1)) # formüle göre standart sapma
return(round(s, yuvarla)) # yuvarlama işlemi
}
Aşağıda, oluşturulan sd1() fonksiyonunun farklı türde
veri vektörleri üzerinde test edilmesi amaçlanmıştır. Her bir vektör
farklı dağılım özellikleri taşıdığı için fonksiyonun genel geçerliliği
kontrol edilir.
set.seed(123) # Tekrarlanabilirlik için sabit tohum
# Normal dağılımlı rastgele veri
v1 <- rnorm(10, mean = 50, sd = 10)
# 1'den 20'ye kadar 2'şer artan sayılar
v2 <- seq(1, 20, by = 2)
# Tekrarlanan sabit değerler
v3 <- rep(c(3, 5, 7), times = 4)
Aşağıda her bir vektör için önce sd1() fonksiyonunun
ürettiği standart sapma değeri, ardından R’ın kendi sd()
fonksiyonunun ürettiği değer verilmiştir. Bu sayede oluşturulan
fonksiyonun doğruluğu test edilir.
# v1 için
sd1(v1); sd(v1)
## [1] 9.538
## [1] 9.537841
# v2 için
sd1(v2); sd(v2)
## [1] 6.055
## [1] 6.055301
# v3 için
sd1(v3); sd(v3)
## [1] 1.706
## [1] 1.705606
Sonuçlar karşılaştırıldığında, sd1() fonksiyonunun R’ın
kendi sd() fonksiyonu ile küçük yuvarlama farkları dışında
aynı sonucu verdiği görülmektedir. Bu durum fonksiyonun doğru şekilde
çalıştığını göstermektedir.
Ölçmenin standart hatasının formülü aşağıdaki gibidir. Kullanıcı test toplam puanlarını vektör olarak girdiğinde ve test güvenirlik değerleri verildiğinde ölçmenin standart hatasını üç ondalıkla hesaplayan bir fonksiyon yazınız. Yazdığınız fonkisyonu aşağıdaki bir puan vektörü ve 0.90 güvenirlik değeri için test ediniz. Puanları kendiniz üretiniz ve nasıl ürettiğinizi açıklayınız.
Ölçmenin Standart Hatası ( ) formülü aşağıdaki gibidir:
\[ SE_m = s_x \sqrt{\,1 - r_{xx}\,} \]
Burada:
\(SE_m\) : Ölçmenin standart hatası
\(s_x\) : Test toplam puanlarının standart sapması
\(r_{xx}\) : Testin güvenirlik katsayısı
anlamına gelmektedir.
Bu bölümde, test toplam puanlarının standart sapması
(sₓ) ve güvenirlik katsayısı (rₓₓ)
kullanılarak ölçmenin standart hatası (SEₘ)
hesaplanacaktır.
Formül aşağıda verilmiştir:
\[ SE_m = s_x \times \sqrt{1 - r_{xx}} \]
Fonksiyon üç ondalığa kadar yuvarlama yapacak biçimde oluşturulacaktır.
Aşağıdaki fonksiyon toplam puan vektörü ve güvenirlik katsayısını kullanarak sem değerini üç ondalık olacak şekilde hesaplar.
sem_fonksiyon <- function(x, rxx, yuvarla = 3)
{
sx <- sd(x) # Test puanlarının standart sapması
sem <- sx * sqrt(1 - rxx) # Ölçmenin standart hatası formülü
return(round(sem, yuvarla)) # Yuvarlanmış sonucu döndürme
}
Bu aşamada test toplam puanlarını temsil eden bir vektör oluşturulmuştur.
rnorm(30, mean = 70, sd = 10) fonksiyonu: 30 gözlem
üretir, bu gözlemler normal dağılıma göre oluşturulur.
Not: Bu aşamada set.seed() fonksiyonunun bilgisayarın
rastgele sayı üretim mekanizmasına verilen bir başlangıç değeri olduğunu
öğrendim. Her çalıştığında rastgele farklı bir veri seti oluşturmaması
adına set.seed() yazarak hep aynı puanları üretmesini
sağladık.
set.seed(42) # Tekrarlanabilirlik için sabit tohum
puanlar <- round(rnorm(30, mean = 70, sd = 10)) # 30 öğrencilik örneklem
head(puanlar)
## [1] 84 64 74 76 74 69
Güvenirlik katsayısı (rₓₓ) 0.90 olarak alınmıştır.
sem_fonksiyon(puanlar, rxx = 0.90)
## [1] 3.979
200 gözlem ve 23 değişkeden oluşan “sinav_veri.csv” dosyasını okuyarak sinav_veri nesnesine atayınız. Değişkenler sırası ile öğrencilerin düzeyleri (1-4 arası), öğrencilerin bulundukları şubeler (A ve B olmak üzere), öğrencilerin cinsiyeti, öğrencilerin 20 maddeye verdikleri cevaplardan oluşmaktadır.
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
# Dosyanın okunması
sinav_veri <- read.csv("sinav_veri.csv", header = TRUE)
# Veri yapısının incelenmesi
str(sinav_veri)
## 'data.frame': 199 obs. of 1 variable:
## $ X1.A.kiz.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0: chr "1;A;kiz;0;0;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;1;0;0" "1;A;erkek;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1" "1;A;erkek;0;1;0;1;1;1;0;0;1;0;1;0;1;0;0;0;0;0;0;0" "1;A;kiz;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;0;1;1;1" ...
head(sinav_veri)
## X1.A.kiz.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0
## 1 1;A;kiz;0;0;1;1;0;0;1;1;1;1;0;1;0;0;0;1;0;1;0;0
## 2 1;A;erkek;0;0;0;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;1
## 3 1;A;erkek;0;1;0;1;1;1;0;0;1;0;1;0;1;0;0;0;0;0;0;0
## 4 1;A;kiz;0;0;1;1;0;1;1;1;0;0;1;1;1;1;0;1;0;1;1;1
## 5 1;B;kiz;0;0;0;0;0;1;0;0;0;1;0;0;1;1;0;0;1;0;0;0
## 6 1;B;erkek;0;0;0;0;0;1;1;1;0;0;0;0;0;0;1;0;0;0;0;0
sinav_veri.csv dosyası, değişkenlerin noktalı virgülle ayrıldığı bir
formatta kaydedildiği için read.csv() fonksiyonu veriyi tek
sütun hâlinde okumaktadır. Bu nedenle ; karakterini varsayılan ayraç
olarak kabul eden read.csv2() fonksiyonu kullanılmıştır.
Böylece veri seti doğru şekilde sütunlarına ayrılmıştır.
sinav_veri <- read.csv2("sinav_veri.csv", header = FALSE)
head(sinav_veri)
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
## 1 1 A kiz 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 2 1 A kiz 0 0 1 1 0 0 1 1 1 1 0 1 0 0 0 1 0 1
## 3 1 A erkek 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## 4 1 A erkek 0 1 0 1 1 1 0 0 1 0 1 0 1 0 0 0 0 0
## 5 1 A kiz 0 0 1 1 0 1 1 1 0 0 1 1 1 1 0 1 0 1
## 6 1 B kiz 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0
## V22 V23
## 1 1 0
## 2 0 0
## 3 0 1
## 4 0 0
## 5 1 1
## 6 0 0
Bu adımda veri setinde yer alan 23 sütun yeniden isimlendirilmiştir.
İlk üç sütun öğrencilerin düzeyi, şubesi ve cinsiyetini; sonraki 20
sütun ise test maddelerine verilen cevapları temsil ettiği için
paste0 () ile madde_1–madde_20 biçiminde yeniden
adlandırılmıştır.
# Değişkenlerin İsimlendirilmesi
colnames(sinav_veri) <- c("duzey", "sube", "cinsiyet",
paste0("madde_", 1:20))
head(sinav_veri)
## duzey sube cinsiyet madde_1 madde_2 madde_3 madde_4 madde_5 madde_6 madde_7
## 1 1 A kiz 0 0 0 0 0 0 0
## 2 1 A kiz 0 0 1 1 0 0 1
## 3 1 A erkek 0 0 0 1 0 0 0
## 4 1 A erkek 0 1 0 1 1 1 0
## 5 1 A kiz 0 0 1 1 0 1 1
## 6 1 B kiz 0 0 0 0 0 1 0
## madde_8 madde_9 madde_10 madde_11 madde_12 madde_13 madde_14 madde_15
## 1 0 0 0 0 0 0 0 0
## 2 1 1 1 0 1 0 0 0
## 3 0 0 0 0 0 0 0 0
## 4 0 1 0 1 0 1 0 0
## 5 1 0 0 1 1 1 1 0
## 6 0 0 1 0 0 1 1 0
## madde_16 madde_17 madde_18 madde_19 madde_20
## 1 0 0 0 1 0
## 2 1 0 1 0 0
## 3 0 0 0 0 1
## 4 0 0 0 0 0
## 5 1 0 1 1 1
## 6 0 1 0 0 0
names(sinav_veri)
## [1] "duzey" "sube" "cinsiyet" "madde_1" "madde_2" "madde_3"
## [7] "madde_4" "madde_5" "madde_6" "madde_7" "madde_8" "madde_9"
## [13] "madde_10" "madde_11" "madde_12" "madde_13" "madde_14" "madde_15"
## [19] "madde_16" "madde_17" "madde_18" "madde_19" "madde_20"
id Değişkeninin Eklenmesi
Bu aşamada veri setinin başına id isimli bir değişken
eklenecektir.
Bu değişkende her bireye "id_1"’den "id_200"’e
kadar kimlik değerleri atanacaktır.
paste0("id_", 1:nrow(sinav_veri)) komutu veri setindeki
gözlem sayısını otomatik olarak algılar ve her gözleme sıralı biçimde
bir kimlik değeri atar. cbind() ise yeni oluşturulan id
değişkenini veri setinin en başına sütun olarak ekler.
# id değişkenini oluşturma
id <- paste0("id_", 1:nrow(sinav_veri))
# verinin ilk sütununa ekleme
sinav_veri <- cbind(id, sinav_veri)
# kontrol
head(sinav_veri)
## id duzey sube cinsiyet madde_1 madde_2 madde_3 madde_4 madde_5 madde_6
## 1 id_1 1 A kiz 0 0 0 0 0 0
## 2 id_2 1 A kiz 0 0 1 1 0 0
## 3 id_3 1 A erkek 0 0 0 1 0 0
## 4 id_4 1 A erkek 0 1 0 1 1 1
## 5 id_5 1 A kiz 0 0 1 1 0 1
## 6 id_6 1 B kiz 0 0 0 0 0 1
## madde_7 madde_8 madde_9 madde_10 madde_11 madde_12 madde_13 madde_14 madde_15
## 1 0 0 0 0 0 0 0 0 0
## 2 1 1 1 1 0 1 0 0 0
## 3 0 0 0 0 0 0 0 0 0
## 4 0 0 1 0 1 0 1 0 0
## 5 1 1 0 0 1 1 1 1 0
## 6 0 0 0 1 0 0 1 1 0
## madde_16 madde_17 madde_18 madde_19 madde_20
## 1 0 0 0 1 0
## 2 1 0 1 0 0
## 3 0 0 0 0 1
## 4 0 0 0 0 0
## 5 1 0 1 1 1
## 6 0 1 0 0 0
Toplam Puan Değişkeninin Eklenmesi
Bu adımda her bireyin testten aldığı toplam puan oluşturulmuştur.
Veri setinde madde_1 ile madde_20 arasındaki sütunlar 0–1 puanlamasına
sahip maddeleri temsil etmektedir. Bu maddelerin rowSums()
fonksiyonu ile satır bazında toplanmasıyla bireyin testte elde ettiği
toplam puan hesaplanmıştır.
# Toplam puanı hesaplama ve yeni sütun olarak ekleme
sinav_veri <- sinav_veri %>%
mutate(toplam = rowSums(select(., starts_with("madde_"))))
# Kontrol
head(sinav_veri[, c("id", "toplam")])
## id toplam
## 1 id_1 1
## 2 id_2 9
## 3 id_3 2
## 4 id_4 7
## 5 id_5 13
## 6 id_6 5
Bu bölümde A ve B şubelerindeki kız ve erkek öğrencilerin toplam puan
ortalamaları tek bir komut içinde hesaplanmıştır. Hem
group_by() hem de summarise() fonksiyonları
birlikte kullanılarak ortalama puanlar elde edilmiştir.
ortalama_sonuc <- sinav_veri %>%
group_by(sube, cinsiyet) %>%
summarise(ortalama_toplam = mean(toplam))
## `summarise()` has grouped output by 'sube'. You can override using the
## `.groups` argument.
ortalama_sonuc
## # A tibble: 4 × 3
## # Groups: sube [2]
## sube cinsiyet ortalama_toplam
## <chr> <chr> <dbl>
## 1 A erkek 8.52
## 2 A kiz 8.64
## 3 B erkek 9.84
## 4 B kiz 10.9
Öğrencilerin Toplam Puanlarına Göre Gruplandırılması
Bu aşamada öğrenciler toplam puanlarına göre üç kategoriye ayrılacaktır:
- Alt grup: 0–6 puan
- Orta grup: 7–12 puan
- Üst grup: 13–20 puan
Gruplandırma işlemi case_when() fonksiyonu ile yapılmış
ve elde edilen grup bilgisi veri setine yeni bir sütun olarak
eklenmiştir. Ardından her grubun kaç kişiden oluştuğu
group_by() ve summarise() fonksiyonlarıyla tek
bir komutta hesaplanmıştır.
# Gruplama değişkenini oluşturma ve sinav_order isimli yeni bir nesneye kaydetme
sinav_order <- sinav_veri %>%
mutate(grup = case_when(
toplam >= 0 & toplam <= 6 ~ "alt",
toplam >= 7 & toplam <= 12 ~ "orta",
toplam >= 13 & toplam <= 20 ~ "ust"
))
# Her gruptaki öğrenci sayısını bulma
grup_sayilari <- sinav_order %>%
group_by(grup) %>%
summarise(ogrenci_sayisi = n())
grup_sayilari
## # A tibble: 3 × 2
## grup ogrenci_sayisi
## <chr> <int>
## 1 alt 60
## 2 orta 86
## 3 ust 54
Sonuç olarak öğrencilerin %30’u (n=60) alt grupta, %43’ü (n=86) orta grupta ve %27’si (n=54) üst grupta yer almaktadır.
Maddenin ayırt ediciliğinin göstergesi olarak madde puanları ve toplam puanlar arasındaki korelasyon katsayısı hesaplanabilir. İki kategorili puanlanan bir madde için ise değişkenlerden birisi iki kategorili olduğunda, Pearson momentler çarpımı korelasyon katsayısının özel bir durumu olarak kullanılan nokta çift-serili korelasyon katsayısından (point biserial correlation coefficient) veya çift-serili korelasyon katsayısından (biserial correlation coefficient) yararlanılabilir. Nokta çift-serili korelasyon katsayısı, iki kategorili değişken için gerçekte iki kategori söz konusu olduğu durumda kullanılır. Bir j maddesi için nokta çift serili korelasyon katsayısı (ρ_pbis) aşağıdaki formül aracılığıyla hesaplanabilir:
\[ \rho_{pbis} = \frac{\mu_{+} - \mu_{X}} {\sigma_{X}} \sqrt{\frac{p_j}{q_j}} \]
Burada,
\(\mu_{+}\) : Maddeyi doğru yanıtlayan bireylerin ortalama toplam test puanı
\(\mu_{X}\) : Tüm grup için ortalama toplam test puanı
\(\sigma_{X}\) : Tüm grubun toplam test puanlarının standart sapması
\(p_j\) : j maddesinin güçlüğü (maddeyi doğru yanıtlayanların oranı)
\(q_j = 1 - p_j\) : Maddeyi yanlış yanıtlayanların oranı
anlamına gelmektedir.
sinav_veri nesnesinde yer alan 20 maddenin (5*6)
Aşağıdaki hesaplamalarda her bir maddenin ayırt ediciliğini ölçmek için nokta çift-serili korelasyon katsayısı (point-biserial correlation) kullanılmıştır. Bu katsayı, iki kategorili puanlanan maddeler için toplam puan ile madde puanı arasındaki ilişkiyi ifade eder.
Nokta cift-serili korelasyon katsayısı (ρₚbᵢₛ) formülü:
\[ ρ_{pbis} = \frac{(\mu_+ - \mu_X)}{σ_X} \times \sqrt{\frac{p_j}{q_j}} \]
Burada:
- \(\mu_+\): maddeyi doğru
yanıtlayanların ortalama toplam puanı
- \(\mu_X\): tüm grubun ortalama toplam
puanı
- \(σ_X\): toplam puanların standart
sapması
- \(p_j\): madde güçlüğü (maddeyi doğru
yanıtlayanların oranı)
- \(q_j = 1 - p_j\)
Bu formül her madde için aynı yapıyla hesaplanabildiğinden kod kısmında bir döngü kullanılarak 20 maddenin tamamı için otomatik hesaplama yapılmıştır.
# a) Tüm grup için nokta çift-serili korelasyon (manuel formülle)
# Boş bir vektör oluşturma (20 madde için)
rj_tum <- numeric(20)
# Tüm grup için ortalama ve sd
mu_X <- mean(sinav_veri$toplam)
sigma_X <- sd(sinav_veri$toplam)
# Döngü ile her madde için hesaplama
for (j in 1:20) {
madde <- sinav_veri[[paste0("madde_", j)]]
# Maddeyi doğru yanıtlayanların ortalama toplam puanı
mu_plus <- mean(sinav_veri$toplam[madde == 1])
# Madde güçlüğü (doğru yanıt oranı)
p_j <- mean(madde)
q_j <- 1 - p_j
# Nokta çift-serili korelasyon formülü
rj_tum[j] <- ((mu_plus - mu_X) / sigma_X) * sqrt(p_j / q_j)
}
# Sonuçları bir tabloya dönüştürme
rj_tum_df <- data.frame(
madde = paste0("madde_", 1:20),
rj_tum = round(rj_tum, 3)
)
rj_tum_df
## madde rj_tum
## 1 madde_1 0.611
## 2 madde_2 0.553
## 3 madde_3 0.333
## 4 madde_4 0.525
## 5 madde_5 0.465
## 6 madde_6 0.344
## 7 madde_7 0.542
## 8 madde_8 0.455
## 9 madde_9 0.385
## 10 madde_10 0.378
## 11 madde_11 0.588
## 12 madde_12 0.603
## 13 madde_13 0.362
## 14 madde_14 0.595
## 15 madde_15 0.351
## 16 madde_16 0.269
## 17 madde_17 0.547
## 18 madde_18 0.478
## 19 madde_19 0.430
## 20 madde_20 0.502
Değerlerin yorumlanmasında aşağıdaki ölçütler kullanılır:
0.40 ve üzeri : çok iyi ayırt edicilik
0.30–0.39 : iyi
0.20–0.29 : orta
0.19 ve altı : zayıf
Maddelerin büyük çoğunluğunun ayırt edicilik değeri 0.40 üzerinde olduğunda oldukça iyi ayırt edicilik gösterdiği söylenebilir.
madde_3, madde_6, madde_9, madde_10, madde_13 ve madde_15 iyi düzeyde;
madde_16 (0.269) orta düzeydedir.
Bu bölümde nokta çift-serili korelasyon katsayısı (ρₚbᵢₛ) aynı formül
kullanılarak kız ve erkek öğrenciler için ayrı ayrı hesaplanmıştır.
Maddelerin ayırt edicilik özelliklerinin cinsiyet grupları arasında
farklılık gösterip göstermediğini incelemek için hesaplamalar, a
şıkkında tanımlanan formülün her iki alt grup için uygulanmasıyla
yapılmıştır. Bu formül her madde için aynı yapıda hesaplandığından,
işlemi tekrarlamamak adına bir yardımcı fonksiyon
(hesapla_rj) kullanılmıştır. Fonksiyon, kendisine verilen
alt grup (kızlar veya erkekler) üzerinde 20 maddenin tamamı için ayırt
edicilik katsayılarını üretir.
# cinsiyet düzeylerine göre boş veri çerçevesi oluşturma
rj_cinsiyet <- data.frame(
madde = paste0("madde_", 1:20),
kiz = NA,
erkek = NA
)
# Fonksiyonu tanımlama
hesapla_rj <- function(veri){
mu_X <- mean(veri$toplam)
sigma_X <- sd(veri$toplam)
sapply(1:20, function(j){
madde <- veri[[paste0("madde_", j)]]
mu_plus <- mean(veri$toplam[madde == 1])
p_j <- mean(madde)
q_j <- 1 - p_j
((mu_plus - mu_X) / sigma_X) * sqrt(p_j / q_j)
})
}
# Kızlar ve erkekler için ayrı ayrı hesaplama
rj_cinsiyet$kiz <- round(hesapla_rj(filter(sinav_veri, cinsiyet == "kiz")), 3)
rj_cinsiyet$erkek <- round(hesapla_rj(filter(sinav_veri, cinsiyet == "erkek")), 3)
rj_cinsiyet
## madde kiz erkek
## 1 madde_1 0.587 0.633
## 2 madde_2 0.650 0.475
## 3 madde_3 0.272 0.396
## 4 madde_4 0.579 0.467
## 5 madde_5 0.532 0.405
## 6 madde_6 0.400 0.282
## 7 madde_7 0.591 0.488
## 8 madde_8 0.475 0.428
## 9 madde_9 0.361 0.422
## 10 madde_10 0.367 0.415
## 11 madde_11 0.700 0.443
## 12 madde_12 0.614 0.587
## 13 madde_13 0.386 0.358
## 14 madde_14 0.642 0.559
## 15 madde_15 0.417 0.254
## 16 madde_16 0.266 0.258
## 17 madde_17 0.546 0.547
## 18 madde_18 0.567 0.369
## 19 madde_19 0.401 0.463
## 20 madde_20 0.562 0.434
NOT : CTT paketi düzeltilmiş nokta çift-serili korelasyon katsayısı hesapladığı için sonuçlar aynı çıkmayacaktır.
Aynı analiz bu bölümde CTT paketinin itemAnalysis() fonksiyonu
kullanılarak yapılmıştır.CTT paketindeki itemAnalysis()
fonksiyonu madde ayırt ediciliği ve madde güçlüğünü otomatik olarak
hesaplar. itemAnalysis() fonksiyonu düzeltilmiş nokta
çift-serili korelasyon katsayısı hesaplamaktadır. Bu nedenle manuel
olarak hesapladığımız değerlerle tam olarak aynı sonuçlar elde edilmez
çünkü düzeltilmiş korelasyonlar toplam puandan madde puanı çıkartılarak
hesaplanır ve bu işlem katsayının değişmesine yol açabilir dolayısıyla
sonuçlar küçük farklar gösterebilir.
library(CTT)
# CTT analizine uygun şekilde yalnızca madde sütunlarının seçilmesi
madde_veri <- sinav_veri %>% select(starts_with("madde_"))
# itemAnalysis
ctt_sonuc <- itemAnalysis(madde_veri)
# Madde ayırt edicilik değerleri (r.drop) ve güçlük (p)
names(ctt_sonuc$itemReport)
## [1] "itemName" "itemMean" "pBis" "bis"
## [5] "alphaIfDeleted"
# CTT sonuçlarının ilgili sütunlarını görüntüleme
ctt_sonuc$itemReport[, c("itemName", "itemMean", "pBis")]
## itemName itemMean pBis
## 1 madde_1 0.47 0.5354616
## 2 madde_2 0.53 0.4707659
## 3 madde_3 0.55 0.2299700
## 4 madde_4 0.36 0.4430028
## 5 madde_5 0.37 0.3759047
## 6 madde_6 0.82 0.2667077
## 7 madde_7 0.71 0.4664061
## 8 madde_8 0.57 0.3627846
## 9 madde_9 0.30 0.2945506
## 10 madde_10 0.52 0.2775098
## 11 madde_11 0.40 0.5108272
## 12 madde_12 0.58 0.5274432
## 13 madde_13 0.62 0.2640013
## 14 madde_14 0.52 0.5175262
## 15 madde_15 0.38 0.2519119
## 16 madde_16 0.32 0.1701400
## 17 madde_17 0.41 0.4648960
## 18 madde_18 0.32 0.3938428
## 19 madde_19 0.33 0.3402452
## 20 madde_20 0.40 0.4147055
CTT paketinden elde edilen itemMean değerleri,
maddelerin doğru cevaplanma oranını (madde güçlüğünü)
gösterirken,
pBis sütunundaki değerler maddelerin ayırt
ediciliğini (nokta çift-serili korelasyon)
göstermektedir.
Manuel hesaplamalarla elde edilen değerlerle küçük farklar bulunması
beklenir, çünkü CTT paketi düzeltilmiş
korelasyon kullanır.
pBis değerleri genel olarak orta ile yüksek aralıklarda olup maddelerin büyük kısmının iyi ayırt edicilik gösterdiğini doğrulamaktadır. Özellikle madde_1, madde_11, madde_12, madde_14 yüksek ayırt edicilik katsayılarına sahiptir. En düşük ayırt edicilik madde_16 (0.170) için bulunmuştur; bu madde hem manuel hesaplamada hem CTT’de düşük ayırt edicilik göstermektedir.
34 bireye bir testin A ve B formları uygulanmıştır. A ve B formlarında yer alan sorular aynı olmakla birlikte, soru numaraları farklıdır. Soru numaraları karşılıkları aşağıda verilmiştir. Örneğin A kitapçığındaki birinci soru, b kitapçığında 2. soru olarak verilmiştir. (15p)
| A | B | |||
| 1 | 2 | |||
| 2 | 3 | |||
| 3 | 1 | |||
| 4 | 5 | |||
| 5 | 6 | |||
| 6 | 7 | |||
| 7 | 8 | |||
| 8 | 4 | |||
| 9 | 9 | |||
| 10 | 11 | |||
| 11 | 10 | |||
FORMAB.xlsx dosyasında her iki kitapçık türünün cevap anahtarı bireylerin idleri, aldıkları kitapçık türleri ve 11 maddeye verdikleri cevaplar yer almaktadır. Sizden istenilen B kitapçığını alan kişilerin madde cevaplarını A kitapçığına dönüştürerek (dplyr paket fonksiyonlarını kullanabilirsiniz), 34 bireyin hepsini A kitapçığını almış gibi veri dosyasını kaydetmenizdir. (20 puan)
Bu soruda A ve B kitapçıklarında yer alan maddeler farklı sırada olduğu için, önce B formunu A formundaki madde sırasına uyarlamak gereklidir. Böylece tüm öğrencilerin yanıtları aynı biçimde (A formu gibi) düzenlenebilir ve analiz edilebilir. Ardından 1-0 puanlaması yapılıp madde güçlüğü hesaplanacaktır.
Verinin Okunması
Bu kısımda şöyle bir hata verdi.
in filter(): ℹ In argument:
kitapcik == "B". Caused by error: ! object ‘kitapcik’ not
found Run rlang::last_trace() to see where the error
occurred.
Veri setini kontrol ettiğimde ilk iki satırı, verinin parçası değil de sütun isimleri gibi okuduğunu fark ettim. Dolayısıyla kitapcik sütununu bulamıyordu. 2 satır atlaması için skip=2 yazdım.
library(readxl)
library (dplyr)
FORMAB <- read_excel("FORMAB.xlsx", skip = 2)
names (FORMAB)
## [1] "id" "kitapcik" "m1" "m2" "m3" "m4"
## [7] "m5" "m6" "m7" "m8" "m9" "m10"
## [13] "m11"
head (FORMAB)
## # A tibble: 6 × 13
## id kitapcik m1 m2 m3 m4 m5 m6 m7 m8 m9 m10
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 id1 B C B D B A E E D A E
## 2 id2 B C B D B A B E D A E
## 3 id3 A B D C A E E E B A E
## 4 id4 A E D C E E E D B A E
## 5 id5 A B D C A E E E B A C
## 6 id6 B C B D B A E E B A E
## # ℹ 1 more variable: m11 <chr>
# Soru eşleştirme
eslestirme <- c(2, 3, 1, 5, 6, 7, 8, 4, 9, 11, 10)
B Formundaki Soru Numaralarını A Formuna Dönüştürme
Bu aşamada B kitapçığını alan bireylerin madde yanıtları, A kitapçığındaki madde sırasına dönüştürülmüştür. Analizin tek bir ortak form üzerinden yürütülebilmesi için B formu yeniden düzenlenmelidir.
# B formunu A form sırasına göre yeniden adlandırma
FORMAB_B <- FORMAB %>%
filter( kitapcik == "B") %>%
mutate(across(starts_with("m"), as.character)) %>%
select(id, kitapcik, all_of(paste0("m", eslestirme)))
# Yeni sütun adlarını A formuna göre düzenle
colnames(FORMAB_B)[3:13] <- paste0("m", 1:11)
# A formundakileri olduğu gibi alma
FORMAB_A <- FORMAB %>%
filter(kitapcik == "A")
# İki formu birleştirme
FORMAB_son <- bind_rows(FORMAB_A, FORMAB_B)
paste0("m", eslestirme) ifadesi B formundaki maddelerin
A formunda karşılık geldiği sırayı oluşturur. select() bu
sırayı kullanarak B formunu yeniden düzenler.
colnames(FORMAB_B)[3:13] <- paste0("m", 1:11) ile
maddeler yeni dizilişe göre A formunun adlarını alır. Son adımda A formu
+ dönüştürülmüş B formu birleşerek herkes A formunu çözmüş gibi tek bir
veri seti oluşur.
1–0 Puanlaması ve CSV Kaydı
Bu aşamada A formuna dönüştürülmüş cevaplar, verilen cevap anahtarına göre 1–0 puanlamasına dönüştürülmüştür. Her madde için:
Cevap anahtarı ile aynı seçenek verilmişse 1,
Yanlışsa 0 puan atanmıştır.
# Cevap anahtarını tanımlama
cevap_anahtari <- c("B", "C", "D", "A", "B", "A", "E", "E", "D", "A", "E")
# Her bireyin cevaplarını 1–0 olarak puanlama
puanlanmis <- FORMAB_son %>%
mutate(across(starts_with("m"),
~ ifelse(.x == cevap_anahtari[as.numeric(gsub("m", "", cur_column()))], 1, 0)))
# CSV olarak kaydetme
write.csv(puanlanmis, "FORMAB-10.csv", row.names = FALSE)
gsub("m", "", cur_column()) sütun adındaki “m” harfini
kaldırır ve madde numarasını çıkarır. Örneğin “m3” - “3” olur. Bu sayı
cevap anahtarındaki ilgili maddeyi seçmek için kullanılır.
ifelse(.x == doğru_cevap, 1, 0) ile puanlama yapılır. Son
olarak sonuçlar “FORMAB-10.csv” dosyasına kaydedilmiş olur.
Madde güçlüğü, bir maddenin doğru cevaplanma oranıdır (doğru sayısı / toplam kişi sayısı).
madde_gucluk <- colMeans(select(puanlanmis, starts_with("m")), na.rm = TRUE)
madde_gucluk_df <- data.frame(
madde = names(madde_gucluk),
gucluk = round(madde_gucluk, 3)
)
madde_gucluk_df
## madde gucluk
## m1 m1 0.909
## m2 m2 0.000
## m3 m3 0.000
## m4 m4 0.941
## m5 m5 0.029
## m6 m6 0.000
## m7 m7 0.138
## m8 m8 0.000
## m9 m9 0.000
## m10 m10 0.000
## m11 m11 0.970
pisa2015.csv dosyasını okuyunuz. Okuduğunuz dosyanın ST001D01T:ST129Q08TA arasındaki değişkenler ve PV1SCIE (fen okuryazarlık) değişkeninden oluşan yeni bir veri seti oluşturunuz.
# Öncelikle gerekli tüm paketleri aktifleştiriyoruz.
library(dplyr)
library (tibble)
library(readr)
library(ggplot2)
# veri okuma ve alt veri seti oluşturma
pisa2015 <- read_csv("pisa2015.csv")
## New names:
## Rows: 5895 Columns: 223
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (2): CNT, STRATUM dbl (221): ...1, CNTRYID, CNTSCHID, CNTSTUID, BOOKID,
## W_FSTUWT, W_FSTURWT1, ...
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
head (pisa2015)
## # A tibble: 6 × 223
## ...1 CNT CNTRYID CNTSCHID CNTSTUID BOOKID W_FSTUWT W_FSTURWT1 W_FSTURWT2
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 TUR 792 79200001 79200939 31 193. 290. 296.
## 2 2 TUR 792 79200001 79206774 96 193. 290. 296.
## 3 3 TUR 792 79200001 79204670 43 193. 290. 296.
## 4 4 TUR 792 79200001 79201647 32 193. 290. 296.
## 5 5 TUR 792 79200001 79203718 89 193. 290. 296.
## 6 6 TUR 792 79200001 79204968 91 193. 290. 296.
## # ℹ 214 more variables: W_FSTURWT3 <dbl>, W_FSTURWT4 <dbl>, W_FSTURWT5 <dbl>,
## # W_FSTURWT6 <dbl>, W_FSTURWT7 <dbl>, W_FSTURWT8 <dbl>, W_FSTURWT9 <dbl>,
## # W_FSTURWT10 <dbl>, W_FSTURWT11 <dbl>, W_FSTURWT12 <dbl>, W_FSTURWT13 <dbl>,
## # W_FSTURWT14 <dbl>, W_FSTURWT15 <dbl>, W_FSTURWT16 <dbl>, W_FSTURWT17 <dbl>,
## # W_FSTURWT18 <dbl>, W_FSTURWT19 <dbl>, W_FSTURWT20 <dbl>, W_FSTURWT21 <dbl>,
## # W_FSTURWT22 <dbl>, W_FSTURWT23 <dbl>, W_FSTURWT24 <dbl>, W_FSTURWT25 <dbl>,
## # W_FSTURWT26 <dbl>, W_FSTURWT27 <dbl>, W_FSTURWT28 <dbl>, …
# İstenen değişken aralığını ve PV1SCIE'yi seçme
pisa_sel <- pisa2015 %>%
select(ST001D01T:ST129Q08TA, PV1SCIE, ESCS, MISCED, FISCED, STRATUM, ST004D01T)
Bu soruda PISA 2015 veri setinden belirli değişkenler seçilerek yeni
bir çalışma nesnesi oluşturulmuştur. Veri ilk olarak
read_csv() fonksiyonu ile okunmuştur. Daha sonra yönergede
belirtilen şekilde ST001D01T–ST129Q08TA arasındaki tüm maddeler ile fen
okuryazarlığını temsil eden PV1SCIE değişkeni seçilmiştir. Ayrıca
sosyo-ekonomik düzey (ESCS), anne eğitimi (MISCED), baba eğitimi
(FISCED), bölge bilgileri (STRATUM) ve cinsiyet (ST004D01T)…
değişkenleri de analize dahil edilmiştir.
Bu adımda ST094 ile başlayan tüm maddeler sayısal (numeric) yapıdan çıkarılarak kategori değişkenine (factor) dönüştürülmüştür.
pisa_sel <- pisa_sel %>%
mutate(across(starts_with("ST094"),
~ factor(.x,
levels = 1:4,
labels = c("Kesinlikle katılmıyorum",
"Katılmıyorum",
"Katılıyorum",
"Kesinlikle katılıyorum"))))
| Orijinal değişken | Türkçe adı | |||
| ST001D01T | ÖĞRENCİ_ID | |||
| ST004D01T | CİNSİYET | |||
| STRATUM | BÖLGE | |||
| MISCED | ANNE_EĞİTİMİ | |||
| FISCED | BABA_EĞİTİMİ | |||
| IMMIG | GÖÇMEN_DURUMU | |||
| LANGN | EVDE_KONUŞULAN_DİL | |||
| ESCS | SOSYO_EKONOMİK_DÜZEY | |||
| JOYSCIE | FEN_KEYİFİ | |||
| SCIEEFF | FEN ÖZYETERLİK | |||
| ST094Q01NA–ST094Q05NA | (Likert maddeleri) | |||
| ST129Q01TA–ST129Q08TA | (Okul algısı maddeleri) | |||
| PV1SCIE | FEN_OKURYAZARLIK | |||
Bu adımda PISA veri setindeki değişkenler yeniden isimlendirilmiştir.
dplyr paketinin rename() fonksiyonu her bir değişkene yeni
ad atamak için kullanılmıştır. Ek olarak maddelerin bulunduğu ST094 ve
ST129 serisindeki değişkenler Likert tipi ifadeleri temsil ettikleri
için aynı isimleri korunmuş; yalnızca diğer temel değişkenler
Türkçeleştirilmiştir.
pisa2015_tr <- pisa_sel %>%
rename(
OGRENCI_ID = ST001D01T,
CINSIYET = ST004D01T,
BOLGE = STRATUM,
ANNE_EGITIMI = MISCED,
BABA_EGITIMI = FISCED,
GOCMEN_DURUMU = IMMIG,
EVDE_KONUSULAN_DIL = LANGN,
SOSYO_EKONOMIK_DUZEY = ESCS,
FEN_KEYFI = JOYSCIE,
FEN_OZ_YETERLIK = SCIEEFF,
FEN_OKURYAZARLIK = PV1SCIE
)
Bu adımda doğrusal olmayan bu eşleşmeyi kolaylaştırmak için bir
lookup tablosu (bolge_lookup) oluşturulmuş ve
left_join() ile ana veri setine yeni bir değişken olarak
eklenmiştir.
# STRATUM - 12 Bölge eşlemesi
bolge_lookup <- tribble(
~BOLGE, ~BOLGE2,
"TUR0101", "TR1_ISTANBUL",
"TUR0102", "TR1_ISTANBUL",
"TUR0103", "TR1_ISTANBUL",
"TUR0104", "TR2_BATI_MARMARA",
"TUR0105", "TR2_BATI_MARMARA",
"TUR0106", "TR2_BATI_MARMARA",
"TUR0107", "TR3_EGE",
"TUR0108", "TR3_EGE",
"TUR0109", "TR3_EGE",
"TUR0110", "TR4_DOGU_MARMARA",
"TUR0111", "TR4_DOGU_MARMARA",
"TUR0112", "TR4_DOGU_MARMARA",
"TUR0213", "TR5_BATI_ANADOLU",
"TUR0214", "TR5_BATI_ANADOLU",
"TUR0215", "TR5_BATI_ANADOLU",
"TUR0216", "TR6_AKDENIZ",
"TUR0217", "TR6_AKDENIZ",
"TUR0218", "TR6_AKDENIZ",
"TUR0219", "TR7_ORTA_ANADOLU",
"TUR0220", "TR7_ORTA_ANADOLU",
"TUR0221", "TR7_ORTA_ANADOLU",
"TUR0222", "TR8_BATI_KARADENIZ",
"TUR0223", "TR8_BATI_KARADENIZ",
"TUR0224", "TR8_BATI_KARADENIZ",
"TUR0225", "TR9_DOGU_KARADENIZ",
"TUR0226", "TR9_DOGU_KARADENIZ",
"TUR0227", "TR9_DOGU_KARADENIZ",
"TUR0228", "TRA_KUZEYDOGU_ANADOLU",
"TUR0229", "TRA_KUZEYDOGU_ANADOLU",
"TUR0230", "TRA_KUZEYDOGU_ANADOLU",
"TUR0231", "TRB_ORTADOGU_ANADOLU",
"TUR0232", "TRB_ORTADOGU_ANADOLU",
"TUR0233", "TRB_ORTADOGU_ANADOLU",
"TUR0234", "TRC_GUNEYDOGU_ANADOLU",
"TUR0235", "TRC_GUNEYDOGU_ANADOLU",
"TUR0236", "TRC_GUNEYDOGU_ANADOLU"
)
# Orjinal veri setine ekleme
pisa2015_tr <- pisa2015_tr %>%
left_join(bolge_lookup, by = "BOLGE")
Bu aşamada öğrencilerin fen okuryazarlık düzeylerinin (PV1SCIE) cinsiyete göre nasıl dağıldığını incelemek amacıyla bir boxplot oluşturulmuştur. Öncelikle cinsiyet değişkeni 1 ve 2 kodlarından çıkarılarak “Kız” ve “Erkek” etiketleriyle faktör değişkene dönüştürülmüştür. Kutu grafiği her grubun dağılımını gösterirken, her kutunun üzerine yerleştirilen nokta o gruptaki ortalama fen okuryazarlık puanını temsil etmektedir. Grafikle ilgili biçimsel düzenlemeler de bu aşamada yapılmıştır.
# Cinsiyet değişkenini faktör olarak ekleme
pisa2015_tr <- pisa2015_tr %>%
mutate(CINSIYET = factor(CINSIYET,
levels = c(1, 2),
labels = c("Kız", "Erkek")))
# Boxplot + ortalama noktası
ggplot(pisa2015_tr, aes(x = CINSIYET, y = FEN_OKURYAZARLIK)) +
geom_boxplot(fill = "#e0eee0", alpha = 0.7) +
stat_summary(fun = mean,
geom = "point",
shape = 21,
size = 3.5,
fill = "#228b22",
color = "black") +
labs(
x = "Cinsiyet",
y = "Fen Okuryazarlık Puanı (PV1SCIE)",
title = "Cinsiyete Göre Fen Okuryazarlık Puanlarının Dağılımı"
) +
theme_minimal(base_size = 11)
Bu adımda öğrencilerin fen okuryazarlık puanlarının (PV1SCIE),
oluşturulan BOLGE2 değişkenine göre nasıl farklılaştığı incelenmektedir.
İlk olarak her bölgenin ortalama fen okuryazarlık puanı
group_by() ve summarise() fonksiyonlarıyla
hesaplanmış, ardından bu ortalamalar büyükten küçüğe sıralanmıştır. Elde
edilen sonuçlar bir çubuk grafik (bar plot) ile görselleştirilmiştir.
Grafikte bölgeler X ekseninde, ortalama fen okuryazarlık puanları ise Y
ekseninde yer almaktadır.
# Her bölgenin ortalama FEN_OKURYAZARLIK puanı
bolge2_ort <- pisa2015_tr %>%
group_by(BOLGE2) %>%
summarise(ORT_FEN = mean(FEN_OKURYAZARLIK, na.rm = TRUE)) %>%
arrange(desc(ORT_FEN))
bolge2_ort
## # A tibble: 12 × 2
## BOLGE2 ORT_FEN
## <chr> <dbl>
## 1 TR2_BATI_MARMARA 438.
## 2 TR3_EGE 437.
## 3 TR5_BATI_ANADOLU 435.
## 4 TR1_ISTANBUL 434.
## 5 TR6_AKDENIZ 433.
## 6 TR4_DOGU_MARMARA 430.
## 7 TR7_ORTA_ANADOLU 416.
## 8 TR8_BATI_KARADENIZ 412.
## 9 TR9_DOGU_KARADENIZ 409.
## 10 TRA_KUZEYDOGU_ANADOLU 404.
## 11 TRC_GUNEYDOGU_ANADOLU 388.
## 12 TRB_ORTADOGU_ANADOLU 382.
ggplot(bolge2_ort, aes(x = reorder(BOLGE2, ORT_FEN), y = ORT_FEN)) +
geom_col(fill = "#e0eee0") +
labs(
x = "Bölge",
y = "Ortalama Fen Okuryazarlık (PV1SCIE)",
title = "BÖLGE2'ye Göre Ortalama Fen Okuryazarlık Puanları"
) +
theme_minimal(base_size = 9) +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # yazıların okunaklı olması için
Bu bölümde, öğrencilerin fen okuryazarlık puanları (PV1SCIE) ile sosyo-ekonomik düzeyleri (ESCS) arasındaki ilişki Pearson korelasyon katsayısı ile incelenmiştir. Pearson korelasyonu doğrusal ilişkiyi ölçen bir katsayıdır ve -1 ile +1 arasında değer alır.
# Pearson korelasyonu: cor () yerine cor.test () kullanarak katsayının yanında p-değerini, güven aralığını ve test istatistiğini de elde ettik
cor_test_sonuc <- cor.test(
pisa2015_tr$FEN_OKURYAZARLIK,
pisa2015_tr$SOSYO_EKONOMIK_DUZEY,
method = "pearson",
use = "pairwise.complete.obs" # eksik veriler için
)
cor_test_sonuc
##
## Pearson's product-moment correlation
##
## data: pisa2015_tr$FEN_OKURYAZARLIK and pisa2015_tr$SOSYO_EKONOMIK_DUZEY
## t = 23.153, df = 5857, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2659325 0.3128542
## sample estimates:
## cor
## 0.2895673
Elde edilen Pearson korelasyon katsayısına göre fen okuryazarlık puanı ile sosyo-ekonomik düzey arasındaki ilişki 0.29’dur. Bu değer pozitif yönlü ve orta düzeyin altında bir ilişki olduğunu gösterir. Sosyo-ekonomik düzey arttıkça fen okuryazarlık puanlarının da yükselme eğiliminde olduğu ancak ilişkinin çok güçlü olmadığı anlaşılmaktadır.
4 Değişkenlik Korelasyon Matrisi için Kullanılacak değişkenler:
FEN_OKURYAZARLIK
SOSYO_EKONOMIK_DUZEY
ANNE_EGITIMI
BABA_EGITIMI
# Seçili dört değişkeni bir matrise dönüştürme
kor_mat <- pisa2015_tr %>%
select(FEN_OKURYAZARLIK,
SOSYO_EKONOMIK_DUZEY,
ANNE_EGITIMI,
BABA_EGITIMI) %>%
cor(use = "pairwise.complete.obs")
# Yuvarlanmış hâli
round(kor_mat, 3)
## FEN_OKURYAZARLIK SOSYO_EKONOMIK_DUZEY ANNE_EGITIMI
## FEN_OKURYAZARLIK 1.000 0.290 0.099
## SOSYO_EKONOMIK_DUZEY 0.290 1.000 0.662
## ANNE_EGITIMI 0.099 0.662 1.000
## BABA_EGITIMI 0.170 0.778 0.560
## BABA_EGITIMI
## FEN_OKURYAZARLIK 0.170
## SOSYO_EKONOMIK_DUZEY 0.778
## ANNE_EGITIMI 0.560
## BABA_EGITIMI 1.000
Dört değişkenlik korelasyon matrisi ise bu ilişkinin daha geniş formunu ortaya koymaktadır: SOSYO_EKONOMIK_DUZEY, ANNE_EGITIMI (0.662) ve BABA_EGITIMI (0.778) ile yüksek düzeyde ilişkilidir. Bu durum sosyo-ekonomik düzeyin büyük ölçüde ebeveyn eğitim düzeyiyle bağlantılı olduğunu gösterir.
FEN_OKURYAZARLIK, ANNE_EGITIMI (0.099) ve BABA_EGITIMI (0.170) ile düşük düzeyde pozitif ilişki göstermektedir. Ebeveyn eğitim düzeyi arttıkça öğrencinin fen performansı da artma eğilimindedir ancak bu ilişki belirgin düzeyde değildir.
FEN_OKURYAZARLIK ile en yüksek ilişki SOSYO_EKONOMIK_DUZEY (0.290) ile görülmektedir.
Regresyon modelinin kurulması
# Basit doğrusal regresyon
model <- lm(FEN_OKURYAZARLIK ~ SOSYO_EKONOMIK_DUZEY, data = pisa2015_tr)
summary(model)
##
## Call:
## lm(formula = FEN_OKURYAZARLIK ~ SOSYO_EKONOMIK_DUZEY, data = pisa2015_tr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -254.267 -51.435 -2.633 51.343 241.124
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 450.4508 1.5393 292.64 <2e-16 ***
## SOSYO_EKONOMIK_DUZEY 19.1735 0.8281 23.15 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 73.9 on 5857 degrees of freedom
## (36 observations deleted due to missingness)
## Multiple R-squared: 0.08385, Adjusted R-squared: 0.08369
## F-statistic: 536.1 on 1 and 5857 DF, p-value: < 2.2e-16
# regresyon katsayısının standardize hali
model_beta <- lm(scale(FEN_OKURYAZARLIK) ~ scale(SOSYO_EKONOMIK_DUZEY), data = pisa2015_tr)
summary(model_beta)
##
## Call:
## lm(formula = scale(FEN_OKURYAZARLIK) ~ scale(SOSYO_EKONOMIK_DUZEY),
## data = pisa2015_tr)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2968 -0.6669 -0.0341 0.6657 3.1264
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.003154 0.012518 0.252 0.801
## scale(SOSYO_EKONOMIK_DUZEY) 0.289848 0.012519 23.153 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9582 on 5857 degrees of freedom
## (36 observations deleted due to missingness)
## Multiple R-squared: 0.08385, Adjusted R-squared: 0.08369
## F-statistic: 536.1 on 1 and 5857 DF, p-value: < 2.2e-16
b0 <- coef(model)[1] # sabit terim
b1 <- coef(model)[2] # eğim
Model sonuçları sosyo-ekonomik düzeyin (ESCS) fen okuryazarlık puanını pozitif ve anlamlı biçimde yordadığını göstermektedir (p < .001). Elde edilen katsayılar:
b₀ = 450.45 (sabit terim)
b₁ = 19.17 (eğim katsayısı)
Bu sonuç ESCS değerindeki her bir birimlik artışın, fen okuryazarlık puanında ortalama 19 puanlık bir artışla ilişkili olduğunu göstermektedir. Modelin açıklama gücü R² = 0.084 olup ESCS’nin fen başarısındaki varyansın yaklaşık %8’ini açıkladığını göstermektedir. Bu oran düşük olmakla birlikte başarı çok boyutlu bir yapı olduğu için tek bir değişkenin başarı üzerindeki etkisinin sınırlı olması beklendiktir. Standardize edilmiş katsayı β = 0.29 olup etkinin küçük–orta düzeyde olduğunu göstermektedir. Genel olarak model, sosyo-ekonomik düzeyin fen okuryazarlığıyla anlamlı biçimde ilişkili olduğunu, düzey yükseldikçe fen performansının artma eğiliminde olduğunu göstermektedir.