ARA SINAV

1. Soru

  1. Standart sapma R’da 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 (fonksiyonunu kullanmayınız).
sd1 <- function(x) {
  ort = mean(x)
  n = length(x)
  sqrt(sum((x-ort)^2)/(n-1))
}

ornek_1 <- c(6, 12, 18, 20, 24)
ornek_2 <- rnorm(10)
ornek_3 <- seq(1, 10, length.out = 5)
sd1(ornek_1)
## [1] 7.071068
sd1(ornek_2)
## [1] 0.7606357
sd1(ornek_3)
## [1] 3.557562
  1. Oluşturduğunuz fonksiyonuna 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.
sd1 <- function(x, yuvarla=3) {
  ort = mean(x)
  n = length(x)
  std = sqrt(sum((x-ort)^2)/(n-1))
  round(std, yuvarla)
}

sd1(ornek_1)
## [1] 7.071
sd1(ornek_2, 2)
## [1] 0.76
sd1(ornek_3, 4)
## [1] 3.5576
  1. 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.
cat("Ornek 1: SD1 = ", sd1(ornek_1), " : ")
## Ornek 1: SD1 =  7.071  :
cat("SD = ", round(sd(ornek_1),3))
## SD =  7.071
cat("\nOrnek 2: SD1 = ", sd1(ornek_2), " : ")
## 
## Ornek 2: SD1 =  0.761  :
cat("SD = ", round(sd(ornek_2), 2))
## SD =  0.76
cat("\nOrnek 3: SD1 = ", sd1(ornek_3, 4), " : ")
## 
## Ornek 3: SD1 =  3.5576  :
cat("SD = ", round(sd(ornek_3), 2))
## SD =  3.56

2. Soru

10 Puan

  1. Ö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.
std_hata <- function(x, rxx) {
  round(sd1(x)*sqrt(1-rxx), 3)
}
  1. 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.
test_puanlari <- rnorm(20, 65, 12.5)
cat("Standard Hata = ", std_hata(test_puanlari, 0.9))
## Standard Hata =  4.898

3. Soru

15 Puan

  1. 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. sinav_veri nesnesinin değişkenlerini duzey, sube, cinsiyet ve  madde_1’den madde_20’ye kadar isimlendiriniz.
df <- read_delim("sinav_veri.csv", 
    delim = ";", escape_double = FALSE, trim_ws = TRUE)
## New names:
## Rows: 199 Columns: 23
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: ";" chr
## (2): A, kiz dbl (21): 1...1, 0...4, 0...5, 0...6, 0...7, 0...8, 0...9, 0...10,
## 0...11, 0...
## ℹ 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` -> `1...1`
## • `0` -> `0...4`
## • `0` -> `0...5`
## • `0` -> `0...6`
## • `0` -> `0...7`
## • `0` -> `0...8`
## • `0` -> `0...9`
## • `0` -> `0...10`
## • `0` -> `0...11`
## • `0` -> `0...12`
## • `0` -> `0...13`
## • `0` -> `0...14`
## • `0` -> `0...15`
## • `0` -> `0...16`
## • `0` -> `0...17`
## • `0` -> `0...18`
## • `0` -> `0...19`
## • `0` -> `0...20`
## • `0` -> `0...21`
## • `1` -> `1...22`
## • `0` -> `0...23`
colSums(is.na(df))
##  1...1      A    kiz  0...4  0...5  0...6  0...7  0...8  0...9 0...10 0...11 
##      0      0      0      0      0      0      0      0      0      0      0 
## 0...12 0...13 0...14 0...15 0...16 0...17 0...18 0...19 0...20 0...21 1...22 
##      0      0      0      0      0      0      0      0      0      0      0 
## 0...23 
##      0
colnames(df)
##  [1] "1...1"  "A"      "kiz"    "0...4"  "0...5"  "0...6"  "0...7"  "0...8" 
##  [9] "0...9"  "0...10" "0...11" "0...12" "0...13" "0...14" "0...15" "0...16"
## [17] "0...17" "0...18" "0...19" "0...20" "0...21" "1...22" "0...23"
df <- df %>%
  rename(
    duzey = `1...1`, 
    sube = A,
    cinsiyet = kiz
  ) %>%
rename_with(~ paste0("madde_", seq_along(.x)), .cols = 4:ncol(df))
colnames(df)
##  [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"
  1. sinav_veri nesnesinin ilk sütununa id isimde bir değişken ekleyip değerlerini id_1’den id_200’e kadar oluşturunuz.
df1 <- df %>%
  mutate(
    id = paste0("id_", row_number())
  )%>%
  relocate(id, .before = 1)
  1. Her bir birey için 20 maddeden toplam puan alarak “toplam” değişkeni veri setine sütun olarak ekleyiniz.
df1 <- df1 %>%
  rowwise() %>%
  mutate(toplam = sum(c_across(5:24)))
  1. A ve B şubelerindeki kız ve erkek öğrencilerin toplam puanlarının ortalamalarını tek bir komutla hesaplayınız.
unique(df1$sube)
## [1] "A" "B"
puan_ozet <- df1 %>%
  group_by(sube, cinsiyet) %>%
  summarise(
    puan_ortalamalari = mean(toplam),
   .groups = "drop"
  )

puan_ozet
## # A tibble: 4 × 3
##   sube  cinsiyet puan_ortalamalari
##   <chr> <chr>                <dbl>
## 1 A     erkek                 8.52
## 2 A     kiz                   8.80
## 3 B     erkek                 9.84
## 4 B     kiz                  10.9
  1. Öğrencileri toplam puana göre

    0 ile 6 arasını alt grup, 

    7 ile 12 arasını orta grup,

    13 ile 20 arasını ise ust grup olacak

    şekilde gruplandırınız. Gruplama değişkeninize grup adını verip “sinav_order” nesnesine yeni bir sütun olarak ekleyiniz. Alt, orta ve ust grupta kaçar öğrenci yer almaktadır. Tek bir komutla hesaplayınız.

df1 <- df1 %>%
  mutate(grup = if_else(toplam < 7, "alt", ifelse(toplam < 13, "orta", "ust")))

sinav_order <- df1 %>%
  group_by(grup) %>%
  summarise(
    ogr_sayi = n(),
   .groups = "drop"
  )

sinav_order
## # A tibble: 3 × 2
##   grup  ogr_sayi
##   <chr>    <int>
## 1 alt         59
## 2 orta        86
## 3 ust         54

4. Soru

15 Puan

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ı ( ) aşağıdaki formül aracılığıyla hesaplanabilir:

  1. Tüm grup üzerinden madde ayırt edicilik indeksini (rj) verilen formüle göre hesaplayınız.
rj <- numeric(20)

ayirt_idx <- function(rj, df){
  for (j in 1:20) {
    
    item <- df[[j+4]]   
    X <- df$toplam   
    
    mu_plus <- mean(X[item == 1])
    mu_X <- mean(X)
    sigma_X <- sd(X)
    
    p_j <- mean(item==1)
    q_j <- 1 - p_j
    
    rj[j] <- ((mu_plus - mu_X) / sigma_X) * sqrt(p_j / q_j)
  }
  rj
}

ayirt_idx(rj, df1)
##  [1] 0.6086214 0.5499273 0.3260259 0.5237670 0.4626285 0.3308481 0.5354088
##  [8] 0.4499519 0.3828833 0.3720028 0.5861155 0.5991665 0.3546041 0.5920853
## [15] 0.3469635 0.2654915 0.5450052 0.4768227 0.4497346 0.4991788
  1. Kız ve erkek öğrenciler için madde ayırt edicilik indeksini (rj) verilen formüle göre hesaplayınız.
df_kiz <- df1 %>%
  filter(cinsiyet == "kiz")
df_erkek <- df1 %>%
  filter(cinsiyet == "erkek")
rj <- numeric(20)
cat("Kiz ogrenciler icin ayirt edicilik indeksleri:\n", ayirt_idx(rj, df_kiz))
## Kiz ogrenciler icin ayirt edicilik indeksleri:
##  0.5810854 0.6464826 0.2566686 0.5763143 0.5290629 0.3754478 0.5783361 0.4618652 0.3563437 0.3573436 0.6971955 0.6055387 0.3737377 0.6377886 0.4083681 0.2572383 0.5386172 0.5647909 0.4378722 0.5585959
cat("\nErkek ogrenciler icin ayirt edicilik indeksleri:\n", ayirt_idx(rj, df_erkek))
## 
## Erkek ogrenciler icin ayirt edicilik indeksleri:
##  0.6328106 0.4750751 0.3960679 0.4665142 0.4046936 0.2819558 0.4880214 0.4282748 0.4221388 0.4150818 0.4426708 0.587464 0.3580788 0.5591645 0.2539383 0.2583115 0.5465421 0.3688898 0.4632029 0.4340192
  1. İlk iki seçenekte yaptığınız işlemler CTT paketinin ilgili fonksiyonlarını kullanarak hesaplayınız.

NOT : CTT paketi düzeltilmiş nokta çift-serili korelasyon katsayısı hesapladığı için sonuçlar aynı çıkmayacaktır.

##tum grup icin madde ayirt edicilik indeksi hesaplama
sinav_order <- na.omit(df1[, 5:24])

sinav_order <- as.data.frame(lapply(sinav_order, function(x) as.numeric(factor(x))))
results <- itemAnalysis(sinav_order)
results$itemReport
##    itemName itemMean      pBis       bis alphaIfDeleted
## 1   madde_1 1.472362 0.5325005 0.6679736      0.7926395
## 2   madde_2 1.532663 0.4662085 0.5850195      0.7965260
## 3   madde_3 1.552764 0.2223960 0.2796250      0.8102930
## 4   madde_4 1.361809 0.4404748 0.5647819      0.7981402
## 5   madde_5 1.371859 0.3725305 0.4760794      0.8018938
## 6   madde_6 1.824121 0.2527882 0.3721675      0.8074690
## 7   madde_7 1.713568 0.4587350 0.6094167      0.7974399
## 8   madde_8 1.572864 0.3563574 0.4493761      0.8028188
## 9   madde_9 1.301508 0.2912730 0.3835769      0.8061256
## 10 madde_10 1.522613 0.2709413 0.3397731      0.8076442
## 11 madde_11 1.402010 0.5085188 0.6445160      0.7941789
## 12 madde_12 1.582915 0.5228126 0.6604933      0.7933087
## 13 madde_13 1.623116 0.2555410 0.3260651      0.8082837
## 14 madde_14 1.522613 0.5136604 0.6441543      0.7937453
## 15 madde_15 1.381910 0.2471269 0.3148623      0.8087556
## 16 madde_16 1.321608 0.1653721 0.2155496      0.8127010
## 17 madde_17 1.412060 0.4619459 0.5841894      0.7968317
## 18 madde_18 1.321608 0.3913177 0.5100520      0.8008936
## 19 madde_19 1.326633 0.3613564 0.4698978      0.8024920
## 20 madde_20 1.402010 0.4113426 0.5213512      0.7997198
sinav_order <- as.data.frame(lapply(df_kiz[, 5:24], function(x) as.numeric(factor(x))))
results <- itemAnalysis(sinav_order)
results$itemReport
##    itemName itemMean      pBis       bis alphaIfDeleted
## 1   madde_1 1.525253 0.5079534 0.6370895      0.8245147
## 2   madde_2 1.464646 0.5823557 0.7309197      0.8208584
## 3   madde_3 1.585859 0.1574412 0.1990193      0.8408772
## 4   madde_4 1.363636 0.5056330 0.6479231      0.8247827
## 5   madde_5 1.343434 0.4540209 0.5861548      0.8272252
## 6   madde_6 1.828283 0.3061134 0.4532869      0.8334166
## 7   madde_7 1.727273 0.5137805 0.6885776      0.8248177
## 8   madde_8 1.666667 0.3807781 0.4936761      0.8305583
## 9   madde_9 1.282828 0.2712500 0.3611538      0.8351890
## 10 madde_10 1.464646 0.2625281 0.3295013      0.8362052
## 11 madde_11 1.484848 0.6406746 0.8031772      0.8179275
## 12 madde_12 1.626263 0.5380853 0.6872475      0.8232173
## 13 madde_13 1.565657 0.2807040 0.3535630      0.8353177
## 14 madde_14 1.484848 0.5722536 0.7174016      0.8213441
## 15 madde_15 1.464646 0.3173880 0.3983564      0.8336445
## 16 madde_16 1.383838 0.1593511 0.2029163      0.8406418
## 17 madde_17 1.525253 0.4603319 0.5773613      0.8268317
## 18 madde_18 1.343434 0.4937708 0.6374731      0.8253918
## 19 madde_19 1.333333 0.3546766 0.4598357      0.8317286
## 20 madde_20 1.404040 0.4841544 0.6133476      0.8257261
sinav_order <- as.data.frame(lapply(df_erkek[, 5:24], function(x) as.numeric(factor(x))))
results <- itemAnalysis(sinav_order)
results$itemReport
##    itemName itemMean      pBis       bis alphaIfDeleted
## 1   madde_1     1.42 0.5567584 0.7029857      0.7553444
## 2   madde_2     1.60 0.3787481 0.4802679      0.7678543
## 3   madde_3     1.52 0.2898619 0.3634541      0.7739481
## 4   madde_4     1.36 0.3714313 0.4765533      0.7683841
## 5   madde_5     1.40 0.3014638 0.3822683      0.7730814
## 6   madde_6     1.82 0.1952509 0.2858725      0.7784454
## 7   madde_7     1.70 0.3998831 0.5270444      0.7666735
## 8   madde_8     1.48 0.3250119 0.4075282      0.7715420
## 9   madde_9     1.32 0.3257611 0.4249305      0.7713891
## 10 madde_10     1.58 0.3119495 0.3938800      0.7723994
## 11 madde_11     1.32 0.3481865 0.4541827      0.7699466
## 12 madde_12     1.54 0.5036155 0.6323466      0.7590273
## 13 madde_13     1.68 0.2565274 0.3346204      0.7757973
## 14 madde_14     1.56 0.4717331 0.5936846      0.7613315
## 15 madde_15     1.30 0.1482463 0.1953880      0.7823553
## 16 madde_16     1.26 0.1575338 0.2130306      0.7813627
## 17 madde_17     1.30 0.4650926 0.6129903      0.7624676
## 18 madde_18     1.30 0.2700372 0.3559080      0.7748730
## 19 madde_19     1.32 0.3707283 0.4835867      0.7684895
## 20 madde_20     1.40 0.3334901 0.4228789      0.7709267

5.Soru

25 Puan

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.

  1. 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.
form_ab <- read_excel("FORMAB.xlsx")

esleme <- data.frame(
  A = 1:11,
  B = c(2,3,1,5,6,7,8,4,9,11,10)
)
esleme
##     A  B
## 1   1  2
## 2   2  3
## 3   3  1
## 4   4  5
## 5   5  6
## 6   6  7
## 7   7  8
## 8   8  4
## 9   9  9
## 10 10 11
## 11 11 10
# Sadece madde kolonlarını seç
maddeler <- paste0("m",1:11)

form_A <- form_ab %>% 
  filter(kitapcik == "A")

form_B <- form_ab %>% 
  filter(kitapcik == "B")

form_B <- form_ab %>% 
  filter(kitapcik == "B") %>%
  mutate(across(all_of(maddeler), as.character)) %>%  
  transmute(
    id,
    kitapcik = "A",
    setNames(form_B[paste0("m", esleme$B)], paste0("m", esleme$A))
  )

form_son <- bind_rows(form_A, form_B)
  1. Bireylerin puanlarını A kitapçığının cevap anahtarını kullanarak 1-0 dönüştürünüz.  FORMAB-10 adı ile “.csv” uzantılı olacak şekilde kaydediniz. (CTT ve ya dplyr paket fonksiyonlarını kullanabilirsiniz. )
cevap_anahtari <- c(m1 = "B", m2 = "D", m3= "C", m4= "A", m5= "E",
                    m6= "E", m7= "D", m8="B", m9="A", m10="E", m11= "E")

maddeler <- names(cevap_anahtari)   # m1:m11

form_son <- form_son %>%
  mutate(across(all_of(maddeler),
                ~ ifelse(.x == cevap_anahtari[cur_column()], 1, 0)))

write.csv(form_son, "FORMAB-10.csv")
  1. Son olarak her bir maddenin doğru cevaplanma oranını/madde güçlüğünü hesaplayınız. (34 kişi üzerinden)
madde_guclugu <- form_son %>%
  summarise(across(m1:m11, ~ mean(.x, na.rm = TRUE))) %>%
  pivot_longer(everything(), names_to = "madde", values_to = "gucluk")

madde_guclugu
## # A tibble: 11 × 2
##    madde gucluk
##    <chr>  <dbl>
##  1 m1     0.909
##  2 m2     1    
##  3 m3     1    
##  4 m4     0.941
##  5 m5     0.676
##  6 m6     0.941
##  7 m7     0.517
##  8 m8     1    
##  9 m9     1    
## 10 m10    0.333
## 11 m11    0.970

6.Soru

25 Puan

  1. pisa2015.csv dosyasını okuyunuz (1.1). 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 (1.2) oluşturunuz.
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`
pisa2015_yeni <- pisa2015 %>%
      select(ST001D01T:ST129Q08TA, PV1SCIE)

head(pisa2015_yeni)
## # A tibble: 6 × 24
##   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 
## # ℹ 14 more variables: ST094Q01NA <dbl>, ST094Q02NA <dbl>, ST094Q03NA <dbl>,
## #   ST094Q04NA <dbl>, ST094Q05NA <dbl>, ST129Q01TA <dbl>, ST129Q02TA <dbl>,
## #   ST129Q03TA <dbl>, ST129Q04TA <dbl>, ST129Q05TA <dbl>, ST129Q06TA <dbl>,
## #   ST129Q07TA <dbl>, ST129Q08TA <dbl>, PV1SCIE <dbl>
  1. Oluşturduğunuz nesnede ST094 ile başlayan maddelerin türünü numeric’ten factor’e dönüştürünüz (2.1). Faktör düzeylerini 1-4’den “Kesinlikle katılmıyorum”, “Katılmıyorum”, “Katılıyorum”, ”Kesinlikle katılıyorum” olacak şekilde yeniden isimlendiriniz (2.2).
pisa2015_yeni <- pisa2015_yeni %>%
      mutate(across(starts_with("ST094"),
                    ~factor(., levels = 1:4,
                            labels = c("1_Kesinlikle katılmıyorum",
                                       "2_Katılmıyorum",
                                       "3_Katılıyorum",
                                       "4_Kesinlikle katılıyorum"))))

str(pisa2015_yeni %>%
          select(starts_with("ST094")))
## tibble [5,895 × 5] (S3: tbl_df/tbl/data.frame)
##  $ ST094Q01NA: Factor w/ 4 levels "1_Kesinlikle katılmıyorum",..: 1 4 3 2 4 2 3 3 2 3 ...
##  $ ST094Q02NA: Factor w/ 4 levels "1_Kesinlikle katılmıyorum",..: 1 4 3 3 4 3 3 3 2 3 ...
##  $ ST094Q03NA: Factor w/ 4 levels "1_Kesinlikle katılmıyorum",..: 1 4 3 3 4 1 3 3 3 3 ...
##  $ ST094Q04NA: Factor w/ 4 levels "1_Kesinlikle katılmıyorum",..: 1 4 3 3 4 2 3 3 2 3 ...
##  $ ST094Q05NA: Factor w/ 4 levels "1_Kesinlikle katılmıyorum",..: 1 4 4 3 4 4 3 3 3 3 ...
  1. Oluşturduğunuz nesnedeki değişkenleri Türkçe değişken isimleri ile değiştiriniz (3.1). (dplyr paketi rename ve varyasyonlarını kullanınız.) Tüm değişken isimlerini büyük harflerden oluşturunuz. Değişken adları aşağıda yer alan tabloda bulunmaktadır.
pisa2015_yeni <- pisa2015_yeni %>% 
  rename(FEN_OKURYAZARLIK=PV1SCIE, 
                            SINIF_DUZEYI=ST001D01T,
                            CINSIYET=ST004D01T, 
                            ISTATISTIKI_BOLGE_BIRIMLERI=STRATUM, 
                            ANNE_EGITIM_DUZEYI=MISCED, 
                            BABA_EGITIM_DUZEYI=FISCED, 
                            GOCMENLIK_STATUSU=IMMIG,
                            EVDE_KONUSULAN_DIL=LANGN, 
                            SOSYO_EKONOMIK_DUZEY=ESCS,
                            FEN_ZEVK_SEV_1=ST094Q01NA,
                            FEN_ZEVK_SEV_2=ST094Q02NA,
                            FEN_ZEVK_SEV_3=ST094Q03NA,
                            FEN_ZEVK_SEV_4=ST094Q04NA,
                            FEN_ZEVK_SEV_5=ST094Q05NA,
                            FEN_OZYETER_1=ST129Q01TA,
                            FEN_OZYETER_2=ST129Q02TA,
                            FEN_OZYETER_3=ST129Q03TA,
                            FEN_OZYETER_4=ST129Q04TA,
                            FEN_OZYETER_5=ST129Q05TA,
                            FEN_OZYETER_6=ST129Q06TA,
                            FEN_OZYETER_7=ST129Q07TA,
                            FEN_OZYETER_8=ST129Q08TA,
                            FEN_ZEVK_OLCU=JOYSCIE,
                            FEN_OZYETER_OLCU=SCIEEFF)
  1. STRATUM BOLGE değişkenin değerleri aşağıdaki tablodaki gibidir. Değişkenin 36 değeri bulunmaktadır. Ancak bu değişken içerisinde tanımlı 12 bölge bulunmaktadır. 36 kategorili değişkeni kullanılarak 12 kategorili BOLGE2 değişkeni düzeyleri ile oluşturunuz (4.1).
pisa2015_yeni1 <- pisa2015_yeni %>% 
  mutate(BOLGE2 = case_when(
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0101","TUR0102","TUR0103") ~ "TR1: Istanbul",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0104","TUR0105","TUR0106") ~ "TR2: Batı Marmara",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0107","TUR0108","TUR0109") ~ "TR3: Ege",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0110","TUR0111","TUR0112") ~ "TR4: Dogu Marmara",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0213","TUR0214","TUR0215") ~ "TR5: Batı Anadolu",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0216","TUR0217","TUR0218") ~ "TR6: Akdeniz",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0219","TUR0220","TUR0221") ~ "TR7: Orta Anadolu",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0222","TUR0223","TUR0224") ~ "TR8: Batı Karadeniz",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0225","TUR0226","TUR0227") ~ "TR9: Dogu Karadeniz", 
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0228","TUR0229","TUR0230") ~ "TRA: Kuzeydogu Anadolu",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0231","TUR0232","TUR0233") ~ "TRB: Ortadogu Anadolu",
ISTATISTIKI_BOLGE_BIRIMLERI %in% c("TUR0234","TUR0235","TUR0236") ~ "TRC: Guneydogu Anadolu"))
  1. CINSIYET değişkenini kullanarak, öğrencilerin FEN_OKURYAZARLIK (PV1SCIE) puanlarının dağılımını gösteren bir kutu grafiği (Box Plot) oluşturunuz (5.1). Her bir kutu grafiğine ek olarak, ortalama fen okuryazarlık puanını gösteren bir nokta ekleyiniz (5.2).
pisa2015_yeni1$CINSIYET <- factor(pisa2015_yeni1$CINSIYET,
                              levels= c(1,2),
                              labels=c("Kiz","Erkek"))

ggplot(pisa2015_yeni1, aes(x=CINSIYET,y=FEN_OKURYAZARLIK)) +
  geom_boxplot(fill= "green", alpha= 0.7)+
  stat_summary(fun = mean, geom = "point", shape = 20, 
               size = 4, color = "red") +
  labs(
    x= "CINSIYET",
    y="FEN OKURYAZARLIK PUANI",
    title = "KUTU GRAFIGI: CINSIYETE GORE FEN OKURYAZARLIK "
  )+
  theme_minimal() 

  1. BOLGE2 değişkenini kullanarak, her bir bölgenin ortalama FEN_OKURYAZARLIK (PV1SCIE) puanını hesaplayınız (6.1). Bu ortalamaları büyükten küçüğe sıralayarak gösteren (6.2) ve bölgeleri X ekseninde, ortalama puanı Y ekseninde gösteren bir çubuk grafiği (Bar Plot) oluşturunuz (6.3).
bolge_ortalamasi <- pisa2015_yeni1 %>%
  group_by(BOLGE2) %>%
  summarise(Fen_ortalama = mean(FEN_OKURYAZARLIK, na.rm = TRUE)) %>%
  arrange(desc(Fen_ortalama))
bolge_ortalamasi
## # A tibble: 12 × 2
##    BOLGE2                 Fen_ortalama
##    <chr>                         <dbl>
##  1 TR2: Batı Marmara              438.
##  2 TR3: Ege                       437.
##  3 TR5: Batı Anadolu              435.
##  4 TR1: Istanbul                  434.
##  5 TR6: Akdeniz                   433.
##  6 TR4: Dogu Marmara              430.
##  7 TR7: Orta Anadolu              416.
##  8 TR8: Batı Karadeniz            412.
##  9 TR9: Dogu Karadeniz            409.
## 10 TRA: Kuzeydogu Anadolu         404.
## 11 TRC: Guneydogu Anadolu         388.
## 12 TRB: Ortadogu Anadolu          382.
ggplot(bolge_ortalamasi, aes(x = reorder(BOLGE2, -Fen_ortalama), y = Fen_ortalama)) +
  geom_bar(stat = "identity", fill = "lightgreen") +
  labs(
    x = "Bolge",
    y = "Ortalama Fen Okuryazarlik Puani",
    title = "Bolgelere Gore Ortalama Fen Okuryazarlik Puanlari"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

6.1. FEN_OKURYAZARLIK (PV1SCIE) ile SOSYO_EKONOMIK_DUZEY (ESCS) değişkenleri arasındaki Pearson korelasyon katsayısını hesaplayınız (7.1). Ayrıca, bu iki değişken ve ANNE_EGITIMI (MISCED) ile BABA_EGITIMI (FISCED) değişkenlerini de içeren bir korelasyon matrisi (7.2) oluşturup bu matrisi yuvarlayarak gösteriniz (7.3).

# Pearson korelasyon katsayısı
cor(pisa2015_yeni1$FEN_OKURYAZARLIK, pisa2015_yeni1$SOSYO_EKONOMIK_DUZEY, 
    use = "complete.obs", method = "pearson")
## [1] 0.2895673
# Korelasyon matrisi için kullanılacak değişkenleri seçelim
degiskenler <- pisa2015_yeni1[, c("FEN_OKURYAZARLIK", "SOSYO_EKONOMIK_DUZEY",
                           "ANNE_EGITIM_DUZEYI", "BABA_EGITIM_DUZEYI")]

# Korelasyon matrisi
cor_matris <- cor(degiskenler, use = "complete.obs", method = "pearson")

# Yuvarlanmış korelasyon matrisi
round(cor_matris, 3)
##                      FEN_OKURYAZARLIK SOSYO_EKONOMIK_DUZEY ANNE_EGITIM_DUZEYI
## FEN_OKURYAZARLIK                1.000                0.289              0.099
## SOSYO_EKONOMIK_DUZEY            0.289                1.000              0.661
## ANNE_EGITIM_DUZEYI              0.099                0.661              1.000
## BABA_EGITIM_DUZEYI              0.169                0.778              0.560
##                      BABA_EGITIM_DUZEYI
## FEN_OKURYAZARLIK                  0.169
## SOSYO_EKONOMIK_DUZEY              0.778
## ANNE_EGITIM_DUZEYI                0.560
## BABA_EGITIM_DUZEYI                1.000

6.2. Basit doğrusal regresyon analizi kullanarak, SOSYO_EKONOMIK_DUZEY (ESCS) değişkeninin FEN_OKURYAZARLIK (PV1SCIE) puanını ne ölçüde yordadığını inceleyiniz (8.1). Elde ettiğiniz regresyon modelinin özetini (summary) görüntüleyiniz (8.2) ve regresyon denklemini yorumlayınız (8.3).

model <- lm(FEN_OKURYAZARLIK ~ SOSYO_EKONOMIK_DUZEY, data = pisa2015_yeni1)
summary(model)
## 
## Call:
## lm(formula = FEN_OKURYAZARLIK ~ SOSYO_EKONOMIK_DUZEY, data = pisa2015_yeni1)
## 
## 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

6.3 (Regresyon denklemi yorumlama) FEN OKURYAZARLIK= 450.45+19.17× SOSYO EKONOMIK DUZEY

R-squared = 0.08385.Bu değer, fen okuryazarlık puanlarındaki toplam değişkenliğin yaklaşık %8.4’ünün sosyo-ekonomik düzey ile açıklandığını göstermektedir. Bu düşük bir değerdir ve model istatistiksel olarak anlamlı olsada açıklayıcılığı sınırlıdır.

Residual standard error = 73.9. Bu, modelin fen okuryazarlık puanlarını ortalama yaklaşık ±74 puan hata ile tahmin ettiğini göstermektedir.