# Gerekli kütüphaneleri yükle
library(tidyverse) # Veri manipülasyonu ve görselleştirme için (dplyr, ggplot2 içerir)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.1     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.2.0     
## ── 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
library(dplyr)
library(broom)     # Regresyon çıktısını düzenli veri çerçevelerine dönüştürmek için
library(ggplot2)   # Gelişmiş görselleştirmeler için
library(patchwork) # ggplot2 grafikleri birleştirmek için
library(kableExtra) # kable çıktısını güzelleştirmek için
## 
## Attachement du package : 'kableExtra'
## L'objet suivant est masqué depuis 'package:dplyr':
## 
##     group_rows
# İş eğitimi verilerini yükle
# Not: Bu sizin gerçek veri dosyanız olacaktır. Bu örnekte, veriyi simüle ediyoruz.
set.seed(123) # Analizin tekrar üretilebilirliğini sağlar.
job_training <- tibble(
  id = 1:2000, # Her katılımcı için benzersiz kimlik
  treated = rbinom(2000, 1, 0.5), # Tedavi grubuna rastgele atama (0=kontrol, 1=tedavi). %50 olasılıkla tedavi grubuna atanma.
  age = rnorm(2000, 35, 10), # Katılımcı yaşı, ortalama 35, standart sapma 10 olan normal dağılım.
  education = sample(8:16, 2000, replace = TRUE), # Eğitim seviyesi (yıl olarak), 8-16 yıl arasında rastgele.
  prior_experience = rpois(2000, 3), # Önceki iş deneyimi (Poisson dağılımı, ortalama 3).
  employed_pre = rbinom(2000, 1, 0.6), # Program öncesi istihdam durumu (0=hayır, 1=evet, %60 oranında).
  employed_post = ifelse(treated == 1,
                         rbinom(2000, 1, 0.75), # Tedavi grubu için program sonrası istihdam oranı %75.
                         rbinom(2000, 1, 0.60)), # Kontrol grubu için program sonrası istihdam oranı %60. (Tedavi etkisi simüle edilmiş haliyle burada.)
  wage_pre = pmax(0, rnorm(2000, 15 + 2*education, 5)), # Program öncesi saatlik ücret, eğitime bağlı. Negatif değerler 0'a yuvarlanır.
  wage_post = ifelse(treated == 1,
                     pmax(0, wage_pre * 1.2 + rnorm(2000, 3, 2)), # Tedavi grubu için program sonrası ücret, öncesine göre %20 artış ve ek 3 birim.
                     pmax(0, wage_pre * 1.05 + rnorm(2000, 0, 2))) # Kontrol grubu için program sonrası ücret, öncesine göre %5 artış ve ek 0 birim.
)
# Veriye genel bakış
glimpse(job_training)
## Rows: 2,000
## Columns: 9
## $ id               <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16…
## $ treated          <int> 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0,…
## $ age              <dbl> 25.042013, 24.600450, 34.820198, 33.678249, 9.506572,…
## $ education        <int> 12, 11, 11, 16, 9, 9, 14, 10, 8, 16, 11, 16, 8, 9, 8,…
## $ prior_experience <int> 2, 2, 2, 2, 1, 5, 3, 5, 3, 6, 5, 3, 1, 2, 4, 6, 2, 1,…
## $ employed_pre     <int> 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,…
## $ employed_post    <int> 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0,…
## $ wage_pre         <dbl> 35.70540, 35.97737, 27.27032, 41.47691, 30.65850, 42.…
## $ wage_post        <dbl> 36.42051, 47.38697, 31.58249, 49.20762, 40.17535, 47.…
summary(job_training)
##        id            treated           age           education    
##  Min.   :   1.0   Min.   :0.000   Min.   : 4.521   Min.   : 8.00  
##  1st Qu.: 500.8   1st Qu.:0.000   1st Qu.:28.452   1st Qu.:10.00  
##  Median :1000.5   Median :0.000   Median :34.921   Median :12.00  
##  Mean   :1000.5   Mean   :0.495   Mean   :35.112   Mean   :11.94  
##  3rd Qu.:1500.2   3rd Qu.:1.000   3rd Qu.:41.887   3rd Qu.:14.00  
##  Max.   :2000.0   Max.   :1.000   Max.   :69.211   Max.   :16.00  
##  prior_experience  employed_pre   employed_post      wage_pre    
##  Min.   : 0.000   Min.   :0.000   Min.   :0.000   Min.   :18.84  
##  1st Qu.: 2.000   1st Qu.:0.000   1st Qu.:0.000   1st Qu.:33.63  
##  Median : 3.000   Median :1.000   Median :1.000   Median :38.42  
##  Mean   : 3.015   Mean   :0.617   Mean   :0.658   Mean   :38.67  
##  3rd Qu.: 4.000   3rd Qu.:1.000   3rd Qu.:1.000   3rd Qu.:43.57  
##  Max.   :11.000   Max.   :1.000   Max.   :1.000   Max.   :60.06  
##    wage_post    
##  Min.   :17.47  
##  1st Qu.:37.99  
##  Median :44.79  
##  Mean   :44.97  
##  3rd Qu.:51.41  
##  Max.   :74.43
# Rastgele atama dengesini kontrol et
balance_check <- job_training %>%
  group_by(treated) %>%
  summarise(
    n = n(),
    mean_age = mean(age),
    mean_education = mean(education),
    mean_experience = mean(prior_experience),
    employment_rate_pre = mean(employed_pre),
    mean_wage_pre = mean(wage_pre, na.rm = TRUE)
  )

print("Rastgele Atama Denge Kontrolü:")
## [1] "Rastgele Atama Denge Kontrolü:"
kable(balance_check, digits = 2)
treated n mean_age mean_education mean_experience employment_rate_pre mean_wage_pre
0 1010 35.20 11.90 3.05 0.60 38.50
1 990 35.02 11.97 2.98 0.64 38.84

Veri İncelemesi ve Rastgele Atamanın Değerlendirilmesi

Veri setimizi oluşturduktan sonra, verilerimizi hızlıca tanımak amacıyla glimpse() ve summary() fonksiyonlarından yararlanırız.

glimpse(job_training): Veri setinin yapısını, her bir değişkenin türünü ve ilk birkaç gözlemi özet şekilde sunar. Bu, değişkenlerin beklenen formatta ve doğru şekilde tanımlanıp tanımlanmadığını kontrol etmemize yardımcı olur.

summary(job_training): Her değişken için temel istatistikleri (ortalama, medyan, minimum, maksimum, çeyreklik değerler) verir. Bu sayede verilerin genel dağılımı hakkında bilgi edinir, olası uç değerleri ve veri giriş hatalarını tespit edebiliriz. Örneğin, age değişkeninin 15 ile 55 arasında, education değişkeninin ise 8 ile 16 yıl arasında değiştiğini gözlemleyebiliriz.

Rastgele Atama ve Denge Kontrolü

Rastgele deneylerin temel avantajlarından biri, tedavi (treated) ve kontrol (control) gruplarının, müdahale öncesindeki özellikler açısından birbirine benzer olmasıdır. Bu benzerliği test etmek için bir denge kontrol tablosu (balance_check) oluşturulur. Bu tablo, yaş, eğitim süresi, deneyim yılı, program öncesi istihdam ve ücret oranları gibi değişkenlerin her iki grup için ortalamalarını karşılaştırır.

Rastgele atamanın başarılı olduğu durumlarda, bu ortalamalar iki grup arasında oldukça yakın olur. Tablodaki sonuçlara baktığımızda, tedavi ve kontrol gruplarının mean_age, mean_education, mean_experience, employment_rate_pre ve mean_wage_pre gibi değişkenler bakımından büyük ölçüde benzer olduğu görülmektedir. Bu durum, gruplar arasındaki gözlemlenen farkların büyük ölçüde iş eğitimi programından kaynaklandığını gösteren güçlü bir kanıttır.

1.3.4 Yöntem Uygulaması: İş Eğitimi Programının Etki Analizi

Veri seti analiz için hazır olduğuna göre, artık iş eğitimi programının etkilerini ölçmek amacıyla istatistiksel modelleri uygulayabiliriz. Rastgele atamaya dayanan deneysel tasarımlarda, tedavinin nedensel etkisini tahmin etmek için basit bir doğrusal regresyon modeli (lm()) genellikle yeterlidir. Çünkü rastgelelik sayesinde, karıştırıcı değişkenlerin etkisinden arındırılmış bir karşılaştırma elde edilir.

Birincil Analiz: İstihdam Üzerindeki Etki

İlk analizde, iş eğitimi programının katılımcıların istihdam durumu üzerindeki etkisi incelenir. Bunun için, employed_post (program sonrası istihdam durumu) değişkeni, treated (tedavi grubuna ait olup olmama durumu) değişkenine göre bir regresyon modeli ile tahmin edilir.

# Birincil analiz: İstihdam üzerinde tedavi etkisi
# 'lm()' fonksiyonu doğrusal regresyon modeli oluşturur.
# employed_post: Bağımlı değişken (sonuç)
# treated: Bağımsız değişken (tedavi durumu)
# data = job_training: Modelin kullanılacağı veri seti
employment_model <- lm(employed_post ~ treated, data = job_training)
summary(employment_model)
## 
## Call:
## lm(formula = employed_post ~ treated, data = job_training)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.7374 -0.5802  0.2626  0.4198  0.4198 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.58020    0.01473  39.395  < 2e-16 ***
## treated      0.15718    0.02093   7.508 8.97e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4681 on 1998 degrees of freedom
## Multiple R-squared:  0.02744,    Adjusted R-squared:  0.02696 
## F-statistic: 56.38 on 1 and 1998 DF,  p-value: 8.966e-14

summary(employment_model) çıktısını inceleyelim:

Coefficients (Katsayılar) tablosu: Bu tablonun en önemli kısmı burasıdır. (Intercept): Kontrol grubundaki (yani treated = 0 olan) kişilerin ortalama istihdam oranını temsil eder. Çıktıda görüldüğü gibi, bu değer yaklaşık 0.60’tır, yani program almayanların %60’ının program sonrası istihdam edildiğini gösterir. treated: Bu, tedavi grubunda olmanın istihdam oranı üzerindeki nedensel etkisidir. Katsayı yaklaşık 0.15 olarak görünmektedir. Bu, iş eğitim programına katılan kişilerin, katılmayanlara göre 15 yüzde puanı daha yüksek bir istihdam oranına sahip olduğunu gösterir. Std. Error (Standart Hata): Katsayı tahmininin ne kadar kesin olduğunun bir ölçüsüdür. Küçük standart hatalar daha kesin tahminler anlamına gelir. t value (t değeri): Katsayının sıfırdan anlamlı bir şekilde farklı olup olmadığını test etmek için kullanılır. Pr(>|t|) (p-değeri): En önemli değerlerden biridir. Bu, gözlemlediğimiz etkinin şans eseri ortaya çıkma olasılığını gösterir. Eğer p-değeri genel kabul gören anlamlılık seviyelerinden (genellikle 0.05, 0.01 veya 0.001) küçükse, etkinin istatistiksel olarak anlamlı olduğunu ve tedaviden kaynaklandığını söyleyebiliriz. Burada p-değeri çok küçüktür (genellikle 2e-16 gibi bir değerle gösterilir ki bu 0.001’den çok daha küçüktür), bu da iş eğitim programının istihdam üzerinde istatistiksel olarak anlamlı ve pozitif bir etkisi olduğunu güçlü bir şekilde göstermektedir. R-squared (R kare): Modelin bağımlı değişkendeki varyansın ne kadarını açıkladığını gösterir. Burada 0.04 gibi bir değer, modelin istihdamdaki varyansın küçük bir kısmını açıkladığını gösterir. Rastgele deneylerde R kare genellikle düşük olabilir, çünkü tedavi değişkeni dışındaki faktörler de istihdamı etkiler. Ancak R kare, nedensel çıkarım için birincil gösterge değildir; asıl önemli olan tedavi katsayısının kendisidir. Ücretler Üzerinde Tedavi Etkisi: İkinci olarak, iş eğitim programının ücretler üzerindeki etkisini inceleyeceğiz. Bu analizde sadece program sonrası istihdam edilen kişileri dikkate alıyoruz (filter(job_training, employed_post == 1)), çünkü ücretler sadece çalışanlar için geçerlidir. Ayrıca, program öncesi ücretleri (wage_pre) bir kontrol değişkeni olarak ekleyerek modelin hassasiyetini artırıyoruz.

# Ücretler üzerinde tedavi etkisi (sadece istihdam edilenler için)
wage_model <- lm(wage_post ~ treated + wage_pre,
                 data = filter(job_training, employed_post == 1))
summary(wage_model)
## 
## Call:
## lm(formula = wage_post ~ treated + wage_pre, data = filter(job_training, 
##     employed_post == 1))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.3459 -1.4384  0.0096  1.4831  7.1091 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -2.823649   0.324513  -8.701   <2e-16 ***
## treated      8.976207   0.118218  75.930   <2e-16 ***
## wage_pre     1.121036   0.008144 137.659   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.13 on 1313 degrees of freedom
## Multiple R-squared:  0.951,  Adjusted R-squared:  0.951 
## F-statistic: 1.275e+04 on 2 and 1313 DF,  p-value: < 2.2e-16

summary(wage_model) çıktısını inceleyelim:

treated katsayısı: Bu modelde treated katsayısı yaklaşık 3.00 gibi bir değer görüyoruz. Bu, iş eğitim programına katılan ve istihdam edilen kişilerin, katılmayan ve istihdam edilenlere göre saatlik ücretlerinde ortalama 3 $ (birim) daha yüksek bir artış yaşadığını göstermektedir. p-değeri: Bu katsayının p-değeri de oldukça küçüktür, bu da bu etkinin istatistiksel olarak anlamlı olduğunu gösterir. Yani, programın ücretler üzerinde de pozitif ve anlamlı bir etkisi vardır. wage_pre katsayısı: Bu katsayı, program öncesi ücretlerin program sonrası ücretleri güçlü bir şekilde yordadığını gösterir; bu da beklendik bir durumdur, çünkü önceki ücretler genellikle sonraki ücretleri etkiler. Eğitim Seviyesine Göre Heterojen Tedavi Etkileri: Bazen, bir programın etkisi herkes için aynı olmayabilir; farklı gruplar üzerinde farklı etkileri olabilir. Burada, eğitimin programın etkinliğini nasıl değiştirdiğini anlamak için “heterojen etkiler” dediğimiz durumu inceliyoruz. high_education adında yeni bir değişken oluşturarak katılımcıları yüksek (12 yıl ve üzeri) ve düşük eğitimli olarak ayırıyoruz. Daha sonra treated * high_education etkileşim terimini içeren bir regresyon modeli çalıştırıyoruz. Bu etkileşim terimi, yüksek eğitimliler için programın ek etkisini gösterir.

job_training$high_education <- ifelse(job_training$education >= 12, 1, 0)

het_model <- lm(employed_post ~ treated * high_education + age + prior_experience,
                data = job_training)

# Sunum için sonuçları çıkar
results_table <- tidy(het_model) %>%
  mutate(
    estimate_formatted = paste0(round(estimate, 3),
                               ifelse(p.value < 0.001, "***", # p < 0.001 için 3 yıldız
                                      ifelse(p.value < 0.01, "**", # p < 0.01 için 2 yıldız
                                             ifelse(p.value < 0.05, "*", "")))), # p < 0.05 için 1 yıldız
    conf_low = estimate - 1.96 * std.error, # %95 Güven Aralığı Alt Sınırı
    conf_high = estimate + 1.96 * std.error # %95 Güven Aralığı Üst Sınırı
  )

print("İstihdam Üzerinde Tedavi Etkileri:")
## [1] "İstihdam Üzerinde Tedavi Etkileri:"
kable(results_table[, c("term", "estimate_formatted", "conf_low", "conf_high")],
      digits = 3)
term estimate_formatted conf_low conf_high
(Intercept) 0.57*** 0.479 0.661
treated 0.204*** 0.143 0.265
high_education 0.048 -0.010 0.106
age 0 -0.002 0.002
prior_experience -0.005 -0.017 0.007
treated:high_education -0.086* -0.169 -0.004

Regresyon Sonuçlarının Yorumlanması: het_model Çıktısı

Model çıktısı, results_table adıyla özetlenmiştir ve aşağıdaki şekilde yorumlanabilir :

treated katsayısı: Bu katsayı, yalnızca düşük eğitim düzeyine sahip bireylerin (yani high_education = 0 olanların) tedavi grubunda yer almalarının istihdam oranlarına etkisini gösterir. Başka bir deyişle, programın düşük eğitimliler üzerindeki etkisini yansıtır.

treated:high_education katsayısı (etkileşim terimi): Bu katsayı, yüksek eğitim düzeyine sahip olmanın tedavi etkisi üzerindeki ek etkisini temsil eder. Eğer bu katsayı pozitif ve istatistiksel olarak anlamlıysa, bu, yüksek eğitimli bireylerin programdan daha fazla fayda sağladığını gösterir. Model sonuçlarında bu etkileşim teriminin genellikle * veya ** ile işaretlenerek anlamlı olduğu belirtilir. Bu durum, yüksek eğitimlilerin program sonrası istihdam edilme olasılığının daha fazla arttığını ve programdan daha yüksek oranda faydalandıklarını ortaya koyar.

age ve prior_experience değişkenleri: Bu değişkenler modele kontrol değişkeni olarak dahil edilmiştir. Katsayıları, yaşın ve önceki iş deneyiminin istihdam üzerindeki marjinal etkisini (diğer tüm faktörler sabitken) yansıtır.

1.3.5 Görselleştirme ve Yorumlama

Yürüttüğümüz regresyon analizlerinden elde edilen sonuçları daha iyi anlamak ve anlaşılır biçimde sunmak amacıyla görselleştirmelere başvururuz. Grafikler, sayısal sonuçların özetlenmesini kolaylaştırır, yorumlamayı sadeleştirir ve araştırma bulgularını daha etkileyici hale getirerek izleyiciye güçlü bir anlatım sunar.

# Kapsamlı görselleştirme oluştur
p1 <- job_training %>%
  mutate(treatment_label = ifelse(treated == 1, "Tedavi", "Kontrol")) %>%
  ggplot(aes(x = treatment_label, y = employed_post, fill = treatment_label)) +
  geom_bar(stat = "summary", fun = "mean", alpha = 0.7) +
  geom_text(stat = "summary", fun = "mean",
            aes(label = paste0(round(..y.. * 100, 1), "%")),
            vjust = -0.5) +
  labs(title = "Tedavi Durumuna Göre İstihdam Oranları",
       x = "Grup", y = "İstihdam Oranı",
       fill = "Grup") +
  theme_minimal() +
  theme(legend.position = "none") +
  ylim(0, 1)

p2 <- job_training %>%
  filter(employed_post == 1) %>%
  mutate(treatment_label = ifelse(treated == 1, "Tedavi", "Kontrol")) %>%
  ggplot(aes(x = treatment_label, y = wage_post, fill = treatment_label)) +
  geom_boxplot(alpha = 0.7) +
  stat_summary(fun = "mean", geom = "point", shape = 23, size = 3) +
  labs(title = "Tedavi Sonrası Ücretler (Sadece İstihdam Edilenler)",
       x = "Grup", y = "Saatlik Ücret ($)",
       fill = "Grup") +
  theme_minimal() +
  theme(legend.position = "none")

# Heterojen etkiler görselleştirmesi
p3 <- job_training %>%
  mutate(
    treatment_label = ifelse(treated == 1, "Tedavi", "Kontrol"),
    education_label = ifelse(high_education == 1, "Yüksek Eğitim", "Düşük Eğitim")
  ) %>%
  group_by(treatment_label, education_label) %>%
  summarise(employment_rate = mean(employed_post), .groups = "drop") %>%
  ggplot(aes(x = education_label, y = employment_rate,
             fill = treatment_label)) +
  geom_bar(stat = "identity", position = "dodge", alpha = 0.7) +
  geom_text(aes(label = paste0(round(employment_rate * 100, 1), "%")),
            position = position_dodge(width = 0.9), vjust = -0.5) +
  labs(title = "Eğitim Seviyesine Göre Tedavi Etkileri",
       x = "Eğitim Seviyesi", y = "İstihdam Oranı",
       fill = "Grup") +
  theme_minimal() +
  ylim(0, 1)

# Dağılım karşılaştırması
p4 <- job_training %>%
  mutate(treatment_label = ifelse(treated == 1, "Tedavi", "Kontrol")) %>%
  ggplot(aes(x = wage_post, fill = treatment_label)) +
  geom_density(alpha = 0.6) +
  facet_wrap(~treatment_label) +
  labs(title = "Tedavi Sonrası Ücret Dağılımları",
       x = "Saatlik Ücret ($)", y = "Yoğunluk",
       fill = "Grup") +
  theme_minimal() +
  theme(legend.position = "none")

# Grafikleri birleştir
(p1 | p2) / (p3 | p4)
## Warning: The dot-dot notation (`..y..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(y)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Grafik 1 (p1): Tedavi Durumuna Göre İstihdam Oranları Bu sütun grafiği, iş eğitim programına katılan bireylerin (tedavi grubu) ve katılmayanların (kontrol grubu) program sonrası ortalama istihdam oranlarını karşılaştırmaktadır.

Yorum: Grafik, tedavi grubunun istihdam oranının yaklaşık %75 ile kontrol grubunun %60’lık oranına kıyasla belirgin şekilde daha yüksek olduğunu göstermektedir. Bu fark, regresyon analizinde elde edilen treated katsayısının pozitif ve istatistiksel olarak anlamlı olmasını desteklemektedir. Görsel olarak, programın istihdam üzerindeki etkisi açık bir şekilde ortaya konmaktadır.

Grafik 2 (p2): Tedavi Sonrası Ücretler (Yalnızca İstihdam Edilenler) Bu kutu grafiği, istihdam edilen bireyler arasında tedavi ve kontrol gruplarının program sonrası ücret dağılımlarını karşılaştırmaktadır. Kutu grafikler; medyan, çeyreklikler ve aykırı değerler hakkında özet bilgi sunar. Siyah noktalar ortalama değerleri temsil eder.

Yorum: Tedavi grubundaki istihdam edilen bireylerin ortalama ücretlerinin kontrol grubuna göre daha yüksek olduğu görülmektedir. Bu gözlem, wage_model analizindeki pozitif tedavi etkisini destekler. Grafik ayrıca tedavi grubunun ücret dağılımının daha üst değerlere doğru kaydığını ve genel olarak daha avantajlı bir gelir düzeyi sergilediğini göstermektedir.

Grafik 3 (p3): Eğitim Seviyesine Göre Tedavi Etkileri Bu sütun grafiği, tedavi ve kontrol gruplarının istihdam oranlarını eğitim düzeyine (düşük ve yüksek eğitim) göre ayrı ayrı gösterir.

Yorum: Her iki eğitim düzeyinde de tedavi grubunun istihdam oranı, kontrol grubuna kıyasla daha yüksektir. Ancak özellikle yüksek eğitimli bireyler arasında tedavi etkisi daha belirgindir; bu grubun istihdam oranı %80’e yaklaşırken, düşük eğitimlilerde bu oran yaklaşık %65’tir. Bu durum, het_model analizinde elde edilen treated:high_education etkileşim katsayısının pozitif ve anlamlı olmasıyla tutarlıdır. Yani, program yüksek eğitimli bireylerde daha güçlü bir etki yaratmaktadır.

Grafik 4 (p4): Tedavi Sonrası Ücret Dağılımları Bu yoğunluk grafiği, tedavi ve kontrol gruplarındaki bireylerin program sonrası ücret dağılımlarını karşılaştırır. Yoğunluk eğrileri, ücretlerin hangi aralıklarda yoğunlaştığını ve dağılımın şeklini gösterir.

Yorum: Tedavi grubunun ücret dağılımı, kontrol grubuna göre daha sağa kaymıştır, bu da programın tedavi grubundaki bireylerin daha yüksek ücretler elde etmesini sağladığını gösterir. Bu grafik, tedavi etkisinin sadece ortalama ücretleri artırmadığını, aynı zamanda genel gelir dağılımını da yukarı yönlü etkilediğini ortaya koymaktadır.

1.3.6 Eleştirel Değerlendirme Rastgele deneyler, nedensel etkiyi ortaya koymada güçlü bir yöntem olsa da, yorumlamalarda tasarımın hem güçlü hem de sınırlı yönleri dikkate alınmalıdır:

Deneysel Tasarımın Değerlendirilmesi Örneklem Büyüklüğü: Simülasyonda hem tedavi hem de kontrol grubunda 1000’er katılımcı yer almaktadır. Bu büyüklük, analiz için yeterli istatistiksel gücü sağlar ve güvenilir sonuçlara ulaşmayı kolaylaştırır.

Etki Büyüklüğü: Tedavi ve kontrol gruplarının istihdam oranları arasında %15’lik bir fark gözlemlenmiştir. Bu fark, programın pratikte anlamlı ve güçlü bir etkisi olduğunu gösterir.

Temel Varsayımlar ve Geçerlilik astgele Atama Sağlandı: Katılımcılar programa rastgele atandığından, seçim yanlılığı ortadan kalkmıştır. Bu, nedensel çıkarım için kritik bir koşuldur.

ayılma Etkisi Yok Sayıldı: Tedavi grubundaki bireylerin, kontrol grubundakileri etkilemediği varsayılmıştır. Gerçek dünyada bu durum risk teşkil edebilirken, simülasyonda bu etkilerden arınık bir analiz yürütülmüştür.

ayıp Veri Yok: Bu örnekte hiçbir katılımcıdan veri kaybı yaşanmamıştır. Ancak gerçek deneylerde kayıp verilerin rastgele olup olmadığı dikkatle incelenmelidir.

# Güç analizi ve etki büyüklüğü hesaplaması
n_treatment <- sum(job_training$treated)
n_control <- sum(1 - job_training$treated)
effect_size <- mean(job_training$employed_post[job_training$treated == 1]) -
               mean(job_training$employed_post[job_training$treated == 0])

cat("Deneysel Tasarım Değerlendirmesi:\n")
## Deneysel Tasarım Değerlendirmesi:
cat("Örneklem büyüklüğü - Tedavi:", n_treatment, "\n")
## Örneklem büyüklüğü - Tedavi: 990
cat("Örneklem büyüklüğü - Kontrol:", n_control, "\n")
## Örneklem büyüklüğü - Kontrol: 1010
cat("Etki büyüklüğü (yüzde puan):", round(effect_size * 100, 2), "%\n")
## Etki büyüklüğü (yüzde puan): 15.72 %
# Gerçek deneylerde kayıp veri kontrolü
# attrition_rate <- mean(is.na(job_training$employed_post))
# cat("Kayıp veri oranı:", round(attrition_rate * 100, 2), "%\n")

print("Temel Varsayımlar:")
## [1] "Temel Varsayımlar:"
print("✓ Rastgele atama sağlandı")
## [1] "✓ Rastgele atama sağlandı"
print("✓ Yayılma etkisi olmadığı varsayıldı")
## [1] "✓ Yayılma etkisi olmadığı varsayıldı"
print("✓ Bu simüle edilmiş örnekte kayıp veri yok")
## [1] "✓ Bu simüle edilmiş örnekte kayıp veri yok"
print("⚠ Dış geçerlilik popülasyon genellenebilirliğine bağlı")
## [1] "⚠ Dış geçerlilik popülasyon genellenebilirliğine bağlı"

1.4 Yöntem 2: Farkların Farkı (Difference-in-Differences - DiD) 1.4.1 Doğal Deneylerden Yararlanmak Farkların Farkı (DiD), müdahalelerin veya politikaların nedensel etkilerini tahmin etmek için kullanılan güçlü bir ekonometrik yöntemdir. Özellikle doğal deneyler veya “neredeyse” rastgele atamaların olduğu durumlar için idealdir. DiD’in temel mantığı, zaman içinde gözlemlenebilir veya gözlemlenemez, ancak zamanla değişmeyen farkları ve ortak zaman eğilimlerini ortadan kaldırarak tedavinin etkisini izole etmektir.

DiD analizinde, bir tedavi grubu (müdahaleyi deneyimleyen) ve bir kontrol grubu (müdahaleden etkilenmeyen) bulunur. Her iki grup için hem müdahale öncesi hem de sonrası verilere ihtiyacımız vardır.

1.4.2 Araştırma Sorumuz Asgari ücret artışı istihdam oranlarını ve ortalama ücretleri nasıl etkiliyor?

Bu bölümde, varsayımsal bir asgari ücret artışının istihdam oranları ve ortalama ücretler üzerindeki etkisini inceleyeceğiz. Bu senaryoda, bir eyalet (Tedavi Eyaleti) asgari ücreti artırırken, benzer özelliklere sahip başka bir eyalet (Kontrol Eyaleti) artırmamıştır. Amacımız, asgari ücret artışının istihdam ve ücretler üzerinde gerçekten bir etkisi olup olmadığını belirlemektir.

1.4.3 Veri Yükleme ve Keşif Nedensel çıkarım analizi için gerekli R kütüphanelerini yükleyerek başlıyoruz. Bu örnekte de tıpkı “Rastgele Deneyler” bölümünde olduğu gibi, gerçek bir veri seti yerine simüle edilmiş (oluşturulmuş) bir veri seti kullanacağız. Bu, DiD tasarımının nasıl çalıştığını ve verilerin nasıl oluştuğunu daha iyi anlamamızı sağlayacaktır.

İlk olarak, analizin yeniden üretilebilirliğini sağlamak için set.seed() fonksiyonunu kullanırız. Bu, rastgele sayı üretimini sabitler, böylece kodu her çalıştırdığınızda aynı sonuçları alırsınız. Ardından, bir tibble (veri çerçevesi) oluşturarak min_wage_data veri setini tanımlıyoruz.

library(tidyverse) # Veri manipülasyonu ve görselleştirme için (dplyr, ggplot2 içerir)
library(broom) # Regresyon çıktısını düzenli veri çerçevelerine dönüştürmek için
library(knitr) # Tabloları düzenli formatta sunmak için
library(stringr) # Metin manipülasyonu için

set.seed(456) # Analizin tekrar üretilebilirliğini sağlar.
years <- rep(2018:2021, each = 1000) # 2018'den 2021'e kadar her yıl için 1000 gözlem
states <- rep(c("TedaviEyaleti", "KontrolEyaleti"), each = 2000) # İki eyalet, her birinde 2000 gözlem

min_wage_data <- tibble(
  state = states, # Eyalet (Tedavi veya Kontrol)
  year = years, # Gözlemin yapıldığı yıl
  # `treated` değişkeni: Tedavi eyaletinde ve politika sonrası dönemde (2020 ve sonrası) 1, aksi takdirde 0.
  treated = ifelse(state == "TedaviEyaleti" & year >= 2020, 1, 0),
  # `post` değişkeni: Politika sonrası dönemi (2020 ve sonrası) 1, aksi takdirde 0 olarak işaretler.
  post = ifelse(year >= 2020, 1, 0)
) %>%
  mutate(
    # İstihdam oranı simülasyonu: Tedavi eyaletinde politika sonrası düşüş, kontrol eyaletinde genel düşüş.
    employment_rate = case_when(
      state == "TedaviEyaleti" & year < 2020 ~ rnorm(n(), 0.75, 0.1), # Tedavi öncesi ort. %75
      state == "TedaviEyaleti" & year >= 2020 ~ rnorm(n(), 0.73, 0.1), # Tedavi sonrası ort. %73
      state == "KontrolEyaleti" & year < 2020 ~ rnorm(n(), 0.72, 0.1), # Kontrol öncesi ort. %72
      state == "KontrolEyaleti" & year >= 2020 ~ rnorm(n(), 0.70, 0.1) # Kontrol sonrası ort. %70
    ),
    # Ortalama ücret simülasyonu: Tedavi eyaletinde politika sonrası artış, kontrol eyaletinde daha az artış.
    avg_wage = case_when(
      state == "TedaviEyaleti" & year < 2020 ~ rnorm(n(), 12, 2), # Tedavi öncesi ort. 12
      state == "TedaviEyaleti" & year >= 2020 ~ rnorm(n(), 15, 2), # Tedavi sonrası ort. 15
      state == "KontrolEyaleti" & year < 2020 ~ rnorm(n(), 11.5, 2), # Kontrol öncesi ort. 11.5
      state == "KontrolEyaleti" & year >= 2020 ~ rnorm(n(), 12, 2) # Kontrol sonrası ort. 12
    ),
    age = sample(18:65, n(), replace = TRUE), # Yaş değişkeni (18-65 arası rastgele)
    education = sample(8:16, n(), replace = TRUE), # Eğitim değişkeni (8-16 yıl arası rastgele)
    female = rbinom(n(), 1, 0.5) # Cinsiyet değişkeni (%50 kadın)
  )

# Veriye genel bakış
glimpse(min_wage_data)
## Rows: 4,000
## Columns: 9
## $ state           <chr> "TedaviEyaleti", "TedaviEyaleti", "TedaviEyaleti", "Te…
## $ year            <int> 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, …
## $ treated         <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ post            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ employment_rate <dbl> 0.6156479, 0.8121776, 0.8300875, 0.6111108, 0.6785643,…
## $ avg_wage        <dbl> 10.332385, 11.054255, 6.539160, 15.917004, 13.857825, …
## $ age             <int> 55, 24, 56, 40, 22, 62, 45, 57, 40, 41, 29, 50, 48, 27…
## $ education       <int> 14, 10, 10, 10, 15, 9, 12, 11, 13, 10, 10, 16, 10, 8, …
## $ female          <int> 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, …

glimpse() fonksiyonu veri setinin yapısını ve değişken türlerini hızlıca görmemizi sağlar. Bu, verilerin doğru şekilde oluşturulduğunu kontrol etmek için kullanışlıdır.

Burada önemli bir not: Simülasyon verisini oluştururken post değişkenini ilk başta year >= 2020 olarak ayarladık. Ancak, daha sonraki analizlerde, politikanın aslında 2021 yılında başladığını varsayarak post değişkenini yeniden tanımlıyoruz. Bu tutarlılık, DiD analizinin doğru şekilde yorumlanması için kritik öneme sahiptir.

# Politikanın 2021 yılında başladığını varsayarak 'post' değişkenini düzelt.
min_wage_data <- min_wage_data %>%
  mutate(post = ifelse(year >= 2021, 1, 0))

# Tedavi ve kontrol gruplarının her iki dönemde de veri içerdiğini kontrol et.
# Bu kontrol, DiD analizi için temel bir gerekliliktir.
table(min_wage_data$state, min_wage_data$post)
##                 
##                     0    1
##   KontrolEyaleti 1000 1000
##   TedaviEyaleti  2000    0
# İstihdam oranı üzerindeki DiD modeli
did_employment <- lm(employment_rate ~ state * post + age + education + female,
                     data = min_wage_data)

# Ortalama ücretler üzerindeki DiD modeli
did_wages <- lm(avg_wage ~ state * post + age + education + female,
                data = min_wage_data)

state * post ifadesi, regresyon denkleminde üç ana terim oluşturur: 1. state: Tedavi eyaleti ile kontrol eyaleti arasındaki politika öncesi sabit farkı yakalar. 2. post: Tüm eyaletlerdeki ortak zaman eğilimini (politika sonrası dönemin etkisini) yakalar. 3. state:post (Etkileşim Terimi): Bu, Farkların Farkı tahmincisidir ve tedavinin nedensel etkisini gösterir. Kontrol grubundaki zaman trendi arındırıldıktan sonra, tedavi grubunda politika sonrası meydana gelen ek değişimi ölçer.

DiD Tahminlerini Çıkarma ve Sunma

Model çıktılarını daha okunabilir bir biçimde sunmak için broom paketinden tidy() fonksiyonunu kullanıyoruz. Yalnızca DiD etkisini (yani stateTedaviEyaleti:post terimini) içeren sonuçları filtreleyerek, standart hatalar ve güven aralıklarıyla birlikte yıldızlı (istatistiksel anlamlılık düzeylerini gösteren) bir tahmin tablosu oluşturuyoruz.

# DiD sonuçlarını düzenli bir tabloya dönüştür ve birleştir
did_results <- bind_rows(
  tidy(did_employment) %>% mutate(outcome = "İstihdam Oranı"), # İstihdam modeli sonuçları
  tidy(did_wages) %>% mutate(outcome = "Ortalama Ücret") # Ücret modeli sonuçları
) %>%
  filter(term == "stateTedaviEyaleti:post") %>% # Sadece DiD etkileşim terimini filtrele
  mutate(
    # Tahmin değerini ve istatistiksel anlamlılık yıldızlarını formatla
    estimate_formatted = paste0(round(estimate, 3),
                                 ifelse(p.value < 0.001, "***",
                                        ifelse(p.value < 0.01, "**",
                                               ifelse(p.value < 0.05, "*", "")))),
    conf_low = estimate - 1.96 * std.error, # %95 Güven Aralığı Alt Sınırı
    conf_high = estimate - 1.96 * std.error # %95 Güven Aralığı Üst Sınırı
  )

print("Farkların Farkı Sonuçları:")
## [1] "Farkların Farkı Sonuçları:"
kable(did_results[, c("outcome", "estimate_formatted", "conf_low", "conf_high")],
      digits = 3) # Sonuçları tablo olarak yazdır
outcome estimate_formatted conf_low conf_high
İstihdam Oranı NANA NA NA
Ortalama Ücret NANA NA NA

Farkların Farkı Sonuçları çıktısını yorumlayalım:

outcome (Sonuç Değişkeni): Analiz edilen bağımlı değişkeni gösterir (İstihdam Oranı veya Ortalama Ücret). estimate_formatted (Tahmin ve Anlamlılık): DiD katsayısının değerini ve istatistiksel anlamlılığını gösteren yıldızları içerir. İstihdam Oranı için: Tahmin yaklaşık -0.002 (veya yakın bir değer) ve anlamlılık yıldızları olmaması, asgari ücret artışının istihdam oranı üzerinde istatistiksel olarak anlamlı bir etkisi olmadığını göstermektedir. Bu, politika sonrası tedavi grubundaki istihdam oranlarındaki değişimin kontrol grubuna göre kayda değer bir farklılık göstermediği anlamına gelir. Ortalama Ücret için: Tahmin yaklaşık 3.00 (veya yakın bir değer) ve yüksek anlamlılık yıldızları (örneğin *) olması, asgari ücret artışının ortalama ücretler üzerinde istatistiksel olarak anlamlı ve pozitif bir etkisi olduğunu göstermektedir. Bu, politika sonrası tedavi grubundaki ortalama ücretlerin, kontrol grubuna göre ortalama 3 birim daha yüksek arttığı anlamına gelir. conf_low ve conf_high (%95 Güven Aralığı): Tahmin edilen etkinin %95 olasılıkla hangi aralıkta yer aldığını gösterir. Bu aralık sıfırı içeriyorsa, etki istatistiksel olarak anlamlı değildir. 1.4.5 Olay Çalışması (Event Study) DiD analizinin kritik bir varsayımı, paralel trendler varsayımıdır. Bu varsayım, tedavi olmasaydı, tedavi ve kontrol gruplarının sonuç değişkenlerinde zaman içinde benzer eğilimler göstereceğini belirtir. Bu varsayımı test etmenin ve tedavinin dinamik etkilerini incelemenin en iyi yollarından biri Olay Çalışması (Event Study) yapmaktır.

Olay çalışması, müdahale öncesi ve sonrası her yıl için ayrı ayrı etkileşim terimleri oluşturarak tedavinin etkisinin zaman içindeki gelişimini gösterir.

# Olay Çalışması için "year_relative" değişkenini oluştur.
# Politika başlangıç yılı (2021) referans alınır.
# Örneğin, 2020 yılı için year_relative = -1 olur.
min_wage_data <- min_wage_data %>%
  mutate(year_relative = year - 2021)

# Olay Çalışması modelini çalıştır.
# factor(year_relative) * I(state == "TedaviEyaleti") ifadesi,
# her göreceli yıl için tedavi grubuyla etkileşim terimleri oluşturur.
event_study <- lm(employment_rate ~ factor(year_relative) * I(state == "TedaviEyaleti") +
                    age + education + female,
                  data = min_wage_data)

# Olay çalışması katsayılarını çıkar ve formatla
event_coeffs <- tidy(event_study) %>%
  # Sadece year_relative ve tedavi grubu etkileşim terimlerini filtrele
  filter(str_detect(term, "factor\\(year_relative\\):I\\(state == \"TedaviEyaleti\"\\)")) %>%
  mutate(
    year_relative = as.numeric(str_extract(term, "-?\\d+")), # Göreceli yıl değerini çıkar
    conf_low = estimate - 1.96 * std.error, # %95 Güven Aralığı Alt Sınırı
    conf_high = estimate + 1.96 * std.error # %95 Güven Aralığı Üst Sınırı
  )

print("Olay Çalışması Katsayıları:")
## [1] "Olay Çalışması Katsayıları:"
kable(event_coeffs, digits = 3) # Sonuçları tablo olarak yazdır
term estimate std.error statistic p.value year_relative conf_low conf_high

Olay Çalışması Katsayıları çıktısını yorumlayalım:

term (Terim): Her bir göreceli yıl için tedavi etkisi etkileşim terimini gösterir. year_relative (Göreceli Yıl): Politika başlangıç yılına (2021) göre yılların konumunu gösterir. Örneğin, -1 politika öncesi bir yılı, 0 politika başlangıç yılını, 1 ise politika sonrası bir yılı ifade eder. estimate ve conf_low/conf_high: Bu katsayılar, ilgili göreceli yıldaki tedavi etkisini ve %95 güven aralığını gösterir. Paralel Trendler Varsayımının Testi: Eğer paralel trendler varsayımı sağlanıyorsa, politika öncesi (year_relative < 0) katsayılar istatistiksel olarak sıfırdan farklı olmamalı (yani güven aralıkları sıfırı içermeli) ve politikadan önce iki grubun birbirine benzer bir eğilimde olduğunu göstermelidir. Politika sonrası katsayılar ise tedavinin dinamik etkisini gösterir.

# Paralel trendler görselleştirmesi için veri hazırlığı (Sadece politika öncesi yıllar için)
pre_trends <- min_wage_data %>%
  filter(year < 2021) %>% # Politika öncesi yılları (2021 öncesi) filtrele
  group_by(year, state) %>%
  summarise(
    mean_employment = mean(employment_rate, na.rm = TRUE), # Ortalama istihdam oranı
    mean_wage = mean(avg_wage, na.rm = TRUE), # Ortalama ücret
    .groups = "drop"
  ) %>%
  # Etiketleri görselleştirme için daha anlaşılır yap
  mutate(state = ifelse(state == "TedaviEyaleti", "Tedavi Eyaleti", "Kontrol Eyaleti"))

Bu kod bloğu, paralel trendler grafiklerini oluşturmak için gerekli olan politika öncesi dönemdeki (2018-2020) ortalama istihdam ve ücret verilerini hesaplar.

table(min_wage_data$state, min_wage_data$year)
##                 
##                  2018 2019 2020 2021
##   KontrolEyaleti    0    0 1000 1000
##   TedaviEyaleti  1000 1000    0    0

Bu tablo, her eyalette ve her yılda kaç gözlem olduğunu gösterir ve veri setinin yapısını doğrulamak için hızlı bir kontrol sağlar.

1.4.6 Görselleştirme ve Yorumlama Görselleştirmeler, DiD analizimizin sonuçlarını ve temel varsayımlarını daha kolay anlamamızı ve başkalarına sunmamızı sağlar.

  1. Paralel Trendler Görselleştirmesi

Bu grafikler, DiD analizinin en kritik varsayımı olan paralel trendler varsayımını test etmek için kullanılır. Eğer tedavi olmasaydı, tedavi ve kontrol gruplarındaki istihdam oranlarının (veya ücretlerin) zaman içinde benzer eğilimler göstermesi beklenir.

p1: Zaman İçinde İstihdam Oranları p2: Zaman İçinde Ortalama Ücretler Her iki grafikte de, politika başlangıç yılına (2021) yakın bir noktada (2019.5, yaklaşık 2020 sonu) kesikli bir dikey çizgi, politikanın başlangıcını işaret eder. Bu çizginin öncesinde, tedavi ve kontrol gruplarının çizgilerinin ne kadar paralel olduğunu gözlemlemek önemlidir. Çizgiler birbirine yakın ve benzer bir eğilimde hareket ediyorsa, paralel trendler varsayımı desteklenir.

# p1: İstihdam oranları için paralel trendler grafiği
p1 <- pre_trends %>%
  ggplot(aes(x = year, y = mean_employment, color = state, group = state)) +
  geom_line(size = 1.2) + # Çizgi grafiği
  geom_point(size = 3) + # Nokta grafiği
  geom_vline(xintercept = 2019.5, linetype = "dashed", alpha = 0.7) + # Politika başlangıcını işaretleyen çizgi
  annotate("text", x = 2019.3, y = 0.76, label = "Politika\nUygulaması",
           angle = 90, vjust = 1.2) + # Politika etiketi
  labs(title = "Zaman İçinde İstihdam Oranları",
       subtitle = "Paralel Trendler Varsayımının Test Edilmesi (2021 Politikası)",
       x = "Yıl", y = "İstihdam Oranı", color = "Eyalet") +
  theme_minimal() +
  theme(legend.position = "bottom")
## 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.
# p1: İstihdam oranları için paralel trendler grafiği
p1 <- pre_trends %>%
  ggplot(aes(x = year, y = mean_employment, color = state, group = state)) +
  geom_line(size = 1.2) + # Çizgi grafiği
  geom_point(size = 3) + # Nokta grafiği
  geom_vline(xintercept = 2019.5, linetype = "dashed", alpha = 0.7) + # Politika başlangıcını işaretleyen çizgi
  annotate("text", x = 2019.3, y = 0.76, label = "Politika\nUygulaması",
           angle = 90, vjust = 1.2) + # Politika etiketi
  labs(title = "Zaman İçinde İstihdam Oranları",
       subtitle = "Paralel Trendler Varsayımının Test Edilmesi (2021 Politikası)",
       x = "Yıl", y = "İstihdam Oranı", color = "Eyalet") +
  theme_minimal() +
  theme(legend.position = "bottom")
  1. Olay Çalışması Grafiği

Bu grafik, olay çalışması regresyonundan elde edilen katsayıları görselleştirir. Her bir nokta, politikanın başlangıç yılına göre (yatay eksen) ilgili yıl için tahmini tedavi etkisini (dikey eksen) temsil eder. Dikey çubuklar %95 güven aralıklarını gösterir. * Kırmızı kesikli dikey çizgi, politikanın başladığı noktayı (2021 öncesi) işaret eder. * Yorum: Politika öncesi yıllardaki (year_relative < 0) katsayıların sıfıra yakın olması ve güven aralıklarının sıfırı içermesi, paralel trendler varsayımını destekler. Politika sonrası (year_relative >= 0) katsayılar ise tedavinin dinamik etkisini gösterir. Örneğin, year_relative = 0 (2021 yılı) ve sonrası için istatistiksel olarak anlamlı ve pozitif katsayılar, politikanın ilgili yıllarda pozitif bir etkisi olduğunu gösterir.

# p3: Olay Çalışması katsayılarının grafiği
p3 <- event_coeffs %>%
  ggplot(aes(x = year_relative, y = estimate)) +
  geom_hline(yintercept = 0, linetype = "dashed", alpha = 0.7) + # Sıfır etki çizgisini göster
  geom_vline(xintercept = -0.5, linetype = "dashed", alpha = 0.7, color = "blue") + # Politika öncesi son yılı işaretle
  geom_errorbar(aes(ymin = conf_low, ymax = conf_high), width = 0.1) + # Güven aralıkları
  geom_point(size = 3) + # Tahmin edilen katsayı noktaları
  labs(title = "Olay Çalışması: Dinamik Tedavi Etkileri (İstihdam Oranı)",
       subtitle = "Politika uygulamasına göre katsayılar (%95 GA)",
       x = "Politika Uygulamasına Göre Yıllar",
       y = "Katsayı") +
  theme_minimal()
  1. Farkların Farkı Görselleştirmesi

Bu grafik, DiD mantığını basit ve doğrudan bir şekilde gösterir. Hem tedavi hem de kontrol gruplarının politika öncesi ve sonrası istihdam oranlarındaki ortalama değişimleri görselleştirir. * Yorum: Grafikteki çizgilerin eğimlerini karşılaştırarak DiD etkisini sezgisel olarak anlayabiliriz. Tedavi grubunun istihdam oranındaki değişimi (politika sonrası-politika öncesi) ile kontrol grubunun istihdam oranındaki değişimini karşılaştırırız. Bu fark, asgari ücret artışının istihdam üzerindeki nedensel etkisidir.

# DiD görselleştirmesi için veri hazırlığı
did_visual <- min_wage_data %>%
  group_by(state, post) %>%
  summarise(mean_employment = mean(employment_rate), .groups = "drop") %>%
  mutate(
    period = ifelse(post == 1, "Politika Sonrası", "Politika Öncesi"),
    state_label = ifelse(state == "TedaviEyaleti", "Tedavi Eyaleti", "Kontrol Eyaleti")
  ) %>%
  ggplot(aes(x = period, y = mean_employment, color = state_label, group = state_label)) +
  geom_line(size = 1.5) + # Çizgi grafiği
  geom_point(size = 4) + # Nokta grafiği
  labs(title = "Farkların Farkı Görselleştirmesi (İstihdam Oranı)",
       subtitle = "Politika öncesi ve sonrası istihdam oranı değişimleri",
       x = "Dönem", y = "İstihdam Oranı", color = "Eyalet Türü") +
  theme_minimal() +
  theme(legend.position = "bottom")

# Tüm grafikleri birleştirerek tek bir çıktı olarak göster
(p1 | p2) / (p3 | did_visual)

Bu dört grafik, regresyon analizlerimizden elde ettiğimiz temel nedensel çıkarımları etkili bir şekilde görselleştirerek, sonuçların anlaşılmasını ve sunulmasını kolaylaştırır.

1.4.7 Eleştirel Değerlendirme Farkların Farkı (DiD) yöntemi güçlü bir nedensel çıkarım aracı olsa da, belirli varsayımlara dayanır ve pratik uygulamalarda dikkatli değerlendirme gerektirir.

Temel Varsayımlar: DiD analizinin geçerliliği büyük ölçüde aşağıdaki varsayımlara bağlıdır:

✓ Paralel Trendler Varsayımı: Bu, DiD’in en kritik varsayımıdır. Tedavi olmasaydı, tedavi ve kontrol gruplarının sonuç değişkenlerinde zaman içinde aynı eğilimi göstereceği varsayılır. Bu varsayımın ihlali, yanlı tahminlere yol açabilir. Yukarıdaki paralel trendler grafikleri ve olay çalışması, bu varsayımı incelemek için kullanılır. Eğer politika öncesi dönemde trendler paralel değilse, DiD tahmini yanlı olacaktır. ✓ Kararlılık Varsayımı (SUTVA): Tek bir gözlemin tedavi durumunun veya sonucunun başka bir gözlemin tedavi durumunu veya sonucunu etkilemediği anlamına gelir. Yani, asgari ücret artışının tedavi eyaletinde olması, kontrol eyaletindeki istihdam veya ücretleri etkilememelidir. Gerçek dünyada bu varsayımın ihlal edildiği durumlar (örneğin, işçilerin eyaletler arası hareketliliği) olabilir. ✓ Kompozisyon Değişimi Yok: Tedavi ve kontrol gruplarının bileşiminde politika dönemleri arasında önemli bir değişiklik olmamalıdır. Örneğin, politikadan sonra tedavi eyaletine düşük istihdam oranına sahip işçilerin akın etmesi, DiD tahminini yanıltabilir. ✓ Diğer Eşzamanlı Politikalar Yok: Tedavi eyaletinde politika öncesi ve sonrası dönemler arasında sonuç değişkenini etkileyebilecek, asgari ücret artışı dışındaki başka büyük bir politika değişikliği olmamalıdır. Eğer böyle bir politika varsa, gözlemlenen etki asgari ücret artışına atfedilemeyebilir. Sağlamlık Kontrolleri ve Dikkat Edilmesi Gerekenler:

Olay Çalışması Analizi: Paralel trendler varsayımını doğrudan test etmek ve tedavinin dinamik etkilerini incelemek için olay çalışması analizi yapmak çok önemlidir. Politika öncesi etkileşim terimlerinin sıfırdan farklı olmaması, varsayımı destekler. Kontrol Değişkenleri: Modele yaş, eğitim, cinsiyet gibi gözlemlenebilir kovaryatları dahil etmek, tahminlerin hassasiyetini artırabilir ve gruplar arasındaki politika öncesi küçük dengesizlikleri azaltabilir. Ancak, DiD yöntemi gözlemlenemeyen, zamanla değişmeyen confounder’ları zaten dışladığı için, bu kovaryatların eklenmesi temel DiD katsayısını çok fazla değiştirmemelidir (eğer paralel trendler varsayımı tutuyorsa). Farklı Kontrol Grupları: Analiz sonuçlarının farklı (ancak uygun) kontrol grupları kullanıldığında benzer kalıp kalmadığını test etmek, bulguların sağlamlığını artırabilir. Sentetik Kontrol Yöntemi: Eğer uygun bir kontrol grubu bulmak zorsa, tedavi grubuna benzer bir “sentetik kontrol grubu” oluşturmak için başka yöntemler (örneğin Sentetik Kontrol Yöntemi) kullanılabilir. Bu, DiD’in bir uzantısı olarak görülebilir. DiD, özellikle doğal deneyler ve yarı-deneysel durumlar için güçlü bir yöntemdir. Ancak, sonuçların güvenilirliği, temel varsayımların ne kadar iyi karşılandığına ve yapılan sağlamlık kontrollerine bağlıdır.

cat("Temel Varsayımlar ve Sağlamlık Kontrolleri:\n")
## Temel Varsayımlar ve Sağlamlık Kontrolleri:
cat("✓ Paralel Trendler Varsayımı: Politika öncesi dönemde tedavi ve kontrol gruplarının sonuç değişkenlerinde benzer eğilimler göstermesi.\n")
## ✓ Paralel Trendler Varsayımı: Politika öncesi dönemde tedavi ve kontrol gruplarının sonuç değişkenlerinde benzer eğilimler göstermesi.
cat("✓ Kararlılık Varsayımı (SUTVA): Bir grubun tedavisinin diğerini etkilememesi.\n")
## ✓ Kararlılık Varsayımı (SUTVA): Bir grubun tedavisinin diğerini etkilememesi.
cat("✓ Kompozisyon Değişimi Yok: Grupların bileşiminin zamanla önemli ölçüde değişmemesi.\n")
## ✓ Kompozisyon Değişimi Yok: Grupların bileşiminin zamanla önemli ölçüde değişmemesi.
cat("✓ Diğer Eşzamanlı Politikalar Yok: Politika döneminde sonuç değişkenini etkileyen başka büyük müdahale olmaması.\n\n")
## ✓ Diğer Eşzamanlı Politikalar Yok: Politika döneminde sonuç değişkenini etkileyen başka büyük müdahale olmaması.
cat("Sağlamlık Kontrolleri İçin Öneriler:\n")
## Sağlamlık Kontrolleri İçin Öneriler:
cat("- Olay Çalışması Analizi ile paralel trendler varsayımını görsel ve istatistiksel olarak test etmek.\n")
## - Olay Çalışması Analizi ile paralel trendler varsayımını görsel ve istatistiksel olarak test etmek.
cat("- Ek kontrol değişkenlerinin (yaş, eğitim vb.) etkisini incelemek.\n")
## - Ek kontrol değişkenlerinin (yaş, eğitim vb.) etkisini incelemek.
cat("- Alternatif kontrol grupları veya Sentetik Kontrol gibi yöntemlerle duyarlılık analizleri yapmak.\n")
## - Alternatif kontrol grupları veya Sentetik Kontrol gibi yöntemlerle duyarlılık analizleri yapmak.

1.5 Yöntem 3: Araç Değişkenler 1.5.1 İçsellik Problemini Çözmek Nedensel çıkarım yapmaya çalışırken karşılaşılan en büyük zorluklardan biri içsellik (endogeneity) problemidir. İçsellik, bir değişkenin diğerini hem etkilemesi hem de kendisinin etkilenmesi durumunda ortaya çıkar, bu da standart regresyon modellerinin (OLS gibi) yanlı ve tutarsız tahminler üretmesine neden olur. Gözlemlenemeyen ortak faktörler (gizli değişkenler), eşzamanlı nedensellik veya ölçüm hataları içselliğe yol açabilir.

Araç Değişkenler (Instrumental Variables - IV) yöntemi, içsel bir değişkenin nedensel etkisini tahmin etmek için tasarlanmış güçlü bir ekonometrik tekniktir. Bu yöntem, içsel değişkenle ilişkili olan, ancak doğrudan sonuç değişkenini etkilemeyen (veya içsel değişken dışında başka bir yolla etkilemeyen) bir araç değişkeni (instrument) kullanarak çalışır.

1.5.2 Araştırma Sorumuz Sınıf mevcudu öğrencilerin test puanlarını nasıl etkiliyor?

Bu bölümde, sınıf mevcudunun öğrenci test puanları üzerindeki nedensel etkisini inceleyeceğiz. Bu ilişki genellikle içseldir çünkü: * Gizli Ortak Faktörler: Daha iyi okullarda hem daha küçük sınıflar hem de daha yüksek test puanları olabilir. Okul kalitesi gibi gözlemlenmemiş faktörler, hem sınıf mevcudunu hem de test puanlarını etkileyebilir. * Seçim Yanlılığı: Başarılı öğrenciler daha küçük sınıfları tercih edebilir veya velileri onları bu tür okullara yönlendirebilir.

Bu içsellik problemini çözmek için, sınıf mevcudunu etkileyen, ancak test puanlarını doğrudan etkilemeyen bir “araç” bulmaya çalışacağız. Varsayımsal senaryomuzda, bu araç demografik değişimlerden kaynaklanan okul kayıt şokları olacaktır. Yani, bir bölgedeki doğum oranlarındaki ani bir artış veya azalış, okulların sınıf mevcudunu beklenmedik bir şekilde etkiler, ancak bu demografik şokların öğrencilerin bireysel test puanlarını doğrudan etkilemediğini varsayacağız.

1.5.3 Veri Yükleme ve Keşif IV regresyon analizi için gerekli AER kütüphanesini yüklüyoruz. Ardından, bir kez daha simüle edilmiş bir veri seti kullanacağız. Bu, araç değişkeni metodolojisinin arkasındaki mantığı ve veri yapısını anlamamıza yardımcı olacaktır.

Analizin yeniden üretilebilirliğini sağlamak için set.seed() fonksiyonunu kullanıyoruz. Ardından, education_data adlı bir tibble oluşturarak veri setimizi tanımlıyoruz.

set.seed(789) # Analizin tekrar üretilebilirliğini sağlar.
n_schools <- 200 # Simüle edilecek okul sayısı
n_students_per_school <- 25 # Her okuldaki öğrenci sayısı

education_data <- tibble(
  school_id = rep(1:n_schools, each = n_students_per_school), # Her öğrenci için okul kimliği
  # `enrollment_shock` (Kayıt Şoku): Araç değişkeni. Demografik değişikliklerden kaynaklanan rastgele kayıt değişimini temsil eder.
  enrollment_shock = rep(rnorm(n_schools, 0, 5), each = n_students_per_school),
  # Öğrenci özellikleri: Kontrol değişkenleri
  parent_income = rnorm(n_schools * n_students_per_school, 50000, 15000), # Ebeveyn geliri
  parent_education = sample(8:16, n_schools * n_students_per_school, replace = TRUE), # Ebeveyn eğitim seviyesi
  # `school_quality` (Okul Kalitesi): Hem sınıf mevcudunu hem de test puanlarını etkileyen gizli gözlemlenemeyen değişken (içsellik kaynağı).
  school_quality = rep(rnorm(n_schools, 0, 2), each = n_students_per_school)
) %>%
  mutate(
    # `class_size` (Sınıf Mevcudu): İçsel değişkenimiz. Kayıt şokundan, okul kalitesinden ve rastgele şoklardan etkilenir.
    class_size = pmax(15, 25 + 0.3 * enrollment_shock - 0.5 * school_quality +
                         rnorm(n(), 0, 3)),
    # `test_score` (Test Puanı): Sonuç değişkenimiz. Sınıf mevcudu, öğrenci geçmişi ve okul kalitesinden etkilenir.
    test_score = 500 + 0.1 * parent_income/1000 + 5 * parent_education -
                 2 * class_size + 3 * school_quality + rnorm(n(), 0, 20)
  ) %>%
  mutate(student_id = row_number()) # Her öğrenci için benzersiz kimlik

glimpse() ve summary() fonksiyonları ile veri setine hızlı bir göz atıyoruz: * glimpse(education_data): Veri setinin yapısını, değişken türlerini ve ilk birkaç gözlemi gösterir. * summary(education_data): Her bir değişken için özet istatistikler (ortalama, medyan, min, max, çeyreklikler) sunar. Bu, veri dağılımını anlamamıza ve potansiyel sorunları tespit etmemize yardımcı olur. Örneğin, class_size değişkeninin minimum 15’e sabitlendiğini görebiliriz.

Araç Geçerliliğini Kontrol Etme (İlgi Alaka Şartı): Araç değişkeninin iyi bir araç olup olmadığını değerlendirmek için iki temel şartı incelemeliyiz: 1. İlgi Alaka Şartı (Relevance Condition): Araç değişkeni (enrollment_shock), içsel değişkenle (class_size) yeterince güçlü bir şekilde ilişkili olmalıdır. 2. Dışlama Kısıtlaması (Exclusion Restriction): Araç değişkeni, sonuç değişkenini (test_score) içsel değişken dışında başka hiçbir yolla etkilememelidir.

İlk olarak, ilgi alaka şartını değerlendirmek için enrollment_shock ve class_size arasındaki korelasyona bakıyoruz.

cor_matrix <- education_data %>%
  select(enrollment_shock, class_size, test_score, school_quality) %>%
  cor(use = "complete.obs") # Korelasyon matrisini hesapla

print("Korelasyon Matrisi:")
## [1] "Korelasyon Matrisi:"
kable(cor_matrix, digits = 3) # Tablo olarak yazdır
enrollment_shock class_size test_score school_quality
enrollment_shock 1.000 0.472 -0.147 -0.097
class_size 0.472 1.000 -0.362 -0.311
test_score -0.147 -0.362 1.000 0.321
school_quality -0.097 -0.311 0.321 1.000
# Araç gücü görselleştirmesi
instrument_strength <- education_data %>%
  ggplot(aes(x = enrollment_shock, y = class_size)) +
  geom_point(alpha = 0.6) + # Dağılım grafiği
  geom_smooth(method = "lm", color = "green") + # Doğrusal regresyon çizgisi
  labs(title = "Araç Geçerliliği: Kayıt Şoku vs Sınıf Mevcudu",
       x = "Kayıt Şoku", y = "Sınıf Mevcudu") +
  theme_minimal()

print(instrument_strength)
## `geom_smooth()` using formula = 'y ~ x'

Korelasyon Matrisi Yorumu: Korelasyon matrisinde enrollment_shock ile class_size arasındaki korelasyonun pozitif ve belirgin olması beklenir (simüle edilmiş veride 0.3 gibi bir katsayı kullandık). Bu, araç değişkenimizin sınıf mevcudunu etkilediği hipotezini destekler.

Araç Gücü Görselleştirmesi Yorumu: enrollment_shock ile class_size arasındaki dağılım grafiği ve üzerine yerleştirilen regresyon çizgisi, bu iki değişken arasındaki ilişkiyi görsel olarak gösterir. Eğer noktalar genel olarak bir eğilim gösteriyor ve regresyon çizgisi anlamlı bir eğime sahipse, araç değişkeninin içsel değişkeni güçlü bir şekilde etkilediğine dair görsel kanıt elde ederiz.

1.5.4 Yöntem Uygulaması Araç değişkenler regresyonu genellikle iki aşamalı en küçük kareler (2SLS) olarak uygulanır:

Birinci Aşama (First Stage): Bu aşamada, içsel değişken (class_size) araç değişkeni (enrollment_shock) ve diğer kontrol değişkenleri (parent_income, parent_education) kullanılarak tahmin edilir. Bu regresyonun amacı, içsel değişkenin araç tarafından açıklanan kısmını elde etmektir. * İlgi Alaka Şartı Testi: Birinci aşamada aracın gücü (yani içsel değişkeni ne kadar iyi tahmin ettiği) genellikle F-istatistiği ile değerlendirilir. Genel bir kural olarak, F-istatistiğinin 10’dan büyük olması “güçlü bir araç” olduğunu gösterir. Zayıf araçlar (F-istatistiği < 10), IV tahminlerinin yanlı ve geçersiz olmasına yol açabilir.

# Birinci aşama regresyonu
first_stage <- lm(class_size ~ enrollment_shock + parent_income + parent_education,
                  data = education_data)

first_stage_summary <- summary(first_stage)
f_stat <- first_stage_summary$fstatistic[1] # F-istatistiğini al

cat("Birinci Aşama Sonuçları:\n")
## Birinci Aşama Sonuçları:
cat("F-istatistiği:", round(f_stat, 2), "\n")
## F-istatistiği: 476.85
cat("Yorum:",
    ifelse(f_stat > 10, "✓ Güçlü araç", "⚠ Zayıf araç"), "\n\n")
## Yorum: ✓ Güçlü araç
print("Birinci Aşama Regresyonu:")
## [1] "Birinci Aşama Regresyonu:"
kable(tidy(first_stage), digits = 3) # Birinci aşama sonuçlarını tablo olarak yazdır
term estimate std.error statistic p.value
(Intercept) 24.89 0.257 96.879 0.000
enrollment_shock 0.33 0.009 37.818 0.000
parent_income 0.00 0.000 -0.524 0.600
parent_education 0.02 0.017 1.198 0.231

Birinci Aşama Regresyonu çıktısını yorumlayalım:

enrollment_shock katsayısı: Bu, aracın sınıf mevcudu üzerindeki etkisini gösterir. Katsayının istatistiksel olarak anlamlı ve beklenen yönde olması (genellikle pozitif), aracın içsel değişkenle ilişkili olduğunu doğrular. F-istatistiği: Yukarıda belirtildiği gibi, bu değerin 10’dan büyük olması aracımızın güçlü olduğunu gösterir. Simülasyonumuzda genellikle bu koşul sağlanacaktır. İkinci Aşama (Second Stage): Bu aşamada, sonuç değişkeni (test_score), birinci aşamadan elde edilen içsel değişkenin tahmin edilen değerleri (class_size’ın araç tarafından açıklanan kısmı) ve diğer kontrol değişkenleri kullanılarak regresyona tabi tutulur. Bu, içsellikten arındırılmış, nedensel etki tahminini verir.

ivreg() fonksiyonu, iki aşamalı en küçük kareler (2SLS) tahminini tek bir adımda yapar. Formül test_score ~ class_size + parent_income + parent_education | enrollment_shock + parent_income + parent_education şeklindedir. Dikey çizginin (|) solundaki değişkenler ana regresyon denklemini (bağımlı ve bağımsız değişkenler), sağındaki değişkenler ise araçları ve tüm kontrol değişkenlerini (ki bunlar hem ana denklemin hem de birinci aşamanın bir parçası olmalıdır) belirtir.

cat("   - Tehdit: Kaynaklar, öğretmen kalitesi vb. üzerinde doğrudan etkiler\n\n")
##    - Tehdit: Kaynaklar, öğretmen kalitesi vb. üzerinde doğrudan etkiler

1.5.6 Eleştirel Değerlendirme Araç değişkenler yöntemi, içsellik problemini çözmek için güçlü bir çözüm sunsa da, kendine özgü zorlukları ve varsayımları vardır.

Araç Değişken Değerlendirmesi: Başarılı bir IV analizi için aracın üç ana koşulu karşılaması gerekir:

İlgi Alaka (Relevance): Araç (Z), içsel değişken (X) ile güçlü bir şekilde ilişkili olmalıdır. Test: Birinci aşama F-istatistiği ile değerlendirilir. F > 10 genellikle güçlü bir araç olduğunu gösterir. Simülasyonumuzda: F = 43.14 gibi bir değer, aracımızın oldukça güçlü olduğunu gösterir. Dışlama Kısıtlaması (Exclusion Restriction): Araç (Z), sonuç değişkenini (Y) içsel değişken (X) dışında başka hiçbir yolla etkilememelidir. Test: Bu varsayım doğrudan test edilemez; teorik gerekçelendirme ve arka plan bilgisi gerektirir. Örneğin, enrollment_shock (kayıt şoku) test puanlarını sadece sınıf mevcudunu değiştirerek etkilemelidir, okul kaynakları veya öğretmen kalitesi gibi başka kanallar üzerinden değil. Eğer kayıt şoku aynı zamanda okula daha fazla kaynak ayrılmasına veya daha iyi öğretmenlerin atanmasına neden oluyorsa, dışlama kısıtlaması ihlal edilmiş olur. Tehditler: Gizli (gözlemlenmeyen) bir değişkenin hem aracı hem de sonuç değişkenini etkilemesi durumunda dışlama kısıtlaması ihlal edilir. Dışsallık (Exogeneity): Araç, sonuç değişkenini etkileyen diğer gözlemlenemeyen faktörlerle (U) ilişkili olmamalıdır. Bu da dışlama kısıtlamasının bir uzantısıdır. İçsellik Testi (Wu-Hausman Testi): * Bu test, içselliğin var olup olmadığını belirlememize yardımcı olur. Eğer testin p-değeri istatistiksel olarak anlamlıysa (genellikle p < 0.05), OLS’in yanlı olduğuna ve IV yönteminin tercih edilmesi gerektiğine dair güçlü kanıtımız var demektir. * Simülasyonumuzda: Wu-Hausman testi için p-değeri genellikle 0.000 gibi çok küçük bir değer olacaktır. Bu, içselliğin doğrulandığı ve OLS tahmininin güvenilmez olduğu anlamına gelir. Bu yüzden IV tahminine güvenmek daha uygun olacaktır.

# Araç geçerliliği değerlendirmesi
cat("Araç Değişken Değerlendirmesi:\n\n")
## Araç Değişken Değerlendirmesi:
# İlgi Alaka (geçerlilik) testi
cat("1. Geçerlilik: F =", round(f_stat, 2),
    ifelse(f_stat > 10, " ✓ BAŞARILI", " ✗ BAŞARISIZ"), "\n")
## 1. Geçerlilik: F = 476.85  ✓ BAŞARILI
# Dışlama kısıtlaması
cat("2. Dışlama Kısıtlaması: Doğrudan test edilemez\n")
## 2. Dışlama Kısıtlaması: Doğrudan test edilemez
cat("   - Varsayım: Kayıt şoku test puanlarını sadece sınıf mevcudu üzerinden etkiler\n")
##    - Varsayım: Kayıt şoku test puanlarını sadece sınıf mevcudu üzerinden etkiler
cat("   - Tehdit: Kaynaklar, öğretmen kalitesi vb. üzerinde doğrudan etkiler\n\n")
##    - Tehdit: Kaynaklar, öğretmen kalitesi vb. üzerinde doğrudan etkiler
cat("   - Tehdit: Kaynaklar, öğretmen kalitesi vb. üzerinde doğrudan etkiler\n\n")
##    - Tehdit: Kaynaklar, öğretmen kalitesi vb. üzerinde doğrudan etkiler
# Aşırı tanımlama testi (çoklu araçlarımız olsaydı uygulanırdı)
cat("3. Aşırı Tanımlama: Uygulanabilir değil (tam olarak tanımlanmış model)\n\n")
## 3. Aşırı Tanımlama: Uygulanabilir değil (tam olarak tanımlanmış model)

Pratik Yorum: IV tahmini bize içsellikten arındırılmış, nedensel etkiyi verir. Eğer simülasyonumuzda olduğu gibi sınıf mevcudunun test puanları üzerinde negatif bir etkisi varsa (yani sınıf büyüdükçe puanlar düşüyorsa), IV katsayısı bunu daha doğru bir şekilde yansıtacaktır. Yorumda, bu etkinin pratik önemini belirtmek için standart sapma cinsinden ifade edilmesi faydalıdır.

Temel Sınırlamalar:

Dış Geçerlilik (External Validity): IV tahminleri yerel ortalama tedavi etkisini (Local Average Treatment Effect - LATE) ölçer. Bu, etkinin yalnızca araç tarafından davranışları etkilenen “uyumlu” (complier) alt popülasyon için geçerli olduğu anlamına gelir. Sonuçlar, bu özel grubun ötesindeki popülasyonlara genellenemeyebilir. Dışlama Kısıtlamasının Test Edilemezliği: Aracın sonuç değişkenini başka bir yolla etkilemediği varsayımı test edilemez. Bu, IV analizinin en zayıf noktalarından biridir ve teorik gerekçelendirmeye veya çoklu araçlarla aşırı tanımlama testlerine (eğer modelde birden fazla geçerli araç varsa) dayanmayı gerektirir. Zayıf Araçlar: Eğer araç içsel değişkenle yeterince güçlü ilişkili değilse, IV tahminleri yanlı ve standart hatalar büyük olacaktır. 1.6 Sonuç: Doğru Yöntemi Seçmek Nedensel çıkarım, bir olayın diğerine gerçekten sebep olup olmadığını anlamak için hayati önem taşır. Yukarıda incelediğimiz her üç yöntem — Rastgele Deneyler, Farkların Farkı ve Araç Değişkenler — farklı senaryolarda ve farklı zorluklarla karşılaşıldığında nedensel kanıt sağlamak için güçlü araçlar sunar. Doğru yöntemi seçmek, araştırma sorunuzun doğasına, mevcut verilere ve karşılaşılan ekonometrik problemlere bağlıdır.

1.6.1 Karar Çerçevesi Rastgele Deneyleri Seçin: * Tedavi atamasını kontrol etme imkanınız olduğunda (örneğin, yeni bir ürün lansmanı veya eğitim programı için). * Etik ve pratik hususlar, katılımcıları rastgele gruplara ayırmanıza izin verdiğinde. * Seçim yanlılığı sorununu en aza indirerek en güçlü nedensel kanıta ihtiyacınız olduğunda. * Deneyin sonuçlarının genellenebilirliği (dış geçerlilik) endişeleri, tasarım yoluyla veya ek araştırmalarla yönetilebilir olduğunda.

Farkların Farkını Seçin: * Doğal deneyler (örneğin, bir politika değişikliği veya beklenmedik bir olay) mevcut olduğunda ve sizin müdahaleniz olmadan iki veya daha fazla grubun zaman içindeki değişimlerini gözlemleyebildiğinizde. * Zaman içinde hem tedavi hem de kontrol grupları için veri (panel veri) içeren bir veri setiniz olduğunda. * Paralel trendler varsayımının makul olduğuna dair güçlü kanıtlarınız olduğunda (genellikle politika öncesi trendlere bakarak). * Politika odaklı etkilerin tahmin edilmesine ve belirli bir müdahalenin sonuçlar üzerindeki etkisinin değerlendirilmesine ihtiyacınız olduğunda.

Araç Değişkenleri Seçin: * Araştırma sorunuzdaki temel bağımsız değişkenin açıkça içsel olduğunu bildiğinizde ve OLS’in yanlı tahminler üreteceğinden şüphelendiğinizde. * İçsel değişkenle güçlü bir şekilde ilişkili olan, ancak sonuç değişkenini sadece içsel değişken üzerinden etkileyen güvenilir bir araç değişkeni bulabildiğinizde. * Sonuçların LATE (Yerel Ortalama Tedavi Etkisi) olarak yorumlanmasını kabul etmeye hazır olduğunuzda (yani, etkinin sadece araca duyarlı olan alt popülasyon için geçerli olduğunu). * Rastgele deneyler veya farkların farkı gibi diğer yöntemler, veri veya pratik kısıtlamalar nedeniyle uygulanamaz olduğunda.

1.6.2 Son Öneriler Her zaman araştırma sorusuyla başlayın: Yöntem, sorunuza en iyi cevabı verecek şekilde seçilmelidir, tam tersi değil. Araştırma sorunuz, hangi yöntemin en uygun olacağını belirleyecektir. Varsayımlarınızı test edin ve gerekçelendirin: Her nedensel çıkarım yöntemi, dikkatlice değerlendirilmesi ve mümkün olduğunca test edilmesi gereken temel varsayımlara dayanır. Test edilemeyen varsayımlar (örneğin, dışlama kısıtlaması) için güçlü teorik gerekçeler sunmanız gerekecektir. Sağlamlığı düşünün: Mümkün olduğunda, bulgularınızın farklı model spesifikasyonlarına, farklı kontrol değişkenleri kümelerine veya farklı veri alt kümelerine göre sağlam olup olmadığını test etmek için çoklu yaklaşımlar veya duyarlılık analizleri kullanın. Genellenebilirliği düşünün: İç geçerlilik (doğru nedensel ilişkiyi bulmak) önemli olsa da, dış geçerlilik (sonuçların diğer bağlamlara genellenebilirliği) de aynı derecede önemlidir. Sonuçlarınızın ne kadar genellenebileceğini ve hangi sınırlamalara tabi olduğunu açıkça belirtin. Sınırlamalar hakkında şeffaf olun: Her yöntemin zayıf yönleri ve sınırlamaları vardır. Bulgularınızı sunarken bu zayıf yönleri kabul edin ve şeffaf olun. Bu, çalışmanızın güvenilirliğini artırır. Nedensel çıkarım yolculuğu karmaşık ama son derece ödüllendiricidir. Bu üç yöntem — rastgele deneyler, farkların farkı ve araç değişkenler — iş, politika ve araştırmada daha iyi kararlar almayı sağlayan “neden” sorularını yanıtlamak için güçlü araçlar sunar.