Başlarken;

Soru 1

Fonksiyonu Tanımlama

sd1 <- function(x, digits = 3, na.rm = FALSE) {
  if (!is.numeric(x)) stop("x must be numeric.")
  if (na.rm) x <- x[!is.na(x)]
  n <- length(x)
  if (n < 2) stop("at least two values required")
  xbar <- mean(x)
  ss <- sum((x - xbar)^2)
  s <- sqrt(ss / (n - 1))
  round(s, digits = digits)}

vektörleri Tanımlama

v1 <- seq(1, 20, by = 3)
v2 <- rep(c(5, 9, 12), times = 7)
v3 <- rnorm(50, mean = 10, sd = 2)

fonksiyonun Test Edilmesi

sd1(v1)
## [1] 6.481
sd1(v2)
## [1] 2.938
sd1(v3)
## [1] 2.355

Benim hesapladığım değer (sd1) ile R’ın hazır fonksiyonu (sd) aynı sonucu veriyor mu?

round(sd(v1),3)
## [1] 6.481
round(sd(v2),3)
## [1] 2.938
round(sd(v3),3)
## [1] 2.355

SONUÇ: Çıktılar tutarlı

Soru 2

Ölçüm Standart Hatası (SEM) fonksiyonu

sem_measure <- function(scores, reliability, digits = 3, na.rm = TRUE) {
  if (!is.numeric(scores)) stop("scores must be numeric.")
  if (!is.numeric(reliability) || length(reliability) != 1) {
    stop("reliability must be a single numeric value.")
  }
  if (reliability < 0 || reliability > 1) {
    stop("reliability must be between 0 and 1.")
  }
  if (na.rm) scores <- scores[!is.na(scores)]
  if (length(scores) < 2) stop("at least two scores are required.")
  
  sx  <- sd(scores, na.rm = FALSE)        
  sem <- sx * sqrt(1 - reliability)        
  round(sem, digits = digits)
}

Test verisini üretelim

Senaryo: 40 öğrencilik bir test puan dağılımı. Normal dağılımdan ort. 70, sd 10 çekerim, sınav puanına benzemesi için 0–100 aralığına kırpar ve tam sayıya yuvarlarım.

set.seed(731)                              
raw <- rnorm(40, mean = 70, sd = 10)      
scores <- pmin(pmax(round(raw), 0), 100)   
sem_measure(scores, reliability = 0.90, digits = 3)
## [1] 3.494

Testin ölçme hatası 3.5 puan civarında çıkmıştır.

Soru 3

Temel paketleri çağıralım

library(tidyverse)
library(dplyr)
library(readr)

sinav_veri <- readr::read_delim(
  "sinav_veri.csv",
  delim = ";",
  col_names = FALSE,
  trim_ws = TRUE,
  show_col_types = FALSE
)

Değişkenleri adlandırma

names(sinav_veri) <- c("duzey", "sube", "cinsiyet", paste0("madde_", 1:20))

##İlk sütuna id ekleme

sinav_veri <- sinav_veri %>%
  tibble::add_column(id = paste0("id_", seq_len(nrow(sinav_veri))), .before = 1)

20 maddeden toplam puan sütunu ekleme

toplam <- sinav_veri %>%
  mutate(toplam = rowSums(across(starts_with("madde_"))))

A ve B şubelerinde kız/erkek toplam puan ortalaması

sinav_veri %>%
  group_by(cinsiyet, sube) %>% summarise(mean_toplam = mean(toplam), groups = "drop")
## # A tibble: 4 × 4
## # Groups:   cinsiyet [2]
##   cinsiyet sube  mean_toplam groups
##   <chr>    <chr>       <dbl> <chr> 
## 1 erkek    A              NA drop  
## 2 erkek    B              NA drop  
## 3 kiz      A              NA drop  
## 4 kiz      B              NA drop

Toplam puana göre gruplandırma, sinav_order’a ekle ve grup sayılarını tek komutla hesaplama

sinav_veri <- sinav_veri %>%
  mutate(across(starts_with("madde_"), as.numeric)) %>%
  mutate(toplam = rowSums(across(starts_with("madde_"))))


sinav_order <- sinav_veri %>%
  mutate(
    grup = cut(
      toplam,
      breaks = c(-Inf, 6, 12, Inf),
      labels = c("alt", "orta", "ust"),
      right = TRUE
    )
  )

sinav_order %>% count(grup)
## # A tibble: 3 × 2
##   grup      n
##   <fct> <int>
## 1 alt      60
## 2 orta     86
## 3 ust      54

Soru 4

item adları ve toplam

library(dplyr)

item_cols <- paste0("madde_", 1:20)

if (!"toplam" %in% names(sinav_veri)) {
  sinav_veri <- sinav_veri %>%
    mutate(toplam = rowSums(across(all_of(item_cols)), na.rm = TRUE))
}

Formülle p-biserial

# Verş türlerini değiştirme

sinav_veri %>%
  mutate(
    duzey    = as.integer(duzey),
    sube     = as.character(sube),
    cinsiyet = tolower(trimws(as.character(cinsiyet)))
  ) %>%
  mutate(across(starts_with("madde_"), ~ as.integer(.x)))
## # A tibble: 200 × 25
##    id    duzey sube  cinsiyet madde_1 madde_2 madde_3 madde_4 madde_5 madde_6
##    <chr> <int> <chr> <chr>      <int>   <int>   <int>   <int>   <int>   <int>
##  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
##  7 id_7      1 B     erkek          0       0       0       0       0       1
##  8 id_8      1 B     erkek          0       1       1       1       0       1
##  9 id_9      1 B     kiz            1       0       1       1       1       1
## 10 id_10     1 B     kiz            0       1       1       0       0       0
## # ℹ 190 more rows
## # ℹ 15 more variables: madde_7 <int>, madde_8 <int>, madde_9 <int>,
## #   madde_10 <int>, madde_11 <int>, madde_12 <int>, madde_13 <int>,
## #   madde_14 <int>, madde_15 <int>, madde_16 <int>, madde_17 <int>,
## #   madde_18 <int>, madde_19 <int>, madde_20 <int>, toplam <dbl>
# toplam puan (0..20)
sinav_veri <- sinav_veri %>%
  mutate(toplam = rowSums(across(starts_with("madde_")), na.rm = TRUE))

item_cols <- paste0("madde_", 1:20)

Tüm grup için p-biserial

pbis_manual <- function(x_item, total){
  mu_plus <- mean(total[x_item == 1], na.rm = TRUE)   # maddeyi doğru yapanların ort. toplamı
  mu_all  <- mean(total, na.rm = TRUE)                # tüm grubun ort. toplamı
  sx      <- sd(total, na.rm = TRUE)                  # toplamın sd'si
  p       <- mean(x_item == 1, na.rm = TRUE)          # madde güçlüğü
  q       <- 1 - p
  if (is.na(mu_plus) || sx == 0 || p == 0 || p == 1) return(NA_real_)
  ((mu_plus - mu_all) / sx) * sqrt(p / q)
}

rj_all <- sapply(item_cols, function(cl) pbis_manual(sinav_veri[[cl]], sinav_veri$toplam))
rj_all_df <- data.frame(item = item_cols, rj_all = round(rj_all, 3), row.names = NULL)
rj_all_df
##        item rj_all
## 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

Kız ve erkek için ayrı p-biserial (formül kullanarak)

dat_kiz   <- sinav_veri %>% filter(cinsiyet == "kiz")
dat_erkek <- sinav_veri %>% filter(cinsiyet == "erkek")

rj_kiz   <- sapply(item_cols, function(cl) pbis_manual(dat_kiz[[cl]],   dat_kiz$toplam))
rj_erkek <- sapply(item_cols, function(cl) pbis_manual(dat_erkek[[cl]], dat_erkek$toplam))

rj_split_df <- data.frame(
  item     = item_cols,
  rj_all   = round(rj_all, 3),
  rj_kiz   = round(rj_kiz, 3),
  rj_erkek = round(rj_erkek, 3),
  row.names = NULL
)
rj_split_df
##        item rj_all rj_kiz rj_erkek
## 1   madde_1  0.611  0.587    0.633
## 2   madde_2  0.553  0.650    0.475
## 3   madde_3  0.333  0.272    0.396
## 4   madde_4  0.525  0.579    0.467
## 5   madde_5  0.465  0.532    0.405
## 6   madde_6  0.344  0.400    0.282
## 7   madde_7  0.542  0.591    0.488
## 8   madde_8  0.455  0.475    0.428
## 9   madde_9  0.385  0.361    0.422
## 10 madde_10  0.378  0.367    0.415
## 11 madde_11  0.588  0.700    0.443
## 12 madde_12  0.603  0.614    0.587
## 13 madde_13  0.362  0.386    0.358
## 14 madde_14  0.595  0.642    0.559
## 15 madde_15  0.351  0.417    0.254
## 16 madde_16  0.269  0.266    0.258
## 17 madde_17  0.547  0.546    0.547
## 18 madde_18  0.478  0.567    0.369
## 19 madde_19  0.430  0.401    0.463
## 20 madde_20  0.502  0.562    0.434

CTT paketiyle (düzeltilmiş p-biserial)

library(CTT)
library(dplyr)


items_all   <- sinav_veri %>% select(starts_with("madde_")) %>% as.data.frame()
dat_kiz     <- sinav_veri %>% filter(tolower(cinsiyet) == "kiz")
dat_erkek   <- sinav_veri %>% filter(tolower(cinsiyet) == "erkek")
items_kiz   <- dat_kiz   %>% select(starts_with("madde_")) %>% as.data.frame()
items_erkek <- dat_erkek %>% select(starts_with("madde_")) %>% as.data.frame()

get_ctt_pb <- function(items_df){
  n_items <- ncol(items_df)
  if (n_items == 0) return(numeric(0))
  if (nrow(items_df) == 0) return(rep(NA_real_, n_items))

  ia    <- CTT::itemAnalysis(as.data.frame(items_df))
  stats <- ia$itemStats

 
  candidates <- c("pBis","pbis","r.pb","rpbis","biserial","r.drop","rit")
  pbcol <- candidates[candidates %in% names(stats)][1]

  if (!is.null(pbcol)) {
    out <- suppressWarnings(as.numeric(stats[[pbcol]]))
    if (length(out) == n_items) return(round(out, 3))
  }

 
  tot_minus <- rowSums(items_df, na.rm = TRUE)
  out <- sapply(seq_len(n_items), function(j){
    x <- as.numeric(items_df[[j]])
    cor(x, tot_minus - x, use = "pairwise.complete.obs")
  })
  round(out, 3)
}

ctt_pb_all   <- get_ctt_pb(items_all)
ctt_pb_kiz   <- get_ctt_pb(items_kiz)
ctt_pb_erkek <- get_ctt_pb(items_erkek)

# Sütun adları
item_names <- colnames(items_all)

ctt_df <- data.frame(
  item      = item_names,
  ctt_all   = ctt_pb_all,
  ctt_kiz   = ctt_pb_kiz,
  ctt_erkek = ctt_pb_erkek,
  row.names = NULL)

ctt_df
##        item ctt_all ctt_kiz ctt_erkek
## 1   madde_1   0.535   0.516     0.557
## 2   madde_2   0.471   0.587     0.379
## 3   madde_3   0.230   0.175     0.290
## 4   madde_4   0.443   0.509     0.371
## 5   madde_5   0.376   0.458     0.301
## 6   madde_6   0.267   0.331     0.195
## 7   madde_7   0.466   0.528     0.400
## 8   madde_8   0.363   0.396     0.325
## 9   madde_9   0.295   0.278     0.326
## 10 madde_10   0.278   0.274     0.312
## 11 madde_11   0.511   0.644     0.348
## 12 madde_12   0.527   0.548     0.504
## 13 madde_13   0.264   0.295     0.257
## 14 madde_14   0.518   0.578     0.472
## 15 madde_15   0.252   0.328     0.148
## 16 madde_16   0.170   0.170     0.158
## 17 madde_17   0.465   0.469     0.465
## 18 madde_18   0.394   0.497     0.270
## 19 madde_19   0.340   0.315     0.371
## 20 madde_20   0.415   0.489     0.333

Soru 5

Veri setini okuma ve kitapçık eşlemesini tanımlama

library(readxl)
library(dplyr)
#BAŞTA OLDU SONRA KODLAR KARIŞTI HOCAM BİTİREMEDİM

formab <- read_excel("FORMAB.xlsx")

# A ve B kitapçığı madde eşlemesi 
esleme <- data.frame(
  A = 1:11,
  B = c(2,3,1,5,6,7,8,4,9,11,10)
)

B kitapçığı cevaplarını A düzenine dönüştürme

library(readxl)
library(dplyr)
library(tidyr)

formab <- read_excel("FORMAB.xlsx", skip = 2)

esleme <- data.frame(
  A = 1:11,
  B = c(2,3,1,5,6,7,8,4,9,11,10))

# A-B Formatlarını düzenleme

formB <- formab %>% filter(kitapcik == "B")

madde_adlari <- paste0("m", 1:11)
formB_Aduzen <- formB %>%
  select(id, kitapcik, all_of(paste0("m", esleme$B))) %>%
  rename_with(~ paste0("m", 1:11), starts_with("m"))


formA <- formab %>% filter(kitapcik == "A")

formAB_duzen <- bind_rows(formA, formB_Aduzen)


anahtar <- c("C","B","D","B","A","E","E","D","A","E","E")  

formAB_puan <- formAB_duzen %>%
  mutate(across(starts_with("m"),
                ~ ifelse(.x == anahtar[as.numeric(gsub("m","",cur_column()))], 1, 0)))

#Kayıt

write.csv(formAB_puan, "FORMAB-10.csv", row.names = FALSE)

# her bir maddenin doğru cevaplanma oranının madde güçlüğü

madde_guclukleri <- formAB_puan %>%
  summarise(across(starts_with("m"), ~ mean(.x, na.rm = TRUE))) %>%
  pivot_longer(everything(), names_to = "madde", values_to = "dogru_orani")

madde_guclukleri
## # A tibble: 11 × 2
##    madde dogru_orani
##    <chr>       <dbl>
##  1 m1         0     
##  2 m2         0     
##  3 m3         0     
##  4 m4         0     
##  5 m5         0.0882
##  6 m6         0.941 
##  7 m7         0.138 
##  8 m8         0     
##  9 m9         1     
## 10 m10        0.333 
## 11 m11        0.970

Soru 6

PISA 2015 (ST001D01T:ST129Q08TA + PV1SCIE)

library(dplyr)
library(readr)
library(stringr)
library(ggplot2)

pisa <- read_csv("pisa2015.csv", show_col_types = FALSE)


pisa_sel <- pisa %>%
  select(ST001D01T:ST129Q08TA, PV1SCIE)

likert_labs <- c("Kesinlikle katilmiyorum","Katilmiyorum","Katiliyorum","Kesinlikle katiliyorum")
pisa_sel <- pisa_sel %>%
  mutate(across(starts_with("ST094"),
                ~ factor(.x, levels = 1:4, labels = likert_labs)))

Oluşturduğunuz nesnedeki değişkenleri Türkçe değişken isimleri ile değiştirme

 pisa_sel %>%
  rename(
    CINSIYET = ST004D01T, 
    STRATUM = STRATUM,     
    FEN_OKURYAZARLIK = PV1SCIE,
    SOSYO_EKONOMIK_DUZEY = ESCS,
    ANNE_EGITIMI = MISCED,
    BABA_EGITIMI = FISCED)
## # A tibble: 5,895 × 24
##    ST001D01T CINSIYET STRATUM ANNE_EGITIMI BABA_EGITIMI IMMIG LANGN
##        <dbl>    <dbl> <chr>          <dbl>        <dbl> <dbl> <dbl>
##  1         9        1 TUR0235            0            4     1   344
##  2         9        1 TUR0235            0            2     1   857
##  3         9        1 TUR0235            4            4     1   857
##  4         9        1 TUR0235            6            5     1   344
##  5         9        1 TUR0235            0            1     1   857
##  6         9        1 TUR0235            1            5     1   344
##  7         9        1 TUR0235            0            2     1   344
##  8         9        1 TUR0235            0            1     1   857
##  9        10        1 TUR0235            1            1     1   857
## 10        10        1 TUR0235            2            1     1   857
## # ℹ 5,885 more rows
## # ℹ 17 more variables: SOSYO_EKONOMIK_DUZEY <dbl>, JOYSCIE <dbl>,
## #   SCIEEFF <dbl>, ST094Q01NA <fct>, ST094Q02NA <fct>, ST094Q03NA <fct>,
## #   ST094Q04NA <fct>, ST094Q05NA <fct>, ST129Q01TA <dbl>, ST129Q02TA <dbl>,
## #   ST129Q03TA <dbl>, ST129Q04TA <dbl>, ST129Q05TA <dbl>, ST129Q06TA <dbl>,
## #   ST129Q07TA <dbl>, ST129Q08TA <dbl>, FEN_OKURYAZARLIK <dbl>

STRATUM → 12 kategorili BOLGE2

pisa_selbolge <- pisa_sel %>%
  mutate(BOLGE2 = substr(STRATUM, 1, 3))


bolge_map <- c(
  TR1="ISTANBUL", TR2="BATI_MARMARA", TR3="EGE", TR4="DOGU_MARMARA",
  TR5="BATI_ANADOLU", TR6="AKDENIZ", TR7="ORTA_ANADOLU", TR8="BATI_KARADENIZ",
  TR9="DOGU_KARADENIZ", TRA="KUZEYDOGU_ANADOLU", TRB="ORTADOGU_ANADOLU", TRC="GUNEYDOGU_ANADOLU"
)

pisa_selbolge %>%
  mutate(BOLGE2 = dplyr::recode(BOLGE2, !!!bolge_map))
## # A tibble: 5,895 × 25
##    ST001D01T ST004D01T STRATUM MISCED FISCED IMMIG LANGN   ESCS JOYSCIE SCIEEFF
##        <dbl>     <dbl> <chr>    <dbl>  <dbl> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
##  1         9         1 TUR0235      0      4     1   344 -1.79   -2.12    1.85 
##  2         9         1 TUR0235      0      2     1   857 -1.83    2.16   -0.215
##  3         9         1 TUR0235      4      4     1   857 -1.20    0.893   0.556
##  4         9         1 TUR0235      6      5     1   344 -0.907   0.125   0.504
##  5         9         1 TUR0235      0      1     1   857 -4.11    2.16    0.109
##  6         9         1 TUR0235      1      5     1   344 -1.06   -0.309  -1.43 
##  7         9         1 TUR0235      0      2     1   344 -2.72    0.509   0.316
##  8         9         1 TUR0235      0      1     1   857 -2.70    0.509   0.344
##  9        10         1 TUR0235      1      1     1   857 -2.74   -0.405  -0.895
## 10        10         1 TUR0235      2      1     1   857 -1.90    0.509   0.501
## # ℹ 5,885 more rows
## # ℹ 15 more variables: ST094Q01NA <fct>, ST094Q02NA <fct>, ST094Q03NA <fct>,
## #   ST094Q04NA <fct>, ST094Q05NA <fct>, ST129Q01TA <dbl>, ST129Q02TA <dbl>,
## #   ST129Q03TA <dbl>, ST129Q04TA <dbl>, ST129Q05TA <dbl>, ST129Q06TA <dbl>,
## #   ST129Q07TA <dbl>, ST129Q08TA <dbl>, PV1SCIE <dbl>, BOLGE2 <chr>

CINSIYET’e gore PV1SCIE boxplot (+ ortalama nokta)

library(ggplot2)

CINSIYET <- pisa_sel$ST004D01T
FEN_OKURYAZARLIK <- pisa_sel$PV1SCIE 


g1 <- ggplot(pisa_sel, aes(x = CINSIYET, y = FEN_OKURYAZARLIK)) +
  geom_boxplot(outlier.alpha = 0.3) +
  stat_summary(fun = mean, geom = "point", size = 3) +
  labs(x = "CINSIYET", y = "FEN_OKURYAZARLIK (PV1SCIE)",
       title = "Fen okuryazarlik puani dagilimi (CINSIYET)") +
  theme_minimal()

print(g1)

BOLGE2’ye gore ortalama PV1SCIE bar plot (buyukten kucuge)

library(dplyr)



avg_bolge <- pisa_selbolge %>%
  group_by(BOLGE2) %>%
  summarise(mean_sc = mean(FEN_OKURYAZARLIK, na.rm = TRUE), .groups="drop") %>%
  arrange(desc(mean_sc))

g2 <- ggplot(avg_bolge, aes(x = reorder(BOLGE2, mean_sc), y = mean_sc)) +
  geom_col() +
  coord_flip() +
  labs(x = "BOLGE2", y = "Ortalama PV1SCIE",
       title = "Bolgelere gore ortalama fen okuryazarlik (PV1SCIE)") +
  theme_minimal()

print(g2)

##(f) Korelasyonlar: PV1SCIE ~ ESCS, MISCED, FISCED

pisa_sel %>% rename(
    CINSIYET = ST004D01T, 
    STRATUM = STRATUM,     
    FEN_OKURYAZARLIK = PV1SCIE,
    SOSYO_EKONOMIK_DUZEY = ESCS,
    ANNE_EGITIMI = MISCED,
    BABA_EGITIMI = FISCED)
## # A tibble: 5,895 × 24
##    ST001D01T CINSIYET STRATUM ANNE_EGITIMI BABA_EGITIMI IMMIG LANGN
##        <dbl>    <dbl> <chr>          <dbl>        <dbl> <dbl> <dbl>
##  1         9        1 TUR0235            0            4     1   344
##  2         9        1 TUR0235            0            2     1   857
##  3         9        1 TUR0235            4            4     1   857
##  4         9        1 TUR0235            6            5     1   344
##  5         9        1 TUR0235            0            1     1   857
##  6         9        1 TUR0235            1            5     1   344
##  7         9        1 TUR0235            0            2     1   344
##  8         9        1 TUR0235            0            1     1   857
##  9        10        1 TUR0235            1            1     1   857
## 10        10        1 TUR0235            2            1     1   857
## # ℹ 5,885 more rows
## # ℹ 17 more variables: SOSYO_EKONOMIK_DUZEY <dbl>, JOYSCIE <dbl>,
## #   SCIEEFF <dbl>, ST094Q01NA <fct>, ST094Q02NA <fct>, ST094Q03NA <fct>,
## #   ST094Q04NA <fct>, ST094Q05NA <fct>, ST129Q01TA <dbl>, ST129Q02TA <dbl>,
## #   ST129Q03TA <dbl>, ST129Q04TA <dbl>, ST129Q05TA <dbl>, ST129Q06TA <dbl>,
## #   ST129Q07TA <dbl>, ST129Q08TA <dbl>, FEN_OKURYAZARLIK <dbl>
SOSYO_EKONOMIK_DUZEY <- pisa_sel$ESCS


pisa_sel %>%
  mutate(FEN_OKURYAZARLIK = as.numeric(FEN_OKURYAZARLIK))
## # A tibble: 5,895 × 25
##    ST001D01T ST004D01T STRATUM MISCED FISCED IMMIG LANGN   ESCS JOYSCIE SCIEEFF
##        <dbl>     <dbl> <chr>    <dbl>  <dbl> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
##  1         9         1 TUR0235      0      4     1   344 -1.79   -2.12    1.85 
##  2         9         1 TUR0235      0      2     1   857 -1.83    2.16   -0.215
##  3         9         1 TUR0235      4      4     1   857 -1.20    0.893   0.556
##  4         9         1 TUR0235      6      5     1   344 -0.907   0.125   0.504
##  5         9         1 TUR0235      0      1     1   857 -4.11    2.16    0.109
##  6         9         1 TUR0235      1      5     1   344 -1.06   -0.309  -1.43 
##  7         9         1 TUR0235      0      2     1   344 -2.72    0.509   0.316
##  8         9         1 TUR0235      0      1     1   857 -2.70    0.509   0.344
##  9        10         1 TUR0235      1      1     1   857 -2.74   -0.405  -0.895
## 10        10         1 TUR0235      2      1     1   857 -1.90    0.509   0.501
## # ℹ 5,885 more rows
## # ℹ 15 more variables: ST094Q01NA <fct>, ST094Q02NA <fct>, ST094Q03NA <fct>,
## #   ST094Q04NA <fct>, ST094Q05NA <fct>, ST129Q01TA <dbl>, ST129Q02TA <dbl>,
## #   ST129Q03TA <dbl>, ST129Q04TA <dbl>, ST129Q05TA <dbl>, ST129Q06TA <dbl>,
## #   ST129Q07TA <dbl>, ST129Q08TA <dbl>, PV1SCIE <dbl>, FEN_OKURYAZARLIK <dbl>
pisa_sel %>%
  mutate(SOSYO_EKONOMIK_DUZEY = as.numeric(SOSYO_EKONOMIK_DUZEY))
## # A tibble: 5,895 × 25
##    ST001D01T ST004D01T STRATUM MISCED FISCED IMMIG LANGN   ESCS JOYSCIE SCIEEFF
##        <dbl>     <dbl> <chr>    <dbl>  <dbl> <dbl> <dbl>  <dbl>   <dbl>   <dbl>
##  1         9         1 TUR0235      0      4     1   344 -1.79   -2.12    1.85 
##  2         9         1 TUR0235      0      2     1   857 -1.83    2.16   -0.215
##  3         9         1 TUR0235      4      4     1   857 -1.20    0.893   0.556
##  4         9         1 TUR0235      6      5     1   344 -0.907   0.125   0.504
##  5         9         1 TUR0235      0      1     1   857 -4.11    2.16    0.109
##  6         9         1 TUR0235      1      5     1   344 -1.06   -0.309  -1.43 
##  7         9         1 TUR0235      0      2     1   344 -2.72    0.509   0.316
##  8         9         1 TUR0235      0      1     1   857 -2.70    0.509   0.344
##  9        10         1 TUR0235      1      1     1   857 -2.74   -0.405  -0.895
## 10        10         1 TUR0235      2      1     1   857 -1.90    0.509   0.501
## # ℹ 5,885 more rows
## # ℹ 15 more variables: ST094Q01NA <fct>, ST094Q02NA <fct>, ST094Q03NA <fct>,
## #   ST094Q04NA <fct>, ST094Q05NA <fct>, ST129Q01TA <dbl>, ST129Q02TA <dbl>,
## #   ST129Q03TA <dbl>, ST129Q04TA <dbl>, ST129Q05TA <dbl>, ST129Q06TA <dbl>,
## #   ST129Q07TA <dbl>, ST129Q08TA <dbl>, PV1SCIE <dbl>,
## #   SOSYO_EKONOMIK_DUZEY <dbl>
#YAPAMADIM

Basit dogrusal regresyon: PV1SCIE ~ ESCS (ozet ve denklem)

m <- lm(FEN_OKURYAZARLIK ~ SOSYO_EKONOMIK_DUZEY, data = pisa_sel)
summary(m)
## 
## Call:
## lm(formula = FEN_OKURYAZARLIK ~ SOSYO_EKONOMIK_DUZEY, data = pisa_sel)
## 
## 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 denklemi (y = a + b*x) seklinde yazdir
co <- coef(m)
a  <- round(co[1], 3)
b  <- round(co[2], 3)
cat("Denklem: FEN_OKURYAZARLIK = ", a, " + ", b, " * SOSYO_EKONOMIK_DUZEY\n", sep = "")
## Denklem: FEN_OKURYAZARLIK = 450.451 + 19.173 * SOSYO_EKONOMIK_DUZEY

Modelin Yorumu

3️⃣ Eğimin yorumu (19.173)

SOSYO_EKONOMIK_DUZEY katsayısı = 19.173

Sosyo-ekonomik düzey 1 birim arttığında, öğrencinin fen okuryazarlığı puanı ortalama yaklaşık 19.17 puan artmaktadır (diğer her şey sabitken).

Yani pozitif ve anlamlı bir ilişki var: p < .0001 SES yükseldikçe fen puanı da yükseliyor.