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)}
v1 <- seq(1, 20, by = 3)
v2 <- rep(c(5, 9, 12), times = 7)
v3 <- rnorm(50, mean = 10, sd = 2)
sd1(v1)
## [1] 6.481
sd1(v2)
## [1] 2.938
sd1(v3)
## [1] 2.355
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ı
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)
}
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.
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
)
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)
toplam <- sinav_veri %>%
mutate(toplam = rowSums(across(starts_with("madde_"))))
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
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))
}
# 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)
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
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
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
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)
)
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
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)))
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>
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>
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)
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
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
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.