a. “odev3.xlsx” dosyasını R ortamına aktarınız ve veri setinde eksik veri olup olmadığını kontrol ediniz.
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#Excel dosyasını veri olarak R a aktardım.
veri <- read_excel("D:/OLC_733/h3/odev3.xlsx")
#Veri setinde eksik veri olup olmadığını kontrol ettim.
sum (is.na(veri))
## [1] 0
*Veri setinde eksik veri olmadığını gördüm.
b. Cinsiyet ve SES değişkenlerinin kategorilerinde nasıl dağıldığını hem tablo hem de grafikle gösteriniz.
## Warning: package 'summarytools' was built under R version 4.4.3
##
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
##
## view
library(knitr)
freq(veri$Cinsiyet,report.nas = FALSE) %>%
kable(format='markdown',
caption="Frekans Tablosu",digits = 2)
Freq | % Valid | % Valid Cum. | % Total | % Total Cum. | |
---|---|---|---|---|---|
1 | 257 | 77.64 | 77.64 | 77.64 | 77.64 |
2 | 74 | 22.36 | 100.00 | 22.36 | 100.00 |
0 | NA | NA | 0.00 | 100.00 | |
Total | 331 | 100.00 | 100.00 | 100.00 | 100.00 |
#Cinsiyet değişkeninin nasıl dağıldığını gösteren grafik
library(ggplot2)
ggplot(veri, aes(x = factor(Cinsiyet, labels = c("Kadın", "Erkek")))) +
geom_bar(fill = "skyblue") +
labs(title = "Cinsiyet Dağılımı", x = "Cinsiyet", y = "Frekans")
İki kategorili değişkenlerden cinsiyet değişkeninin kategorilere dağılımları incelendiğinde kadın sayısı erkek sayısının yaklaşık 3.5 katı kadardır.
#SES değişkeninin nasıl dağıldığını gösteren tablo
freq(veri$SES,report.nas = FALSE) %>%
kable(format='markdown',
caption="Frekans Tablosu",digits = 2)
Freq | % Valid | % Valid Cum. | % Total | % Total Cum. | |
---|---|---|---|---|---|
1 | 18 | 5.44 | 5.44 | 5.44 | 5.44 |
2 | 262 | 79.15 | 84.59 | 79.15 | 84.59 |
3 | 51 | 15.41 | 100.00 | 15.41 | 100.00 |
0 | NA | NA | 0.00 | 100.00 | |
Total | 331 | 100.00 | 100.00 | 100.00 | 100.00 |
#SES değişkeninin nasıl dağıldığını gösteren grafik
library(ggplot2)
ggplot(veri, aes(x = factor(SES, labels = c("Dusuk", "Orta", "Yuksek")))) +
geom_bar(fill = "salmon") +
labs(title = "SES Dagilimi", x = "SES", y = "Frekans")
Üç kategorili değişkenlerden SES değişkeninin kategorilere dağılımları incelendiğinde 1.düzeyde(düşük) yüzde 5, 2.düzeyde(orta) yüzde 80, 3.düzeyde (yüksek) yüzde 15 veri bulunmaktadır. (Yüzdeler yaklaşık değerlerdir)
c. Boyut1 alt boyutunda yer alan maddeler olumsuz maddelerdir, bu maddeleri yeniden kodlayınız.
#Boyut 1 de yer alan maddelerin yeniden kodlanması
veri <- veri %>%
mutate(across(WV1:WV9, ~ 8 - .x))
d. Boyut1 ve Boyut2 alt boyutunun her ikisi için de toplam puan hesaplayınız. Her iki alt ölçeğin toplam puan dağılımını histogram çizerek gösteriniz.
# Boyut1 ve Boyut2 toplam puanları
veri <- veri %>%
mutate(
Boyut1_Toplam = rowSums(select(., WV1:WV9)),
Boyut2_Toplam = rowSums(select(., WV10:WV16))
)
# Histogram Çizimi
ggplot(veri, aes(x = Boyut1_Toplam)) +
geom_histogram(binwidth = 5, fill = "yellow", color = "black", alpha = 0.7) +
labs(title = "Boyut1 Toplam Puan Dağılımı", x = "Toplam Puan", y = "Frekans")
ggplot(veri, aes(x = Boyut2_Toplam)) +
geom_histogram(binwidth = 5, fill = "red", color = "black", alpha = 0.7) +
labs(title = "Boyut2 Toplam Puan Dağılımı", x = "Toplam Puan", y = "Frekans")
e. Boyut2 alt boyutunun toplam puan grafiğine ortalamadan bir dikey referans çizgisi çizdiriniz. Bu çizginin üstüne ortalama değerini yazdırınız. Ayrıca grafiğe ortalamanın bir standart sapma fazlası ve bir standart sapma azı olan noktalarda da birer referans çizgisi ekleyeniz. Bu çizgiler üzerine de açıklama ekleyiniz.
# Boyut2'nin ortalaması ve standart sapması
ort_boyut2 <- mean(veri$Boyut2_Toplam, na.rm = TRUE)
sd_boyut2 <- sd(veri$Boyut2_Toplam, na.rm = TRUE)
# Histogram ve referans çizgileri
ggplot(veri, aes(x = Boyut2_Toplam)) +
geom_histogram(binwidth = 5, fill = "red", color = "black", alpha = 0.7) +
labs(title = "Boyut2 Toplam Puan Dağılımı", x = "Toplam Puan", y = "Frekans") +
geom_vline(xintercept = ort_boyut2, color = "blue", linetype = "dashed", size = 1) +
geom_vline(xintercept = ort_boyut2 + sd_boyut2, color = "green", linetype = "dashed", size = 1) +
geom_vline(xintercept = ort_boyut2 - sd_boyut2, color = "green", linetype = "dashed", size = 1) +
annotate("text", x = ort_boyut2, y = 10, label = paste("Ortalama:", round(ort_boyut2, 2)), color = "blue", vjust = -1) +
annotate("text", x = ort_boyut2 + sd_boyut2, y = 10, label = "+1 SD", color = "green", vjust = -1) +
annotate("text", x = ort_boyut2 - sd_boyut2, y = 10, label = "-1 SD", color = "green", vjust = -1) +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
f. Her iki alt boyutu da uç değer açısından değerlendiriniz.
Tek Değişkenli Uç Değerler
# Boyut1 için z-skorlarını hesapla
z_puanlari <- veri %>%
select(Boyut1_Toplam) %>%
scale() %>%
as.data.frame()
# Z-skorlarının ilk birkaç satırını gör
head(z_puanlari)
## Boyut1_Toplam
## 1 0.507084
## 2 0.333601
## 3 1.201016
## 4 -1.401229
## 5 0.680567
## 6 -2.355385
# Boyut1'de |z| > 3 olan uç değerleri filtrele
uc_degerler_boyut1 <- veri %>%
filter(abs(z_puanlari$Boyut1_Toplam) > 3)
# Uç değerlerin olduğu gözlemleri göster
uc_degerler_boyut1
## # A tibble: 1 × 20
## Cinsiyet SES WV1 WV2 WV3 WV4 WV5 WV6 WV7 WV8 WV9 WV10
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 2 1 1 1 1 1 1 1 1 1 1
## # ℹ 8 more variables: WV11 <dbl>, WV12 <dbl>, WV13 <dbl>, WV14 <dbl>,
## # WV15 <dbl>, WV16 <dbl>, Boyut1_Toplam <dbl>, Boyut2_Toplam <dbl>
*Boyut_1_Toplam değişkeninde 9 a eşit olan bir tane değer uç değerdir.
# Boyut2 için z-skorlarını hesapla
z_puanlari <- veri %>%
select(Boyut2_Toplam) %>%
scale() %>%
as.data.frame()
# Z-skorlarının ilk birkaç satırını gör
head(z_puanlari)
## Boyut2_Toplam
## 1 -0.10447708
## 2 0.70921500
## 3 -0.00276557
## 4 0.60750349
## 5 0.70921500
## 6 0.60750349
# Boyut2'de |z| > 3 olan uç değerleri filtrele
uc_degerler_boyut2 <- veri %>%
filter(abs(z_puanlari$Boyut2_Toplam) > 3)
# Uç değerlerin olduğu gözlemleri göster
uc_degerler_boyut2
## # A tibble: 0 × 20
## # ℹ 20 variables: Cinsiyet <dbl>, SES <dbl>, WV1 <dbl>, WV2 <dbl>, WV3 <dbl>,
## # WV4 <dbl>, WV5 <dbl>, WV6 <dbl>, WV7 <dbl>, WV8 <dbl>, WV9 <dbl>,
## # WV10 <dbl>, WV11 <dbl>, WV12 <dbl>, WV13 <dbl>, WV14 <dbl>, WV15 <dbl>,
## # WV16 <dbl>, Boyut1_Toplam <dbl>, Boyut2_Toplam <dbl>
*Boyut_2_Toplam değişkeninde uç değer bulunmamaktadır.
Çok Değişkenli Uç Değerler
# Boyut1 ve Boyut2 toplam puanlarını içeren bir matris oluşturma
boyutlar <- veri %>% select(Boyut1_Toplam, Boyut2_Toplam)
# Mahalanobis mesafesini hesaplama
mahalanobis_mesafesi <- mahalanobis(boyutlar, colMeans(boyutlar), cov(boyutlar))
# Mahalanobis mesafesini veri setine ekleme
veri <- veri %>% mutate(Mahalanobis = mahalanobis_mesafesi)
# Kritik değeri hesaplama (ki-kare dağılımına göre)
kritik_deger <- qchisq(0.95, df = 2) # df = 2, çünkü 2 boyut var
# Uç değerleri belirleme
veri <- veri %>% mutate(Uc_Deger = Mahalanobis > kritik_deger)
# Uç değerleri görüntüleme
uc_degerler <- veri %>% filter(Uc_Deger == TRUE)
print(uc_degerler)
## # A tibble: 26 × 22
## Cinsiyet SES WV1 WV2 WV3 WV4 WV5 WV6 WV7 WV8 WV9 WV10
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2 3 2 2 3 2 3 2 3 2 3 5
## 2 2 3 2 3 2 3 2 2 2 1 2 7
## 3 2 2 1 1 1 2 3 3 3 3 2 7
## 4 2 2 7 7 7 7 7 7 7 6 7 2
## 5 2 2 7 7 7 7 7 7 7 7 7 1
## 6 2 2 2 2 2 2 2 2 2 2 3 5
## 7 2 2 2 3 2 2 2 2 2 2 2 6
## 8 2 2 3 7 3 1 1 1 1 2 7 7
## 9 2 3 2 2 2 2 2 2 2 2 2 6
## 10 2 3 1 2 3 1 1 1 2 2 3 5
## # ℹ 16 more rows
## # ℹ 10 more variables: WV11 <dbl>, WV12 <dbl>, WV13 <dbl>, WV14 <dbl>,
## # WV15 <dbl>, WV16 <dbl>, Boyut1_Toplam <dbl>, Boyut2_Toplam <dbl>,
## # Mahalanobis <dbl>, Uc_Deger <lgl>
# Scatter plot çizme
ggplot(veri, aes(x = Boyut1_Toplam, y = Boyut2_Toplam, color = Uc_Deger)) +
geom_point() +
geom_point(data = uc_degerler, aes(x = Boyut1_Toplam, y = Boyut2_Toplam), color = "red", size = 3) +
labs(title = "Çok Boyutlu Uç Değer Analizi", x = "Boyut1 Toplam Puan", y = "Boyut2 Toplam Puan") +
theme_minimal()
# Uç değerlerin detaylı incelemesi
uc_degerler_detay <- veri %>% filter(Uc_Deger == TRUE) %>% select(Cinsiyet, SES, Boyut1_Toplam, Boyut2_Toplam, Mahalanobis)
print(uc_degerler_detay)
## # A tibble: 26 × 5
## Cinsiyet SES Boyut1_Toplam Boyut2_Toplam Mahalanobis
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2 3 22 39 6.91
## 2 2 3 19 46 10.7
## 3 2 2 19 45 10.3
## 4 2 2 62 11 7.78
## 5 2 2 63 7 10.4
## 6 2 2 19 43 9.54
## 7 2 2 19 42 9.21
## 8 2 2 26 49 8.57
## 9 2 3 18 42 9.74
## 10 2 3 16 44 11.5
## # ℹ 16 more rows
*Mahalanobis uzaklıkları dikkate alındığında veri setimizde uç değerlerin olmadığını söyleyebiliriz.
**Yapılma süresi : 2 saat 50 dakika