Uygulamalı Ekonometri Ders Notları

Notlar Wooldridge Cilt 2 - Bölüm 13’den alınmıştır (Fonksiyon Dışında)

Author

Hüseyin Utku Demir

Published

October 15, 2022

Uygulamalı Ekonometri ders kitabı (Ekonometriye Giriş Wooldridge, Cilt 2)

Fonkisyon yazma

Geçen hafta dersimizde kendimiz için bir regresyon fonksiyonu yazacağımızdan bahsetmiştik. Bu fonksiyonu yazmak için regresyon katsayılarını oluşturacağımız formülü tekrar hatırlamamız gerekli.

Geçen sene yapılan derslerinizden,

\[ \beta_1 = \frac{\sum (x- \bar{x}) \cdot (y- \bar{y})}{\sum(x- \bar{x})^2} \]

olduğunu biliyoruz. Aslında bulmamız gereken, pay için

\[ \sum (x- \bar{x}) \cdot (y- \bar{y}) = \sum x \cdot y - \sum x \cdot \bar{y} - \sum \bar{x} \cdot y + \sum \bar{x} \cdot \bar{y} \]

\[ = \sum x \cdot y - \bar{y} \cdot \sum x - \bar{x} \cdot \sum y + N \cdot \bar{x} \cdot \bar{y} \]

Ayrıca ortalamanın, gözlem sayısıyla çarpımının toplamın kendisini verdiğini bildiğimizden

\[ \bar{y} \cdot \sum x = \bar{x} \cdot \sum y = N \cdot \bar{x} \cdot \bar{y} \]

olduğunu çıkarabiliriz.

\[ \sum x \cdot y - \bar{y} \cdot \sum x - \bar{x} \cdot \sum y + N \cdot \bar{x} \cdot \bar{y} = \sum x \cdot y - N \cdot \bar{x} \cdot \bar{y} \]

olur. Eğer çoklu regresyon için bir fonksiyon yazacaksam, her gözlemi birbiriyle çarpıp toplayabileceğim kısa bir formül geliştirmem gerek. Hatırlayacağınız üzere matrisler bize bu konuda yardımcı olabilir.

Örnek

Varsayılım ki elimizde 3’er gözlemli iki değişken var.

X = cbind(c(1,2,3))
X
     [,1]
[1,]    1
[2,]    2
[3,]    3
Y = cbind(c(4,5,6))
Y
     [,1]
[1,]    4
[2,]    5
[3,]    6

\(\sum X \cdot Y = 4 + 10 + 18 = 32\) olacaktır.

Bu sonucu matrislerler ile almanın kolay yolu \(X^T \cdot Y\) bulmak olacaktır.

t(X) %*% Y
     [,1]
[1,]   32

Bu sayıyı \(X^2\)’lerin toplamına bölmek istersem, solve fonksiyonunu kullanarak \((X^T \cdot X)^{-1} \cdot X^T \cdot Y\) olarak yazabilirim.

solve(t(X) %*% X)%*%t(X) %*% Y
         [,1]
[1,] 2.285714

Bu yazdığımız son fonksiyon aslında regreyon katsayıları için formülümüzdür.

\((X^T \cdot X)^{-1} \cdot X^T \cdot Y\)

Fonksiyon yazımı

İstediğiniz bir isim verebilirsiniz. Girdilerimiz X ve Y olacaktır. X çoklu regresyon yaplırken matris olarak sunulmalıdır.

Dogrusal_reg <- function(X, Y)
  solve(t(X) %*% X)%*%t(X) %*% Y

Şimdi fonksiyonumuz hazır. İlk denememizi oluşturduğumuz X ve Y serileri için kullanalım.

Dogrusal_reg(X=X, Y=Y)
         [,1]
[1,] 2.285714

Fonksiyon çalışıyor.

Bu fonksiyonu birde herhangi bir veri seti üzerinden deneyelim. Geçen hafta yapmış olduğumuz, bwght verisetini kullanarak cigs ve faminc kullanarak regresyon sonuçlarını tekrarlayalım.

library(wooldridge)
data("bwght")

Fonksiyonumuzu kullanmak için, X verisetimizi oluşturmamız gerek, çünkü X bizim için sadece iki değişkenden oluşuyor. Ama adına X demek zorunda değilsiniz, Xler ismini verebiliriz.

Xler = cbind(bwght$cigs, bwght$faminc)
head(Xler)
     [,1] [,2]
[1,]    0 13.5
[2,]    0  7.5
[3,]    0  0.5
[4,]    0 15.5
[5,]    0 27.5
[6,]    0  7.5

Ama X veri seti sadece X değişkenlerinden oluşmaz. Kesen diye adlandırdığımız bir katsayımız daha var. Yani iki değil, üç katsayı bulacağız bu yüzden Xler veri setimize birlerden oluşan bir sütun daha eklememiz gerek.

Xler = cbind(bwght$cigs, bwght$faminc, c(rep(1, nrow(bwght))))
head(Xler)
     [,1] [,2] [,3]
[1,]    0 13.5    1
[2,]    0  7.5    1
[3,]    0  0.5    1
[4,]    0 15.5    1
[5,]    0 27.5    1
[6,]    0  7.5    1

Şimdi Xler matrisimiz tamamlandı.

Y matrisini de oluşturalım.

Y = cbind(bwght$bwght)
head(Y)
     [,1]
[1,]  109
[2,]  133
[3,]  129
[4,]  126
[5,]  134
[6,]  118

Artık yeni fonksiyonumuzu kullanabiliriz.

Dogrusal_reg(X=Xler, Y=Y)
             [,1]
[1,]  -0.46340754
[2,]   0.09276474
[3,] 116.97413048

Karşılaştırabileceğimiz gibi sonuçlar aynı.

lm(bwght$bwght ~ bwght$cigs + bwght$faminc)

Call:
lm(formula = bwght$bwght ~ bwght$cigs + bwght$faminc)

Coefficients:
 (Intercept)    bwght$cigs  bwght$faminc  
   116.97413      -0.46341       0.09276  

Ama lm fonksiyonunun özetini (summary) çıkarınca, katsayılarımızın anlamlılık düzeylerinide gözlemleyebiliyorduk.

summary(lm(bwght$bwght ~ bwght$cigs + bwght$faminc))

Call:
lm(formula = bwght$bwght ~ bwght$cigs + bwght$faminc)

Residuals:
    Min      1Q  Median      3Q     Max 
-96.061 -11.543   0.638  13.126 150.083 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  116.97413    1.04898 111.512  < 2e-16 ***
bwght$cigs    -0.46341    0.09158  -5.060 4.75e-07 ***
bwght$faminc   0.09276    0.02919   3.178  0.00151 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 20.06 on 1385 degrees of freedom
Multiple R-squared:  0.0298,    Adjusted R-squared:  0.0284 
F-statistic: 21.27 on 2 and 1385 DF,  p-value: 7.942e-10

Fonksiyonumuz bu konuda yetersiz. Fonskiyonu istediğiniz kadar geliştirebilirsiniz.

İstersek standart hatalar için yeni bir fonksiyon oluşturabiliriz. Regresyonun standart hatalar formülünü hatırlayın.

Dogrusal_reg_se <- function(X, Y)
  sqrt(as.numeric(var(Y - X%*%solve(t(X) %*% X)%*%t(X) %*% Y))*solve(t(X) %*% X))
Dogrusal_reg_se(X=Xler, Y=Y)
Warning in sqrt(as.numeric(var(Y - X %*% solve(t(X) %*% X) %*% t(X) %*% : NaNs
produced
           [,1]       [,2]     [,3]
[1,] 0.09151077 0.02149117      NaN
[2,] 0.02149117 0.02916682      NaN
[3,]        NaN        NaN 1.048228

Bu formül bize varyans kovaryans matrisi dediğimiz bir matris verdi. Aslında standart hatalar için bu matrisin diyagonal elemetlerini almam yeterli. Eğer ikisini birden göstereceğim yeni bir fonksiyon yazarsam daha pratik bir fonksiyon elde edebilirim. Hatta varyansı bulmak için var komutunu bile kullanmak zorunda değiliz. Onun içinde ayrı bir fonksiyon oluşturmak yerine, varyansı bulabileceğimiz fonsksiyonu, kendi fonksiyonumuz içine yazabiliriz.

dr <- function(X, Y) {
  A <- solve(t(X) %*% X)%*%t(X) %*% Y
  B <- diag(sqrt(as.numeric(t(Y-as.numeric(t(Y)%*%rep(1, nrow(Y))/nrow(Y)))%*%(Y-as.numeric(t(Y)%*%rep(1, nrow(Y))/nrow(Y)))/(nrow(Y)-1))*solve(t(X) %*% X)))
  result <- list(t(A), B)
  names(result) <- c("katsayılar", "Standart Hatalar")
  suppressMessages(return(result))
}

Yeni fonksiyonumuzu test edelim.

dr(X=Xler, Y=Y)
Warning in sqrt(as.numeric(t(Y - as.numeric(t(Y) %*% rep(1, nrow(Y))/nrow(Y)))
%*% : NaNs produced
$katsayılar
           [,1]       [,2]     [,3]
[1,] -0.4634075 0.09276474 116.9741

$`Standart Hatalar`
[1] 0.09290577 0.02961144 1.06420678

Artık standart hatalarını da gözlemleyebileceğim bir regresyon fonksiyonum var.

Fonksiyona t ve pr değerlerini ekleyelim.

dr <- function(X, Y) {
  A <- solve(t(X) %*% X)%*%t(X) %*% Y
  B <- diag(sqrt(as.numeric(t(Y-as.numeric(t(Y)%*%rep(1, nrow(Y))/nrow(Y)))%*%(Y-as.numeric(t(Y)%*%rep(1, nrow(Y))/nrow(Y)))/(nrow(Y)-1))*solve(t(X) %*% X)))
  C <- t(A)/B
  D <- 1-pt(abs(C), nrow(X) - ncol(X) - 1)
  result <- list(t(A), B, C, D)
  names(result) <- c("katsayılar", "Standart Hatalar", "t değerleri", "pr (-t < & > t)")
  suppressMessages(return(result))
}
dr(X=Xler, Y=Y)
Warning in sqrt(as.numeric(t(Y - as.numeric(t(Y) %*% rep(1, nrow(Y))/nrow(Y)))
%*% : NaNs produced
$katsayılar
           [,1]       [,2]     [,3]
[1,] -0.4634075 0.09276474 116.9741

$`Standart Hatalar`
[1] 0.09290577 0.02961144 1.06420678

$`t değerleri`
          [,1]     [,2]     [,3]
[1,] -4.987931 3.132733 109.9167

$`pr (-t < & > t)`
             [,1]        [,2] [,3]
[1,] 3.437984e-07 0.000884092    0

Bölüm 13: Havuzlanmış Yatay Kesitler: Basit Panel Veri Yöntemleri

  • Panel veri hem yatay kesit, hem de zaman serisi boyutlarına sahiptir.

Örnek 13.1 Zaman İçinde Kadınların Doğurganlık oranları

  • Sander (1992) tarafından kullanılana benzeyen fertil1 veri seti, Milli Düşünce Araştırma Merkezi’nin Genel Sosyal Araştırması’nın 1972’den 1984’e kadar çift sayılı yıllardından oluşmuştur.

  • Wooldridge, bu verileri, bir kadının doğurduğu toplam çocuk sayısını (kids) açıklamak için kullanıyor.

  • Soru: Gözlemlenebilen faktörleri kontrol ettikten sonra zaman içinde doğurganlık nasıl değişmiştir?

  • Kontrol altında tutulan değişkenler: eğitim görülen yıl sayısı, yaş, ırk, 16 yaşında ülkenin hangi bölgesinde yaşadığı ve 16 yaşındaki yaşam çevresidir.

  • Her zaman yaptığımız gibi önce veri setini indirelim, daha sonra veriyi tablo halinde gösterelim

library(wooldridge) # data komutuyla fertil1 verisetini indirmek içim
library(rmarkdown) # page_table komutuyla veri setini rmarkdown üzerinde gösterebilmek için
data("fertil1")
paged_table(fertil1)
  • tabloda year değişkenini görüyoruz. Her yıl için kids değişkeninin ortalama olarak nasıl değiştiğini gösterebiliriz. (Bunu merak ettiğiniz diğer değişkenler için de yapın.)
require(dplyr)
Loading required package: dplyr

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
fertil1 %>% 
  group_by(year) %>% 
  summarise("ortalama çocuk sayısı (kids)" = mean(kids))
# A tibble: 7 × 2
   year `ortalama çocuk sayısı (kids)`
  <int>                          <dbl>
1    72                           3.03
2    74                           3.21
3    76                           2.80
4    78                           2.80
5    80                           2.82
6    82                           2.40
7    84                           2.24
  • Ortalama çocuk sayısı beklediğimiz gibi düşüyor gibi görünüyor.

  • Bir sonraki aşamaya geçmeden önce yazdığımız kodları analamaya çalışalım.

  • require komutu, library komutu yerine kullanacağınız bir komuttur. Eğer kullandığınız paketi, daha önce yükleyip yüklemediğinizi hatırlamıyorsanız, require parentez içine yazılan paketi eğer yüklenmemişse önce yükler daha sonra library yapar.

  • dplyr paketi, verilerimizi düzenlemek ve temizlemek için sıklıkla kullanacağımız paketlerden biridir. %>% operatörü sayesinde sırasıyla işlem yapabiliriz.

  • %>% kullanarak cümle yazar gibi komut yazabilirsiniz. Yukarda bulunan chunk’da da görebileceğiniz gibi önce fertil1 veri setini yazdık, %>% yazdıktan sonra bu veri setini senelere (year) göre gruplandırdık. Bunun için group_by komutunu kullandık.

  • üçüncü satırda senelere göre gruplandırdığımız fertil1 veri setinde kids değişkeninin ortalamasını aldıkç Bunu yapmak için mean komutunu kullandık.

  • Sonuçlarımızı göstermek için, summarise komutunu kullandık ve ortalamalara ne isim vermek istiyorsak tırnak içinde onu yazdık. (“ortalama çocuk sayısı (kids)”)

  • Biraz pratik yaptıktan sonra, bu ortalamaları çıkarmak sizin içinde basit hale gelecek.

  • diyelim ki bütün değişkenlerin yıllara göre ortalamasını görmek istiyorsunuz. across(everything() bu işlemi sizin için kolaylıkla yapacaktır.

require(dplyr)
fertil1 %>% 
  group_by(year) %>% 
  summarise(across(everything(), mean))
# A tibble: 7 × 27
   year  educ meduc feduc   age  kids  black  east northcen   west  farm
  <int> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>    <dbl>  <dbl> <dbl>
1    72  12.2  8.33  8.90  44.9  3.03 0.0833 0.333    0.231 0.128  0.173
2    74  12.3  8.94  9.29  44.1  3.21 0.0578 0.237    0.353 0.110  0.208
3    76  12.2  8.25  8.99  43.5  2.80 0.0461 0.263    0.316 0.0855 0.237
4    78  12.6  9.07  9.80  43.4  2.80 0.0490 0.273    0.329 0.105  0.203
5    80  12.9  9.40  9.95  43.7  2.82 0.0704 0.141    0.394 0.155  0.218
6    82  13.2  9.56 10.2   43.2  2.40 0.199  0.231    0.290 0.0806 0.167
7    84  13.3 10.2  10.7   41.8  2.24 0.0678 0.260    0.333 0.102  0.192
# … with 16 more variables: othrural <dbl>, town <dbl>, smcity <dbl>,
#   y74 <dbl>, y76 <dbl>, y78 <dbl>, y80 <dbl>, y82 <dbl>, y84 <dbl>,
#   agesq <dbl>, y74educ <dbl>, y76educ <dbl>, y78educ <dbl>, y80educ <dbl>,
#   y82educ <dbl>, y84educ <dbl>
  • Diyelim ki, kids değişkeni için sadece ortalamaları değil yıllara göre standart sapmaları da görmek istiyorsunuz, bu durumda sd komutunu kullanabilirsiniz. Not: console’a help("summarise") yazarsanız, başka neleri bulabileceğiniz hakkında bilgi sahibi olabilirsiniz. R-studio’yu kullandıkça deneyimiziniz artacaktır.
require(dplyr)
fertil1 %>% 
  group_by(year) %>% 
  summarise("ortalama çocuk sayısı (kids)" = mean(kids), "stadandart sapma çocuk sayısı (kids)" = sd(kids) )
# A tibble: 7 × 3
   year `ortalama çocuk sayısı (kids)` `stadandart sapma çocuk sayısı (kids)`
  <int>                          <dbl>                                  <dbl>
1    72                           3.03                                   1.83
2    74                           3.21                                   1.50
3    76                           2.80                                   1.66
4    78                           2.80                                   1.58
5    80                           2.82                                   1.58
6    82                           2.40                                   1.70
7    84                           2.24                                   1.51
  • Biz Örnek 13.1’e geri dönelim. Kadın doğurganlığının belirleyicileri ile ilgili regresyonu yapalım.

  • Panel verilerle ilgili başka bir paket kullanarak regresyon analizini gerçekleştireceğiz. Ama bu ilk bir kaç örnek için bildiğimiz lm fonksiyonunu kullanacağız.

Tablo 13.1

summary(lm(kids ~ educ + age + I(age^2) + black + east + northcen + west + farm + othrural + town + smcity + y74 + y76 + y78 + y80 + y82 + y84, data = fertil1))

Call:
lm(formula = kids ~ educ + age + I(age^2) + black + east + northcen + 
    west + farm + othrural + town + smcity + y74 + y76 + y78 + 
    y80 + y82 + y84, data = fertil1)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.9878 -1.0086 -0.0767  0.9331  4.6548 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -7.742457   3.051767  -2.537 0.011315 *  
educ        -0.128427   0.018349  -6.999 4.44e-12 ***
age          0.532135   0.138386   3.845 0.000127 ***
I(age^2)    -0.005804   0.001564  -3.710 0.000217 ***
black        1.075658   0.173536   6.198 8.02e-10 ***
east         0.217324   0.132788   1.637 0.101992    
northcen     0.363114   0.120897   3.004 0.002729 ** 
west         0.197603   0.166913   1.184 0.236719    
farm        -0.052557   0.147190  -0.357 0.721105    
othrural    -0.162854   0.175442  -0.928 0.353481    
town         0.084353   0.124531   0.677 0.498314    
smcity       0.211879   0.160296   1.322 0.186507    
y74          0.268183   0.172716   1.553 0.120771    
y76         -0.097379   0.179046  -0.544 0.586633    
y78         -0.068666   0.181684  -0.378 0.705544    
y80         -0.071305   0.182771  -0.390 0.696511    
y82         -0.522484   0.172436  -3.030 0.002502 ** 
y84         -0.545166   0.174516  -3.124 0.001831 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.555 on 1111 degrees of freedom
Multiple R-squared:  0.1295,    Adjusted R-squared:  0.1162 
F-statistic: 9.723 on 17 and 1111 DF,  p-value: < 2.2e-16
  • Temel yıl 1972 olarak alınmıştır.
  • Doğurganlık için 82 ve 84’de keskin bir düşüş gözleniyor. Örneğin, diğer faktörler sabitken bir kadının 1982’de 1972’ye göre ortalama 0.52 daha az çocuğa sahip olduğu anlamına gelmektedir.
  • Bu çok büyük bir azalıştır. 1982’deki 100 kadının 1972’deki karşılaştırılabilir 100 kadından 52 tane daha az çocuğu olacağı öngörülmektedir.
  • Örneğin bu azalış, eğitim kontrol edildiği için ortalama eğitim düzeyindeki artışdan kaynaklanan doğurganlıktaki azalıştan ayrıdır.
  • Bu kukla değişkenlerin katsayıları, regresyona koyduğumuz diğer değişkenlerin yakalayamadığı nedenlerden meydana gelen azalışları temsil eder.

Örnek 13.2 Cinsiyet Ayrımı ve Eğitimin Getirisindeki Değişiklikler

  • Örnek 13.2 regresyon modeli, 1975 (temel yıl) ve 1985 yılları arasında havuzlanmış bir log(wage) denklemiyle başlıyor. (wage: saatlik ücret)

\[ log(wage) = \beta_0 + \delta_0 y85 + \beta_1 educ + \delta_1 y85 \cdot educ + \beta_2 exper + \beta_3 exper^2 + \beta_4 union + \beta_5 female + \delta_2 y85 \cdot female + u \]

  • Birçok değişkenin açıklamasını nasıl bulacağınızı artık biliyor olmalısınız. console’a yazacağınız help() fonksiyonu sayesinde veri setinin açıklamalarına uşaşabiliyorsunuz.

  • union, kişi bir sendikaya üyeyse bir diğer durumlarda sıfıra eşit olan bir kukla değişkendir.

  • y85, gözlem 1985 yılına aitse bire, 1978’e aitse sıfıra eşit olan bir kukla değişkendir.

  • Veriye göz atalım, cps78_85 verisetini kullanıyoruz.

data("cps78_85")
paged_table(cps78_85)
  • Bu verisetinde kaçtane 1978’e ait gözlem var, kaç tane 1985’e ait gözlem var. dplyr paketinin komutlarını kullanarak bulabilirim. Paketi bir kere library() yaptığım için tekrar yapmama gerek yok.
cps78_85 %>% 
  group_by(year) %>% 
  summarise(n = n())
# A tibble: 2 × 2
   year     n
  <int> <int>
1    78   550
2    85   534
  • 78 yılı için 550 kişi, 85 yılı için 534 kişilik farklı grup vardır.

  • Yazdığımız modelin sonuçlarına bakalım.

summary(lm(lwage ~ y85*(educ + female) + exper + I(exper^2) + union, data = cps78_85))

Call:
lm(formula = lwage ~ y85 * (educ + female) + exper + I(exper^2) + 
    union, data = cps78_85)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.56098 -0.25828  0.00864  0.26571  2.11669 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  4.589e-01  9.345e-02   4.911 1.05e-06 ***
y85          1.178e-01  1.238e-01   0.952   0.3415    
educ         7.472e-02  6.676e-03  11.192  < 2e-16 ***
female      -3.167e-01  3.662e-02  -8.648  < 2e-16 ***
exper        2.958e-02  3.567e-03   8.293 3.27e-16 ***
I(exper^2)  -3.994e-04  7.754e-05  -5.151 3.08e-07 ***
union        2.021e-01  3.029e-02   6.672 4.03e-11 ***
y85:educ     1.846e-02  9.354e-03   1.974   0.0487 *  
y85:female   8.505e-02  5.131e-02   1.658   0.0977 .  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4127 on 1075 degrees of freedom
Multiple R-squared:  0.4262,    Adjusted R-squared:  0.4219 
F-statistic:  99.8 on 8 and 1075 DF,  p-value: < 2.2e-16
  • Sonuçları modelimizde yerine yazalım.

\[ log(wage) = 0.459 + 0.118 y85 + 0.0747 educ + 0.0185 y85 \cdot educ + 0.0296 exper - 0.0004 exper^2 + 0.202 union - 0.317 female + 0.085 y85 \cdot female + u \]

  • Regresyon sonuçlarını yorumlayalım.

  • 1978 için kesim parametresi \(\beta_0\)’dır. (0.459)

  • 1985 için kesim parametresi \(\beta_0 + \delta_0\)’dır. (0.459 + 0.118 = 0.577) olur.

  • 1978 için eğitimin getirisi \(\beta_1\)’dir. (0.0747)

  • 1985 için eğitimin getirisi \(\beta_1 + \delta_1\)’dir. (0.0747 + 0.0185 = 0.0932)

  • Burada \(\delta_1 = 0.0185\) yedi yıllık dönemde ekstra bir yıllık eğitimin getirisinin nasıl değiştiğini ölçmektedir.

  • 1978 yılında kadınlar ve erkekler arasındaki maaş farkı \(\beta_5\)’dir. (-0.317)

  • 1978 yılında kadınlar ve erkekler arasındaki maaş farkı \(\beta_5 + \delta_2\)’dir. (-0.317 + 0.085 = -0.232)

  • Cinsiyet farkına yedi yıllık dönemde bir iyileşme olup olmadığı hipotezini (H0: \(\delta_2 = 0\)) test edebiliriz. Örneğimizde bu katsayı için t değeri 1.658’dir ve anlamlı değildir. H0 hipotezini reddedemeyiz. Bu katsayı bizim için 0’dan farksızdır, dolayısıyla 7 yıl içinde kadın maaşlarında bir gelişme olmamıştır.

  • Modelde deneyim (exper) ve sendika (union) 85 yılıyla çarpılmamış. Bu iki zaman döneminde de bu değişkenlerin maaşlar üzerindeki etkisinin farksız olduğunun varsayılması sonucunda yapılmıştır.

  • Sayfa 448’de nominal ücretlerin, reel ücretlere çevrilmesinin neden bu çalışma için gerekli olmadığı anlatılmıştır. Lütfen bu sayfayı okuyun ve anlamaya çalışın. Bu durumun bilgisayar alıştırmalarında sorulduğu söylenmiş. Gerekirse bilgisayar alıştırması B13.2 de bu durumu doğrulayın.

  • Bu katsayıların nasıl yorumlanacağından daha önce bahsetmiştik. Örneğin, 1978 yılında eğitimin getirisi yaklaşık %7.5 olduğu tahmin edilmiştir. 1985 yılında eğitimin getirisi yaklaşık 1.85 yüzdelik puan artarak %9.35’e çıkmıştır. Bu katsayı t istatistiğine (1.97) göre %5 seviyesinde istatistiksel olarak anlamlıdır.

  • 1978’de, diğer herşey sabitken bir kadın, bir erkekten yaklaşık %31.7 daha az kazanmıştır. 1985’te ücretlerdeki fark yaklaşık 8.5 yüzdelik puan azalmıştır.

Wooldridge 13.2: Havuzlanmış Yatay Kesitler ile Politika Analizi

  • Havuzlanmış yatay kesitler politika etkisini değerlendirmek için kullanılabilir.

  • Olaydan önce olan ve olaydan sonra veriler toplanarak etki anlaşılmaya çalışılır.

Örnek 13.3 Çöp Yakma Fırınının Ev Fiyatları Üzerindeki Etkisi

  • Kiel ve McClain (1995), yeni bir çöp yakma fırınının North Andover, Massachusetts’teki ev fiyatları üzerindeki etkisini araştırmış.

  • North Andover’de bir fırın yapılacağı dedikodusu 1978’de başlamış.

  • İnşaat 1981’de başlamış.

  • Fırının inşaat başladıktan kısa bir süre sonra çalışmaya başlayacağı beklenilsede, fırın 1985’de kullanılmaya başlanmış.

  • Örnek 1978’de satılan evlerin fiyatları ve 1981’de satılan evler için başka bir örnek kullanıyor.

  • Hipotez, fırının yakınındaki evlerin fiyatlarının daha uzaktaki evlerin fiyatlarına göre düşeceğidir.

  • Yakınlık, uzaklık tanımı olarak fırının etrafındaki üç millik alan fırına yakın olarak tanımlanmış. (Her evin fırına gerçek uzaklığı da kullanılabilir.)

  • Her ev fiyatı reel değerler üzerinden ölçülmektedir. Boston ev fiyatları endeksi kullanılarak, 1978 doları cinsinden ölçülmüştür.

  • rprice gerçek (reel) fiyatlarla ev fiyatını ifade etmektedir.

  • İlk olarak sadece 1981 verilerini kullanarak aşağıdaki model tahmin edilmiş.

\[ rprice = \gamma_0 + \gamma_1 nearinc \]

-nearinc, ev fırına yakınsa bir, uzaksa sıfır değeri alan kukla değişkendir.

  • Bu modeli tahmin etmeden tabiki verilere bir göz atıyoruz. kielmc veri setini kullanıyoruz.
data("kielmc")
paged_table(kielmc)
  • 1981 yılı için basit regresyonu gösterin, modeli model_81 olarak adlandırın.

  • Önce veri setini 1981 yılı için filtreleyelim ve yeni verisetine kielmc81 diyelim.

kielmc81 <- kielmc %>% filter(year==1981)
  • kielmc81 veri setini kullanarak basit regresyonu yapalım.
model_81 <- lm(kielmc81$rprice ~ kielmc81$nearinc)
summary(model_81)

Call:
lm(formula = kielmc81$rprice ~ kielmc81$nearinc)

Residuals:
   Min     1Q Median     3Q    Max 
-60678 -19832  -2997  21139 136754 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)        101308       3093  32.754  < 2e-16 ***
kielmc81$nearinc   -30688       5828  -5.266 5.14e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 31240 on 140 degrees of freedom
Multiple R-squared:  0.1653,    Adjusted R-squared:  0.1594 
F-statistic: 27.73 on 1 and 140 DF,  p-value: 5.139e-07
  • Denklemin sonucu

\[ \hat{rprice} = 101,308 - 30,688 nearinc \]

  • kesim parametresi 101,308 fırından uzak evlerin ortalama fiyatı, nearinc katsayısı ise fırına yakın evlerin bu ortalama fiyattan ne kadar az olduğudur.

  • Aynı regresyonu 1978 için yapmak istersek, sadece 1978 değerlerinin olduğu yeni bir veri seti yaratabiliriz.

kielmc78 <- kielmc %>% filter(year==1978)
  • 1978 için regresyon sonuçları
model_78 <- lm(kielmc78$rprice ~ kielmc78$nearinc)
summary(model_78)

Call:
lm(formula = kielmc78$rprice ~ kielmc78$nearinc)

Residuals:
   Min     1Q Median     3Q    Max 
-56517 -16605  -3193   8683 236307 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)         82517       2654  31.094  < 2e-16 ***
kielmc78$nearinc   -18824       4745  -3.968 0.000105 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 29430 on 177 degrees of freedom
Multiple R-squared:  0.08167,   Adjusted R-squared:  0.07648 
F-statistic: 15.74 on 1 and 177 DF,  p-value: 0.0001054
  • Denklemin sonucu

\[ \hat{rprice} = 82,517 - 18,824 nearinc \]

  • Burdan fırının zaten ev fiyatları düşük olan bir bölgeye yapıldığı anlaşılabilir.

  • Yeni fırının ev fiyatlarını azaltıp azaltmadığını, iki regresyonun \(\gamma_1\) katsayıları arasındaki farkı alarak anlabiliriz.

  • Bu bize yeni bir katsayı verir. Kitabınızdaki gibi bu yeni katsayıya \(\hat{\delta_1}\) diyelim.

\[ \hat{\delta_1} = \gamma_1^{1981} - \gamma_1^{1978} \]

  • Bu fark

\[ \hat{\delta_1} = 30,688 - (-18,824) = -11,863 \]

  • olur.

  • \(\hat{\delta_1}\), farkların farklarının tahmincisi olarak bilinir. (difference in differences - DD)

  • Çünkü \(\hat{\delta_1}\) formülü şu şekilde de yazılabilir.

\[ \hat{\delta_1} = (\bar{rprice}_{nr}^{1981} - \bar{rprice}_{fr}^{1981}) - (\bar{rprice}_{nr}^{1978} - \bar{rprice}_{fr}^{1978}) \]

  • nr, fırına yakın; fr, fırına uzak anlamındadır. Biliyoruz ki \(\gamma_1\) zaten bu ikisi arasındaki farkı veriyordu.

  • Ancak iki farklı regreyon yapmanın kötü yanı, \(\hat{\delta_1}\)’in sıfırdan farklı olduğunu test etmek için bir t istatistiğimizin olmamasıdır.

  • Bu iki regresyonu tek bir regresyon üzerinden yapmak daha anlamlı olacaktır.

model_78_81 <- lm(kielmc$rprice ~ kielmc$nearinc*kielmc$y81)
summary(model_78_81)

Call:
lm(formula = kielmc$rprice ~ kielmc$nearinc * kielmc$y81)

Residuals:
   Min     1Q Median     3Q    Max 
-60678 -17693  -3031  12483 236307 

Coefficients:
                          Estimate Std. Error t value Pr(>|t|)    
(Intercept)                  82517       2727  30.260  < 2e-16 ***
kielmc$nearinc              -18824       4875  -3.861 0.000137 ***
kielmc$y81                   18790       4050   4.640 5.12e-06 ***
kielmc$nearinc:kielmc$y81   -11864       7457  -1.591 0.112595    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 30240 on 317 degrees of freedom
Multiple R-squared:  0.1739,    Adjusted R-squared:  0.1661 
F-statistic: 22.25 on 3 and 317 DF,  p-value: 4.224e-13
  • son yaptığımız regreson modeli şu şekilde yazılabilir.

\[ rprice = \beta_0 + \delta_0 y81 + \beta_1 nearinc + \delta_1 y81 \cdot nearinc \]

  • Yani yaptığımız regresyon bize direk \(\delta_1\) sonucunu vermektedir.

  • Bu üç modeli bir tabloda bir arada gösterelim. Farklı regresyon tablolarını birarada göstermek için stargazer paketini kullanıyorduk.

library(stargazer)

Please cite as: 
 Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
 R package version 5.2.3. https://CRAN.R-project.org/package=stargazer 
stargazer(list(model_78,model_81,model_78_81), type = "text")

===========================================================================================
                                              Dependent variable:                          
                    -----------------------------------------------------------------------
                            rprice                  rprice                  rprice         
                              (1)                     (2)                     (3)          
-------------------------------------------------------------------------------------------
nearinc                 -18,824.370***                                                     
                          (4,744.594)                                                      
                                                                                           
nearinc                                         -30,688.270***                             
                                                  (5,827.709)                              
                                                                                           
nearinc                                                                 -18,824.370***     
                                                                          (4,875.322)      
                                                                                           
y81                                                                      18,790.290***     
                                                                          (4,050.065)      
                                                                                           
y81                                                                       -11,863.900      
                                                                          (7,456.646)      
                                                                                           
Constant                 82,517.230***          101,307.500***           82,517.230***     
                          (2,653.790)             (3,093.027)             (2,726.910)      
                                                                                           
-------------------------------------------------------------------------------------------
Observations                  179                     142                     321          
R2                           0.082                   0.165                   0.174         
Adjusted R2                  0.076                   0.159                   0.166         
Residual Std. Error  29,431.960 (df = 177)   31,238.040 (df = 140)   30,242.900 (df = 317) 
F Statistic         15.741*** (df = 1; 177) 27.730*** (df = 1; 140) 22.251*** (df = 3; 317)
===========================================================================================
Note:                                                           *p<0.1; **p<0.05; ***p<0.01

Tablo 13.2

  • Tablo 13.2 son regresyon modelimize ek olarak iki regresyon sonucu daha göstermektedir.

  • Bu iki farklı regresyon modelinin neden gösterildiği sayfa 452’de anlatılmıştır. Neden tablo 13.2 oluşturulmuş okuyun lütfen.

  • Bu tablonun birinci sütünunu model_78_81’de zaten kaydettik.

  • İkinci sütun için, evlerin yaşını (age) kontrol altında tutuyoruz.

  • Üçüncü sütun için, kontrol değişkenlerine eyaletler arası kara yoluna uzaklık (intst), feet olarak arsa alanı (land), feet olarak ev alanı (area), oda sayısı (rooms) ve banyo sayısı (baths) de ekleniyor.

  • İkinci sütün regresyonu

model_78_81_sutun_2 <- lm(rprice ~ nearinc*y81 + age + I(age^2), data = kielmc )
summary(model_78_81_sutun_2)

Call:
lm(formula = rprice ~ nearinc * y81 + age + I(age^2), data = kielmc)

Residuals:
   Min     1Q Median     3Q    Max 
-79349 -14431  -1711  10069 201486 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  8.912e+04  2.406e+03  37.039  < 2e-16 ***
nearinc      9.398e+03  4.812e+03   1.953 0.051713 .  
y81          2.132e+04  3.444e+03   6.191 1.86e-09 ***
age         -1.494e+03  1.319e+02 -11.333  < 2e-16 ***
I(age^2)     8.691e+00  8.481e-01  10.248  < 2e-16 ***
nearinc:y81 -2.192e+04  6.360e+03  -3.447 0.000644 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 25540 on 315 degrees of freedom
Multiple R-squared:  0.4144,    Adjusted R-squared:  0.4052 
F-statistic: 44.59 on 5 and 315 DF,  p-value: < 2.2e-16
  • Üçüncü sütün regresyonu
model_78_81_sutun_3 <- lm(rprice ~ nearinc*y81 + age + I(age^2) + intst + land + area + rooms + baths, data = kielmc )
summary(model_78_81_sutun_3)

Call:
lm(formula = rprice ~ nearinc * y81 + age + I(age^2) + intst + 
    land + area + rooms + baths, data = kielmc)

Residuals:
   Min     1Q Median     3Q    Max 
-76721  -8885   -252   8433 136649 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.381e+04  1.117e+04   1.237  0.21720    
nearinc      3.780e+03  4.453e+03   0.849  0.39661    
y81          1.393e+04  2.799e+03   4.977 1.07e-06 ***
age         -7.395e+02  1.311e+02  -5.639 3.85e-08 ***
I(age^2)     3.453e+00  8.128e-01   4.248 2.86e-05 ***
intst       -5.386e-01  1.963e-01  -2.743  0.00643 ** 
land         1.414e-01  3.108e-02   4.551 7.69e-06 ***
area         1.809e+01  2.306e+00   7.843 7.16e-14 ***
rooms        3.304e+03  1.661e+03   1.989  0.04758 *  
baths        6.977e+03  2.581e+03   2.703  0.00725 ** 
nearinc:y81 -1.418e+04  4.987e+03  -2.843  0.00477 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 19620 on 310 degrees of freedom
Multiple R-squared:   0.66, Adjusted R-squared:  0.6491 
F-statistic: 60.19 on 10 and 310 DF,  p-value: < 2.2e-16
  • Tablo 13.2
stargazer(list(model_78_81, model_78_81_sutun_2, model_78_81_sutun_3), type = "text")

============================================================================================
                                              Dependent variable:                           
                    ------------------------------------------------------------------------
                            rprice                               rprice                     
                              (1)                     (2)                     (3)           
--------------------------------------------------------------------------------------------
nearinc                 -18,824.370***                                                      
                          (4,875.322)                                                       
                                                                                            
y81                      18,790.290***                                                      
                          (4,050.065)                                                       
                                                                                            
y81                       -11,863.900                                                       
                          (7,456.646)                                                       
                                                                                            
nearinc                                           9,397.936*               3,780.337        
                                                  (4,812.222)             (4,453.415)       
                                                                                            
y81                                              21,321.040***           13,928.480***      
                                                  (3,443.631)             (2,798.747)       
                                                                                            
age                                              -1,494.424***            -739.451***       
                                                   (131.860)               (131.127)        
                                                                                            
I(age2)                                            8.691***                 3.453***        
                                                    (0.848)                 (0.813)         
                                                                                            
intst                                                                      -0.539***        
                                                                            (0.196)         
                                                                                            
land                                                                        0.141***        
                                                                            (0.031)         
                                                                                            
area                                                                       18.086***        
                                                                            (2.306)         
                                                                                            
rooms                                                                     3,304.227**       
                                                                          (1,661.248)       
                                                                                            
baths                                                                     6,977.317***      
                                                                          (2,581.321)       
                                                                                            
nearinc:y81                                     -21,920.270***           -14,177.930***     
                                                  (6,359.745)             (4,987.267)       
                                                                                            
Constant                 82,517.230***           89,116.540***             13,807.670       
                          (2,726.910)             (2,406.051)             (11,166.590)      
                                                                                            
--------------------------------------------------------------------------------------------
Observations                  321                     321                     321           
R2                           0.174                   0.414                   0.660          
Adjusted R2                  0.166                   0.405                   0.649          
Residual Std. Error  30,242.900 (df = 317)   25,543.290 (df = 315)   19,619.020 (df = 310)  
F Statistic         22.251*** (df = 3; 317) 44.591*** (df = 5; 315) 60.189*** (df = 10; 310)
============================================================================================
Note:                                                            *p<0.1; **p<0.05; ***p<0.01
  • Kitabınız yöntemi tanıtmak amacıyla fiyatlar üzerinde log kullanmadı. Ama log kullanmak çok daha mantıklıdır.

  • Modeli değiştirmek daha doğru olacaktır.

\[ log(price) = \beta_0 + \delta_0 y81 + \beta_1 nearinc + \delta_1 y81 \cdot nearinc + u \]

  • sonuçlar şöyle değişir.

\[ \hat{log(price)} = 11.29 + 0.457 y81 - 0.340 nearinc - 0.063 y81 \cdot nearinc \]

  • Bu sonuç evlerin değerinin yüzde 6.3’ünü kaybettikleri anlamına gelir.

  • log için tablo 13.2’yi oluşturalım.

logmodel_78_81_sutun_1 <- lm(log(rprice) ~ nearinc*y81, data = kielmc )
summary(logmodel_78_81_sutun_1)

Call:
lm(formula = log(rprice) ~ nearinc * y81, data = kielmc)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.11957 -0.20328  0.02226  0.18909  1.66604 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 11.28542    0.03051 369.839  < 2e-16 ***
nearinc     -0.33992    0.05456  -6.231 1.48e-09 ***
y81          0.19309    0.04532   4.261 2.69e-05 ***
nearinc:y81 -0.06265    0.08344  -0.751    0.453    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.3384 on 317 degrees of freedom
Multiple R-squared:  0.246, Adjusted R-squared:  0.2388 
F-statistic: 34.47 on 3 and 317 DF,  p-value: < 2.2e-16
  • log sütun 2
logmodel_78_81_sutun_2 <- lm(log(rprice) ~ nearinc*y81 + age + I(age^2), data = kielmc )
summary(logmodel_78_81_sutun_2)

Call:
lm(formula = log(rprice) ~ nearinc * y81 + age + I(age^2), data = kielmc)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.1692 -0.1601 -0.0008  0.1421  1.2336 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.137e+01  2.580e-02 440.693  < 2e-16 ***
nearinc      7.110e-03  5.161e-02   0.138  0.89051    
y81          2.198e-01  3.693e-02   5.952 7.06e-09 ***
age         -1.809e-02  1.414e-03 -12.793  < 2e-16 ***
I(age^2)     1.014e-04  9.095e-06  11.145  < 2e-16 ***
nearinc:y81 -1.850e-01  6.820e-02  -2.712  0.00706 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2739 on 315 degrees of freedom
Multiple R-squared:  0.5091,    Adjusted R-squared:  0.5013 
F-statistic: 65.34 on 5 and 315 DF,  p-value: < 2.2e-16

-log model sütun 3

logmodel_78_81_sutun_3 <- lm(log(rprice) ~ nearinc*y81 + age + I(age^2) + log(intst) + log(land) + log(area) + rooms + baths, data = kielmc )
summary(logmodel_78_81_sutun_3)

Call:
lm(formula = log(rprice) ~ nearinc * y81 + age + I(age^2) + log(intst) + 
    log(land) + log(area) + rooms + baths, data = kielmc)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.18440 -0.09946  0.01478  0.10984  0.74873 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.652e+00  4.159e-01  18.399  < 2e-16 ***
nearinc      3.224e-02  4.749e-02   0.679 0.497713    
y81          1.621e-01  2.850e-02   5.687 2.99e-08 ***
age         -8.359e-03  1.411e-03  -5.924 8.37e-09 ***
I(age^2)     3.763e-05  8.668e-06   4.342 1.92e-05 ***
log(intst)  -6.144e-02  3.151e-02  -1.950 0.052081 .  
log(land)    9.984e-02  2.449e-02   4.077 5.81e-05 ***
log(area)    3.508e-01  5.149e-02   6.813 4.98e-11 ***
rooms        4.733e-02  1.733e-02   2.732 0.006662 ** 
baths        9.428e-02  2.773e-02   3.400 0.000761 ***
nearinc:y81 -1.315e-01  5.197e-02  -2.531 0.011884 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.2038 on 310 degrees of freedom
Multiple R-squared:  0.7326,    Adjusted R-squared:  0.7239 
F-statistic: 84.91 on 10 and 310 DF,  p-value: < 2.2e-16
  • Log modelleri tablosu
stargazer(list(logmodel_78_81_sutun_1, logmodel_78_81_sutun_2, logmodel_78_81_sutun_3), type = "text")

============================================================================================
                                              Dependent variable:                           
                    ------------------------------------------------------------------------
                                                  log(rprice)                               
                              (1)                     (2)                     (3)           
--------------------------------------------------------------------------------------------
nearinc                    -0.340***                 0.007                   0.032          
                            (0.055)                 (0.052)                 (0.047)         
                                                                                            
y81                        0.193***                0.220***                 0.162***        
                            (0.045)                 (0.037)                 (0.028)         
                                                                                            
age                                                -0.018***               -0.008***        
                                                    (0.001)                 (0.001)         
                                                                                            
I(age2)                                            0.0001***               0.00004***       
                                                   (0.00001)               (0.00001)        
                                                                                            
log(intst)                                                                  -0.061*         
                                                                            (0.032)         
                                                                                            
log(land)                                                                   0.100***        
                                                                            (0.024)         
                                                                                            
log(area)                                                                   0.351***        
                                                                            (0.051)         
                                                                                            
rooms                                                                       0.047***        
                                                                            (0.017)         
                                                                                            
baths                                                                       0.094***        
                                                                            (0.028)         
                                                                                            
nearinc:y81                 -0.063                 -0.185***                -0.132**        
                            (0.083)                 (0.068)                 (0.052)         
                                                                                            
Constant                   11.285***               11.371***                7.652***        
                            (0.031)                 (0.026)                 (0.416)         
                                                                                            
--------------------------------------------------------------------------------------------
Observations                  321                     321                     321           
R2                           0.246                   0.509                   0.733          
Adjusted R2                  0.239                   0.501                   0.724          
Residual Std. Error    0.338 (df = 317)        0.274 (df = 315)         0.204 (df = 310)    
F Statistic         34.470*** (df = 3; 317) 65.341*** (df = 5; 315) 84.915*** (df = 10; 310)
============================================================================================
Note:                                                            *p<0.1; **p<0.05; ***p<0.01
  • Bu tablonun açıklamalarını daha önce yaptık. Kitabınızın 453. sayfasını tekrar okuyun.

  • Katsayıların açıklamaları için 454. sayfayı okuyun.

  • Bu tür regresyonların, kontrol ve tedavi gruplarını açıklamak için kullanılabileceğini hatırlayın.