Hocam, bütün kod bloklarını tekrar etmek için açıklamasını chatgpt’ye yaptırıp not düşüyorum. Bu yüzden her şey kopyala yapıştır gibi duruyor ama anlamlandırmak için bana kolaylık sağlıyor.

library(haven)
library(dplyr)
library(knitr)
library(broom)
library(GGally)
library(scatterplot3d)
library(rgl)
performans <- read_sav("~/hacettepe/Rders/data/Performans.sav")

Çoklu korelasyon katsayısı

model <- lm(Performans ~ Motivasyon + Kaygi,data=performans)
glance(model)[,1]
## # A tibble: 1 × 1
##   r.squared
##       <dbl>
## 1     0.814
sqrt(glance(model)[,1]) #r.squared değerinin karekoku alınır 
## # A tibble: 1 × 1
##   r.squared
##       <dbl>
## 1     0.902
  • glance(model) fonksiyonu, modelin özet bilgilerini verir.
  • [,1] ifadesi, buradaki ilk sütunu yani r.squared değerini alır.
  • sqrt(…) fonksiyonu bu değerin karekökünü alır.

Neden karekök?

Çünkü R^2 (R kare) aslında çoklu korelasyon katsayısının karesidir. Bu yüzden tekrar R’yi bulmak istiyorsan sqrt(R^2) alırsın.

Motivasyon ve Kaygı birlikte, Performanstaki değişimin %81’ini açıklıyor Motivasyon ve Kaygı’nın birleşimi, Performans ile %90 oranında ilişkilidir.

Neden çoklu korelasyon katsayısı 0 ile 1 arasında değişir

Eğer R = 1 çıkarsa → Model mükemmel tahmin yapıyor.

R = 0 çıkarsa → Model ne tahmin ettiyse alakası yok.

Korelasyon negatif olabilir. O zaman R neden -1 olamıyor. Sebebi “en küçük kareler yöntemi”.

  • Tahminle gerçeğin farkını alır: (gerçek - tahmin)
  • Bu farkın karesini alır (negatifleri yok etmek için)
  • Tüm farkların karelerini toplar
  • Bu toplamı minimum yapan katsayıları bulur

mantığı varyansa benziyor.

model_s <- augment(model,data=performans)
cor(model_s[,1], model_s[,5]) # Y ve Y' arası korelasyon
##              .fitted
## Performans 0.9019952
  • augment() → Veri setine tahmin edilen değerleri ekler.
  • model_s[,1] → Gerçek değer (Y)
  • model_s[,5] → Modelin tahmini (Y’)
  • cor(Y, Y’) → Bu ikisinin korelasyonu = Çoklu korelasyon katsayısı (R)

Amacımız ne? - Modelin tahmin ettiği performans değerleri (Y’) ile, gerçek performans değerleri (Y) arasında korelasyon hesaplamak. - Yani “Model gerçekten iyi tahmin yapmış mı?” bunu sayısal olarak görmek istiyoruz.

not R^2 = determinasyon katsayısı. Kelime olarak determinasyon = “belirleme, açıklama” demektir.

adj R²

glance(model)[,2]
## # A tibble: 1 × 1
##   adj.r.squared
##           <dbl>
## 1         0.783

Bu satır modelin adj R² değerini otomatik verir.

Ne kadar alakasız bir değişken eklersen bile, R² ya aynı kalır ya da artar.

  • Çünkü model her yeni değişkenle veriye biraz daha iyi uyum sağlıyor gibi görünür.

Diyelim ki modelde “Motivasyon” vardı ve R² = 0.75

  • “Ayakkabı numarası” gibi alakasız bir değişken ekledin.
  • R² = 0.76 oldu! (Şansa oldu ama yükseldi.)
  • Bu yüzden R² her zaman güvenilir değil.

adj R² (düzeltilmiş R²)

  • Yeni değişken gerçekten modelin açıklayıcılığını artırıyorsa → adj R² artar
  • Ama işe yaramıyorsa → adj R² düşer

kestirimin standart hatası

  • Artıklar (residuals) = Gerçek değer – Tahmin edilen değer
  • Kestirimin SH = Artıkların ne kadar saçıldığını özetler
res <- model$residuals

Bu satırda modelin artıklarını (hatalarını) alıyoruz:

Yani her bir gözlemde: gerçek değer - tahmin edilen değer

sqrt(sum((res - mean(res)) ^ 2 / (length(res)-3)))
## [1] 3.650458
  1. (res - mean(res))^2 → Artıkların varyansını buluyor. (aslında mean(res) zaten sıfır olur!)
  2. sum(…) / (length(res) - 3) → Bu varyansı n−p’ye bölüyor. Burada “3” dediği şey: 2 bağımsız değişken + 1 sabit terim (toplam 3 parametre)
  3. sqrt(…) → Varyansın karekökünü alarak standart hatayı veriyor.
glance(model)[,3]
## # A tibble: 1 × 1
##   sigma
##   <dbl>
## 1  3.65

Bu satır direkt olarak modelin kestirimin standart hatasını verir.

Modelin Veriye Uyumunun Testi (F testi)

Sıfır hipotezi:

  • Modelin kurduğu ilişki tamamen tesadüfidir.
  • Yani motivasyon ve kaygı birlikte, performansı anlamlı şekilde tahmin edemez.

Ama biz modeli çalıştırınca bir F değeri ve buna karşılık gelen bir p değeri elde ederiz.

glance(model)[,4:6] %>% kable(digit=3)
statistic p.value df
26.188 0 2

p değeri 0.05’ten küçük olduğu için:

  • Sıfır hipotezi reddedilir
  • Yani: Model istatistiksel olarak anlamlıdır
  • Motivasyon ve kaygı birlikte, performansı anlamlı şekilde açıklıyor

Değişkenlerden birinin Sabit tutulması

Şunu merak ediyorsun: “Kaygıyı sabit tutsak, yani tüm öğrenciler aynı düzeyde kaygıya sahip olsa… Sadece motivasyon arttığında, performans da artar mı?”

1.Performansı sadece kaygıya göre açıklayan bir denklem kuruyoruz.

Bu denklem “kaygı ile açıklanabilen kısmı” buluyor. Biz onun dışındaki kısmı alıyoruz — bu da “kaygıdan bağımsız performans” oluyor. Bunu şöyle yazıyoruz:

artikPER1 <- lm(Performans ~ Kaygi, data=performans)$residuals

2. Aynı şeyi motivasyon için yapıyoruz.

Yani: Motivasyonun içinden kaygı etkisini çıkarıyoruz. Elimizde “kaygıdan bağımsız motivasyon” kalıyor:

artikMOT <- lm(Motivasyon ~ Kaygi, data=performans)$residuals

Artık elimizde ne var?

İki şey var:

  • artıkPER1 → Kaygının etkisi çıkarılmış performans
  • artıkMOT → Kaygının etkisi çıkarılmış motivasyon

Şunu soruyoruz:

“Kaygı sabitken, motivasyon artarsa performans artar mı?”

Bunun cevabını bulmak için artıkPER1 ve artıkMOT arasında ilişki kuruyoruz:

lm(artikPER1  ~  artikMOT,
   data=data.frame(artikPER1,artikMOT))$coefficients %>% kable(digit=3)
x
(Intercept) 0.000
artikMOT 0.686

Motivasyon 1 puan artarsa, performans yaklaşık 0.69 puan artar (kaygı sabitken)

Regresyon Sabiti

B₀ Nasıl Hesaplanır?

Formül şu:

𝐵0=Performans ortalaması −𝐵1⋅Motivasyon ortalaması−𝐵2⋅Kaygı ortalamas

mean(performans$Performans)-
  model$coefficients[2]*mean(performans$Motivasyon)-
  model$coefficients[3]*mean(performans$Kaygi)
## Motivasyon 
##   1.744129

Standart puanlar ile regresyon

Neden yapıyoruz?

Çünkü bazı değişkenler küçük sayılarla (örneğin 1–5), bazıları büyük sayılarla (örneğin 0–100) ölçülmüş olabilir.

  • Bu durumda katsayıları karşılaştırmak doğru olmaz.
  • Hepsini aynı birime getirirsek (standart sapma birimi), etki büyüklüklerini adil şekilde kıyaslayabiliriz.

Aşağıdaki komut, modeldeki tüm değişkenleri standartlaştırıyor ve yeni bir regresyon modeli oluşturuyor.

library(QuantPsyc)
lm.beta(model) %>% kable(digit=3)
x
Motivasyon 0.879
Kaygi -0.370
  • Motivasyon 1 standart sapma artarsa → Performans 0.879 standart sapma artar
  • Kaygı 1 standart sapma artarsa → Performans 0.370 standart sapma azalır

Mutlak değerlerini alırsak, Motivasyon, kaygıya göre daha güçlü bir yordayıcıdır.

not

“Standartlaştırılmış regresyon katsayısı, bağımlı değişken ile bağımsız değişkenin korelasyonudur.”

  • Ama bu sadece tek değişkenli (basit) regresyon için doğrudur.
  • Çoklu regresyon (iki veya daha fazla bağımsız değişken varsa) için bu doğru değildir.

Yordanan ve Artık Değerler

Ancak bu tahmin, her zaman tam isabetli olmaz. Çünkü her öğrencinin performansını sadece motivasyon ve kaygı belirlemez. Başka şeyler de vardır (zeka, uykusuzluk, dikkat, moral vb.).

İşte bu farkı görmek için iki kavram kullanılır:

  • yordanan değerler
  • artıklar : Bu fark, modelin o öğrenci için ne kadar “yanıldığını” gösterir.
data.frame(
  gercek = performans$Performans,
  yordanan = model$fitted.values,
  artik = model$residuals) %>% kable(digit=3)
gercek yordanan artik
12.371 7.461 4.910
4.112 6.869 -2.757
21.627 24.750 -3.123
24.921 22.949 1.972
26.088 26.804 -0.716
17.701 22.416 -4.715
10.272 11.837 -1.565
18.898 22.384 -3.485
19.200 15.558 3.642
17.751 18.013 -0.262
35.501 27.692 7.809
18.041 19.201 -1.160
11.358 10.658 0.701
24.256 24.502 -0.246
10.542 11.546 -1.004

Yordanan ve Artık Değerlerin Standart Puanları

Neden önemli?

Böylece:

  • Öğrencinin tahmin edilen performansı, sınıf ortalamasına göre ne durumda?
  • Model o öğrenciyi ne kadar iyi tahmin etmiş?
  • Hangi öğrenciler modelin tahmininden çok sapmış?
  • Bunları tek bir ortak ölçekte (Z) görebiliyoruz. Bu da yorumlamayı kolaylaştırıyor.
library(outliers)
yordanan_s <- model$fitted.values %>% scores(type = "z")
artik_s <- model$residuals %>% scores(type = "z")
data.frame(yordanan_s,artik_s)  %>% kable(digit=3)
yordanan_s artik_s
-1.518 1.453
-1.601 -0.816
0.931 -0.924
0.676 0.584
1.222 -0.212
0.601 -1.395
-0.898 -0.463
0.596 -1.031
-0.371 1.078
-0.023 -0.077
1.348 2.311
0.145 -0.343
-1.065 0.207
0.896 -0.073
-0.939 -0.297