# gerekli paketleri yükleyelim ve verimizi okutalım
library(haven)
verimiz <- "C:/Users/isila/OneDrive/Belgeler/bsgturm8.sav"
timss_tr8 <- read_sav(verimiz)
library(dplyr)
library(ggplot2)
library(naniar)
library(tidyr)
library(tidyverse)
# veri setinin boyutlarını kontrol edelim
dim(timss_tr8)
## [1] 4925 511
analiz_verisi <- timss_tr8 %>%
select(
mat_basari = BSMMAT01,
internet = BSBG05D,
calisma_masasi = BSBG05E
)
## Yeni verimizin ilk 6 satırına bakalım
head(analiz_verisi)
## # A tibble: 6 × 3
## mat_basari internet calisma_masasi
## <dbl+lbl> <dbl+lbl> <dbl+lbl>
## 1 311. 1 [Yes] 1 [Yes]
## 2 400. 1 [Yes] 1 [Yes]
## 3 517. 1 [Yes] 1 [Yes]
## 4 344. 1 [Yes] 1 [Yes]
## 5 479. 1 [Yes] 1 [Yes]
## 6 383. 1 [Yes] 1 [Yes]
# Değişken isimleri
colnames(analiz_verisi)
## [1] "mat_basari" "internet" "calisma_masasi"
# Veri setinin genel yapısını inceleyelim
glimpse(analiz_verisi)
## Rows: 4,925
## Columns: 3
## $ mat_basari <dbl+lbl> 310.9722, 399.6433, 517.3351, 344.4754, 479.4666, 3…
## $ internet <dbl+lbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ calisma_masasi <dbl+lbl> 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, …
# Değişkenlerin betimsel istatistikleri
summary(analiz_verisi)
## mat_basari internet calisma_masasi
## Min. :216.0 Min. :1.000 Min. :1.000
## 1st Qu.:420.2 1st Qu.:1.000 1st Qu.:1.000
## Median :502.9 Median :1.000 Median :1.000
## Mean :504.2 Mean :1.043 Mean :1.101
## 3rd Qu.:587.3 3rd Qu.:1.000 3rd Qu.:1.000
## Max. :851.1 Max. :2.000 Max. :2.000
## NA's :112 NA's :101
# Eksik veri analizi için gerekli paketleri çağırıyoruz
library(naniar)
library(dplyr)
library(ggplot2)
# 1. Sayısal değişkenlerde min ve max değerleri inceleyelim
analiz_verisi %>%
summarise(across(where(is.numeric), list(min = min, max = max), na.rm = TRUE))
## # A tibble: 1 × 6
## mat_basari_min mat_basari_max internet_min internet_max calisma_masasi_min
## <dbl+lbl> <dbl+lbl> <dbl+lbl> <dbl+lbl> <dbl+lbl>
## 1 216. 851. 1 [Yes] 2 [No] 1 [Yes]
## # ℹ 1 more variable: calisma_masasi_max <dbl+lbl>
# 2. Kayıp Veri Analizi - Genel Durum
n_miss(analiz_verisi) # Veri setindeki toplam eksik değer sayısı
## [1] 213
prop_miss(analiz_verisi) # Veri setindeki toplam eksik değer oranı
## [1] 0.01441624
# 3. Değişken Bazında Eksik Veri Oranları
colSums(is.na(analiz_verisi))
## mat_basari internet calisma_masasi
## 0 112 101
# 4. Eksik Veri Desenini Görselleştirme
gg_miss_var(analiz_verisi) +
labs(title = "TIMSS 2023 Türkiye - Eksik Veri Dağılımı",
x = "Değişkenler",
y = "Eksik Veri Sayısı")
### Eksik veri ile başa çıkma: Kayıp verilerle başa çıkmak için iki
farklı yöntem deniyoruz. Eksik satırları tamamen silmek (listwise
deletion) ve eksik değerleri ortalama ile doldurmak.
library(tidyr)
# Yöntem 1: Eksik veri içeren satırları tamamen silme
analiz_clean <- analiz_verisi %>%
drop_na()
# Temizlendikten sonraki satır sayısı
nrow(analiz_clean)
## [1] 4808
# Yöntem 2: Alternatif olarak eksik verileri ortalama ile doldurma
analiz_imputed <- analiz_verisi %>%
mutate(across(where(is.numeric), ~ ifelse(is.na(.), mean(., na.rm = TRUE), .)))
# Ortalama ile doldurduktan sonra eksik veri kaldı mı kontrol edelim
colSums(is.na(analiz_imputed))
## mat_basari internet calisma_masasi
## 0 0 0
Veri setimizdeki matematik başarı puanlarındaki (mat_basari) olası uç değerleri görmek için Boxplot (Kutu Grafiği) çiziyoruz. Grafiği çizerken eksik verilerden arındırdığımız analiz_clean verisini kullanıyoruz.
ggplot(analiz_clean, aes(y = mat_basari)) +
geom_boxplot(fill = "red", alpha = 0.5) +
theme_minimal() +
labs(title = "TIMSS 2023 Türkiye - Matematik Başarısında Uç Değerler",
y = "Matematik Başarı Puanı")