Bu hafta çoklu regresyonun devamı olarak kategorik değişkenlerle regresyon (dummy), düzenleyicilik (moderation) analizi, Anscombe’un dörtlüsü ve nedensel dörtlü konularını işledik. İİlk dönemde işlediğimizSimpson Paradoksuna da değindik.
Regresyon modellerinde kategorik değişkenleri kullanabilmek için dummy -yapay- değişkenler oluşturmak gerekiyor. k düzeye sahip bir kategorik değişken için k-1 tane dummy değişken oluşturulur..
ÖNEMLİ NOT: Referans grubu olarak seçilen kategoriye ait bireyler, tüm dummy değişkenlerde 0 değerini alır.
Derste “Performansd1” veri setinde medeni durum üç düzeydi, iki dummy
değişken oluyor: D1 (Evli) ve D2 (Bekar). Referans grup “Diğer”
olduğunda, kesişim katsayısı (b0) diğer grubunun yordanan puanını, b1
evliler ile diğerleri arasındaki farkı, b2 bekarlar ile diğerleri
arasındaki farkı veriyordu. R’da lm() fonksiyonu kategorik
değişkeni otomatik olarak dummy’ye çevirir ya da
fastDummies::dummy_cols() ile elle oluşturulabilirmiş.
#DENEME İÇİN YAPTIK AMA KNİT EDERKEN SORUN OLMAMASI İÇİN eval=FALSE yazdık chunkın setupına. Bunu chatten öğrendim hoşuma gitti.
library(fastDummies)
dataf <- dummy_cols(Performansd1, select_columns = 'Medeni')
model_dummy <- lm(Performans ~Medeni_1 + Medeni_2, data = dataf)
model_2 <- lm(Performans ~ Medeni, data = Performansd1)Düzenleyici etki, bir bağımsız değişken ile bağımlı değişken arasındaki ilişkinin üçüncü bir değişkenin düzeyine göre değişmesidir. Regresyon denklemi: \(Y = a + b_1X + b_2Z + b_3(X \times Z)\)
Derste iki örnek incelendi:
Örnek 1 (Hassles.sav): Sorunlar, sosyal destek ve psikolojik belirtiler. Etkileşim terimi anlamlı çıktı, düşük sosyal destekteki bireylerde sorun arttıkça belirtiler dramatik artarken, yüksek destektekilerde bu artış çok daha yavaştı.
Örnek 2 (duzenleyici.Rds): Uyku saati, kahve tüketimi ve derse dikkat. etkileşim anlamlıydı. Cohen f² ile etki büyüklüğü hesaplandı.
Dört farklı veri seti aynı ortalama, standart sapma, korelasyon ve regresyon katsayılarına sahip olmalarına rağmen tamamen farklı örüntüler gösteriyordu: doğrusal ilişki, eğrisel ilişki, aykırı değerli doğrusal ilişki ve etkili değerli ilişkisizlik. istatistikler tek başına yetmez, verileri mutlaka görselleştirmek gerekir.
Collider (seçilim yanlılığı, düzeltme yapılmamalı),
Confounder (sahte ilişki, düzeltme yapılmalı),
Mediator (mekanizma, amaca göre düzeltilir veya düzeltilmez),
M-Bias (ölçülemeyen faktörler nedeniyle düzeltme zararlı olabilir).
Berkeley kabul oranları örneğinde, genel olarak kadınların kabul oranı erkeklerden düşük görünürken, bölüm bazında bakıldığında çoğu bölümünde kadınlar daha yüksek oranda kabul almıştı. Sebebi: kadınlar kabul oranı düşük bölümlere daha fazla başvuruyorlardı. Bir ilişkiyi incelerken önemli bir değişkeni göz ardı etmek sonuçları tamamen yanıltabilir.
Bu hafta derste öğrendiğimiz dummy ve düzenleyicilik analizini R’ın
iris veri seti üzerinde uygulayacağım. Bu veri seti 3 tür
bitkinin yaprak ölçümlerini içermektedir - 3 düzeyli kategorik değişken
dummy kodlama için ideal. Bu veri setini daha önce kullanmıştık ve
datacampta da egzersizlerde vardı.
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
##
## setosa versicolor virginica
## 50 50 50
iris_d <- dummy_cols(iris, select_columns = "Species")
head(iris_d[, c("Species", "Species_setosa", "Species_versicolor", "Species_virginica")])## Species Species_setosa Species_versicolor Species_virginica
## 1 setosa 1 0 0
## 2 setosa 1 0 0
## 3 setosa 1 0 0
## 4 setosa 1 0 0
## 5 setosa 1 0 0
## 6 setosa 1 0 0
Referans grubu olarak “setosa”yı seçerek Sepal.Length’i yordayan bir regresyon modeli
model_dummy <- lm(Sepal.Length ~ Species_versicolor + Species_virginica, data = iris_d)
tidy(model_dummy) %>% kable(digits = 3)| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 5.01 | 0.073 | 68.76 | 0 |
| Species_versicolor | 0.93 | 0.103 | 9.03 | 0 |
| Species_virginica | 1.58 | 0.103 | 15.37 | 0 |
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 5.01 | 0.073 | 68.76 | 0 |
| Speciesversicolor | 0.93 | 0.103 | 9.03 | 0 |
| Speciesvirginica | 1.58 | 0.103 | 15.37 | 0 |
Kesişim katsayısı setosa grubunun ortalama Sepal.Length’ini veriyor. Versicolor katsayısı, versicolor türünün setosa’ya göre ne kadar farklı olduğunu, virginica katsayısı da virginica’nın setosa’ya göre farkını gösteriyor.
| Species | ort |
|---|---|
| setosa | 5.01 |
| versicolor | 5.94 |
| virginica | 6.59 |
Gerçek ortalamalara bakıldığında katsayıları doğrulandı. setosa ortalaması kesişim değerine ve farklar da eğim katsayılarına eşit.
Petal.Length’in Sepal.Length üzerindeki etkisinin türe göre farklılaşıp farklılaşmadığını test edeceğim. Burada Species kategorik bir düzenleyici olarak modele giriyor.
Derste öğrendiğimiz gibi, önce sürekli değişkeni sabitlicez
model_ana <- lm(Sepal.Length ~ Petal.Length_c + Species, data = iris)
glance(model_ana)$adj.r.squared## [1] 0.833
##
## Call:
## lm(formula = Sepal.Length ~ Petal.Length_c * Species, data = iris)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.7348 -0.2279 -0.0313 0.2437 0.9361
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.251 0.637 9.81 <2e-16 ***
## Petal.Length_c 0.542 0.277 1.96 0.052 .
## Speciesversicolor -0.731 0.641 -1.14 0.256
## Speciesvirginica -1.449 0.658 -2.20 0.029 *
## Petal.Length_c:Speciesversicolor 0.286 0.295 0.97 0.334
## Petal.Length_c:Speciesvirginica 0.453 0.290 1.56 0.120
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.336 on 144 degrees of freedom
## Multiple R-squared: 0.84, Adjusted R-squared: 0.835
## F-statistic: 152 on 5 and 144 DF, p-value: <2e-16
| term | estimate | std.error | statistic | p.value |
|---|---|---|---|---|
| (Intercept) | 6.251 | 0.637 | 9.810 | 0.000 |
| Petal.Length_c | 0.542 | 0.277 | 1.959 | 0.052 |
| Speciesversicolor | -0.731 | 0.641 | -1.140 | 0.256 |
| Speciesvirginica | -1.449 | 0.658 | -2.203 | 0.029 |
| Petal.Length_c:Speciesversicolor | 0.286 | 0.295 | 0.969 | 0.334 |
| Petal.Length_c:Speciesvirginica | 0.453 | 0.290 | 1.563 | 0.120 |
## Ana etki R²: 0.833
## Etkileşim R²: 0.835
Düzeltilmiş R² değerini karşılaştırıyoruz çünkü derste öğrendiğimiz gibi, değişken eklendikçe R² her zaman artar ama düzeltilmiş R² sadece yeni değişken gerçekten bilgi sağlıyorsa artar.
## # Effect Size for ANOVA (Type I)
##
## Parameter | Cohen's f2 (partial) | 95% CI
## -----------------------------------------------------------
## Petal.Length_c | 4.76 | [3.72, Inf]
## Species | 0.48 | [0.29, Inf]
## Petal.Length_c:Species | 0.02 | [0.00, Inf]
##
## - One-sided CIs: upper bound fixed at [Inf].
ggplot(iris, aes(x = Petal.Length, y = Sepal.Length, color = Species)) +
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", se = FALSE) +
theme_minimal() +
labs(title = "Petal.Length Etkisinin Türe Göre Farklılaşması",
x = "Petal Uzunluğu", y = "Sepal Uzunluğu")Grafikte her tür için regresyon doğrusunun eğiminin farklı olup olmadığı görülebilir. Eğimler farklıysa düzenleyicilik etkisi var demek.
Derste car::avPlots() fonksiyonuyla kısmi regresyon
grafikleri incelenmişti:
Derste Anscombe’un dörtlüsü ile görselleştirmenin önemini gördük. Bunu iris verisi üzerinde şöyle gösterebiliriz: sadece korelasyona baktığımızda tüm türlerde Petal.Length ve Sepal.Length arasında pozitif ilişki var ama bu ilişkinin gücü ve doğası türe göre farklılaşıyor.
iris %>%
group_by(Species) %>%
summarise(r = cor(Petal.Length, Sepal.Length),
n = n()) %>%
kable(digits = 3)| Species | r | n |
|---|---|---|
| setosa | 0.267 | 50 |
| versicolor | 0.754 | 50 |
| virginica | 0.864 | 50 |
ggplot(iris, aes(x = Petal.Length, y = Sepal.Length)) +
geom_point(alpha = 0.5) +
geom_smooth(method = "lm", se = FALSE) +
facet_wrap(~Species, scales = "free") +
theme_minimal() +
labs(title = "Türlere Göre Petal-Sepal İlişkisi")Tüm veriyi tek bir regresyonla modellersek güçlü bir ilişki görürüz. Ancak alt gruplara bakıldığında ilişkinin yapısı farklılaşıyor. Bu, derste Simpson Paradoksu yani.
Causal quartet konusunu çok zor kavradım. Aynı veri üzerinde
collider, confounder, mediator ve M-bias yapılarının hepsi aynı
korelasyon değerlerini üretmesine rağmen doğru analiz stratejisi tamamen
farklılaşıyordu. Özellikle mediator ve confounder ayrımı benim için
önemliydi: ikisinde de üçüncü bir değişken söz konusu ama birinde
düzeltme gerekiyor , diğerinde ise düzeltme yaparsanız asıl etki
sıfırlanıyor. Dummy konusu ise geçen dönem jamovide yaptığım
analizlerden aşinaydım ama R’da lm() fonksiyonunun otomatik
olarak referans grubu seçip dummy’leri oluşturması,
fastDummies paketiyle elle kontrol edilmesi ve referans
grubu değiştirmenin katsayıları nasıl etkilediğini görmek pekiştirici -
ve aslında pratik oldu jamovide kolaydı ama spssde karıştırıcı oluyordu-
oldu. Anscombe’un dörtlüsünde de aynı ortalama, aynı korelasyon, aynı
regresyon denklemi farklı örüntülere sahip olabiliyor. Analiz yapmadan
önce mutlaka veriyi görselleştirmemiz gerekişyor.Hazır paketlerden
faydalandığımız için dersin teorik kısmı ağırlaşmış olsa bile kodlama
kısmı biraaz daha kolaylaştı gibi. Yani teorik kısmı kavramak hala güç
onu anlayıp kodlamak hala çok zor ama çok basitleştiilmiş veri seti ve
regresyon bağlantıları bilindiğinde değişkenler DOĞRU etiketlendiğinde
(bağımnlı, bağımsız aracı vb.) R üzerinde işlemi yapmak daha kolaydı ilk
dönemki fonksiyonlara ve apply ailesine göre.