library(wooldridge)
## Warning: package 'wooldridge' was built under R version 4.4.2
data("discrim")
  1. Değişkenlerin Anlamları:

Bağımlı Değişken (psoda):

Açıklanmaya veya tahmin edilmeye çalışılan sonuç değişkenidir. Muhtemelen soda tüketimi veya soda tercihlerini temsil etmektedir.

Bağımsız Değişkenler:

  • prpblck

prpblck: Siyahi nüfusun oranı. Soda tüketiminin bu demografik faktöre göre nasıl değiştiğini yansıtır.

  • income

income: Gelir düzeyi. Soda tüketiminin ekonomik koşullara göre nasıl değiştiğini açıklar.

Katsayılar (𝛽0,𝛽1, 𝛽 2 ):

  • β 0: Sabit terim (intercept). Tüm bağımsız değişkenler sıfır olduğunda psoda’nın ortalamadeğerini ifade eder.

  • β 1: prpblck bir birim (örneğin %1) arttığında, income sabitken,psoda’da ne kadar bir değişiklik olduğunu ifade eder.

  • β2​: income’un katsayısı. Gelir bir birim (örneğin 1.000 dolar) arttığında, prpblck sabitken,psoda’da ne kadar bir değişiklik olduğunu açıklar.

Hata Terimi (u):

Modelde yer almayan ve psoda’yı etkileyen diğer tüm faktörleri içerir.

  • b
mean(discrim$prpblck)
## [1] NA
sd(discrim$prpblck)
## [1] NA
mean(discrim$income)
## [1] NA
sd(discrim$income)
## [1] NA
  • Bildiğimiz mean ve sd fonksiyonlarını kullanarak ortama ve standart sapma değerlerini bulamadık. Çıkan NA sonucu bize bu değişkenlerin içinde bazı gözlemlerin mevcut olmadığını gösteriyor olabilir. discrim veri setinde 410 gözlem olduğundan her bir gözlemi kontrol edemiyorz ve bu değişkenlerin içinde kaç tane gözlemin mevcut olmadığını çıkaramıyoruz. R bize bu konuda is.na fonksiyonu ile yardımcı oluyor. is.na aslında sorduğumuz ingilizce bir soru ve is na? derken R’a mevcut olmayan gözlem var mı diye soru soruyoruz. R’da bize her bir gözlem için o gözlemin değeri olup olmadığını TRUE (doğru) ve FALSE (yanlış) olarak geri veriyor. Örnek vermek gerekirse konsola is.na(discrimincome)yazarsanız, RincomedeğişkenininherbirgözlemiiçinT RU Eve. income)) income değişkenin içindeki var olmayan gözlem sayısını toplayacak ve bize verecektir.
sum(is.na(discrim$prpblck))
## [1] 1
sum(is.na(discrim$income))
## [1] 1
  • Gördüğünüz gibi hem prbblck hem income değişkenlerinin birer gözlemi boş değere sahip. Bu yüzden mean ve sd fonksiyonlarının NA gözlemlerinine sahip olduğunu söylememiz lazım
mean(discrim$prpblck,na.rm = TRUE)
## [1] 0.1134864
sd(discrim$prpblck,na.rm = TRUE)
## [1] 0.1824165
mean(discrim$income, na.rm = TRUE)
## [1] 47053.78
sd(discrim$income, na.rm = TRUE)
## [1] 13179.29
  • fonksiyonun içine yazdığımız na.rm (na remove, çıkar) öevcut olmayan gözlemleri hesaplamadan çıkarmamızı söyler. prbblck değişkeninin ortalaması 0.11, standart sapması 0.18, income değişkeninin ortalaması 47053, standart sapması 13179 olacaktır.

  • Diyelim ki siz bütün değişkenler için kaç tane gözlemin mevcut olmadığını, kaç tane gözlemin var olduğunu, ortalamasını ve standart sapmasını görmek istiyorsunuz. Bu durumda vtable paketi size yardımcı olacaktır. Aşağıdaki komutu kullanmak için vtable paketini yüklemeniz gerektiğini unutmayın.

library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.2
library(vtable)
## Warning: package 'vtable' was built under R version 4.4.2
sumtable(discrim, summ =  c("notNA(x)", "countNA(x)", "mean(x)", "sd(x)"))
Summary Statistics
Variable NotNA CountNA Mean Sd
psoda 402 8 1 0.089
pfries 393 17 0.92 0.11
pentree 398 12 1.3 0.64
wagest 390 20 4.6 0.35
nmgrs 404 6 3.4 1
nregs 388 22 3.6 1.2
hrsopen 410 0 14 2.8
emp 404 6 18 9.4
psoda2 388 22 1 0.094
pfries2 382 28 0.94 0.11
pentree2 386 24 1.4 0.65
wagest2 389 21 5 0.25
nmgrs2 404 6 3.5 1.1
nregs2 388 22 3.6 1.2
hrsopen2 399 11 14 2.8
emp2 397 13 18 8.6
compown 410 0 0.34 0.48
chain 410 0 2.1 1.1
density 409 1 4562 5132
crmrte 409 1 0.053 0.047
state 410 0 1.2 0.39
prpblck 409 1 0.11 0.18
prppov 409 1 0.071 0.067
prpncar 409 1 0.11 0.12
hseval 409 1 147399 56070
nstores 410 0 3.1 1.8
income 409 1 47054 13179
county 410 0 14 8
lpsoda 402 8 0.04 0.085
lpfries 393 17 -0.088 0.12
lhseval 409 1 12 0.39
lincome 409 1 11 0.28
ldensity 409 1 8 1
NJ 410 0 0.81 0.39
BK 410 0 0.42 0.49
KFC 410 0 0.2 0.4
RR 410 0 0.24 0.43

c.

discrimreg <- lm(psoda~prpblck+income, data = discrim)
summary(discrimreg)
## 
## Call:
## lm(formula = psoda ~ prpblck + income, data = discrim)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.29401 -0.05242  0.00333  0.04231  0.44322 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 9.563e-01  1.899e-02  50.354  < 2e-16 ***
## prpblck     1.150e-01  2.600e-02   4.423 1.26e-05 ***
## income      1.603e-06  3.618e-07   4.430 1.22e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.08611 on 398 degrees of freedom
##   (9 observations deleted due to missingness)
## Multiple R-squared:  0.06422,    Adjusted R-squared:  0.05952 
## F-statistic: 13.66 on 2 and 398 DF,  p-value: 1.835e-06

psoda = 0.956+0.115prpblck +0.0000016income + u

Örnek boyutu 399 gözlemdir (398 serbestlik derecesi ve 9 eksik gözlem ile gösterilir) ve ayarlanmış R2 0.595’tir. prpblck katsayısı, her şey eşit olduğunda, prpblck %10 artarsa, soda fiyatının ekonomik olarak önemli olmayan derecede yaklaşık 1,2 sent artacağını gösterir.

d.

basitdiscrimreg <- lm(psoda~prpblck, data = discrim)
summary(basitdiscrimreg)
## 
## Call:
## lm(formula = psoda ~ prpblck, data = discrim)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.30884 -0.05963  0.01135  0.03206  0.44840 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.03740    0.00519  199.87  < 2e-16 ***
## prpblck      0.06493    0.02396    2.71  0.00702 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0881 on 399 degrees of freedom
##   (9 observations deleted due to missingness)
## Multiple R-squared:  0.01808,    Adjusted R-squared:  0.01561 
## F-statistic: 7.345 on 1 and 399 DF,  p-value: 0.007015
  • Basit regresyon ile prpblack üzerindeki katsayının tahmini 0.065’tir. Bu, önceki tahminden daha düşüktür ve bu nedenle, gelir hariç tutulduğunda ayrımcılık etkisinin azaldığını gösterir.

e

logdiscrimreg <- lm(log(psoda)~prpblck+log(income), data = discrim)
summary(logdiscrimreg)
## 
## Call:
## lm(formula = log(psoda) ~ prpblck + log(income), data = discrim)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.33563 -0.04695  0.00658  0.04334  0.35413 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -0.79377    0.17943  -4.424 1.25e-05 ***
## prpblck      0.12158    0.02575   4.722 3.24e-06 ***
## log(income)  0.07651    0.01660   4.610 5.43e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0821 on 398 degrees of freedom
##   (9 observations deleted due to missingness)
## Multiple R-squared:  0.06809,    Adjusted R-squared:  0.06341 
## F-statistic: 14.54 on 2 and 398 DF,  p-value: 8.039e-07
paste( (0.2*100)*0.122, "yüzdelik artış")
## [1] "2.44 yüzdelik artış"

“Prpblck” yüzde 20 artarsa, psoda tahmini olarak %2,44 artacaktır

f

logdiscrimregprpov <- lm(log(psoda)~prpblck+log(income)+prppov, data = discrim)
summary(logdiscrimregprpov)
## 
## Call:
## lm(formula = log(psoda) ~ prpblck + log(income) + prppov, data = discrim)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.32218 -0.04648  0.00651  0.04272  0.35622 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.46333    0.29371  -4.982  9.4e-07 ***
## prpblck      0.07281    0.03068   2.373   0.0181 *  
## log(income)  0.13696    0.02676   5.119  4.8e-07 ***
## prppov       0.38036    0.13279   2.864   0.0044 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.08137 on 397 degrees of freedom
##   (9 observations deleted due to missingness)
## Multiple R-squared:  0.08696,    Adjusted R-squared:  0.08006 
## F-statistic:  12.6 on 3 and 397 DF,  p-value: 6.917e-08

prppov eklemek, prpblck katsayısının 0,0738’e düşmesine neden olur.

g

cor(log(discrim$income), discrim$prppov, use = "complete.obs")
## [1] -0.838467

Korelasyon yaklaşık olarak -0.838’dir. Bu mantıklı, çünkü grideki düşüşlerin daha yüksek yoksulluk oranlarıyla sonuçlanması beklenebilir.

h

Yüksek düzeyde ilişkili olmalarına rağmen, her ikisinin de dahil edilmesi mükemmel bir doğrusallık ile sonuçlanmaz ve bunun yerine, ayırt edici etkiyi izole etmeye yardımcı olan başka bir kontrol değişkeni ekleyerek modeli tamamlar.

f testi

  • Veri Hazırlığı Öncelikle, test yapmak için iki grup (örneğin, soda tüketim oranları) için verilerinizi hazırlamanız gerekiyor. Bu örnekte, verilerinizi veri çerçevesi (data frame) biçiminde varsayalım. Örneğin, discrim veri setindeki psoda (soda tüketimi) ve prpblck (siyah nüfus oranı) gibi değişkenleri kullanabilirsiniz.
# Veri setinden iki grup seçelim
group1 <- discrim$psoda[discrim$prpblck < 0.5]  
group2 <- discrim$psoda[discrim$prpblck >= 0.5]  
  • t-Testi Uygulamak Eğer iki grup arasındaki ortalamaların farklı olup olmadığını test etmek istiyorsanız, bağımsız iki örneklem t-testi yapabilirsiniz. Bu durumda, t.test() fonksiyonunu şu şekilde kullanabilirsiniz:
t_test_result <- t.test(group1, group2)
print(t_test_result)
## 
##  Welch Two Sample t-test
## 
## data:  group1 and group2
## t = -3.0361, df = 25.875, p-value = 0.005408
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.09613232 -0.01850296
## sample estimates:
## mean of x mean of y 
##  1.041432  1.098750
  • Bu sonuçlar, group1 ile group2 arasında anlamlı bir ortalama farkı olduğunu, ve bu farkın group2 lehine olduğunu göstermektedir.
  1. Varsayım Kontrolleri

T-testi için bazı varsayımlar vardır, bunlar:

Bağımsız gözlemler. Normal dağılım: Verinin normal dağılıp dağılmadığı kontrol edilmelidir. Varyansların homojenliği (eşitliği): İki grubun varyansları birbirine yakın olmalıdır. Varyansların eşitliği varsayımını kontrol etmek için var.test() fonksiyonunu kullanabilirsiniz:

# Varyansların eşitliğini test etme
var_test_result <- var.test(group1, group2)
print(var_test_result)
## 
##  F test to compare two variances
## 
## data:  group1 and group2
## F = 0.95465, num df = 376, denom df = 23, p-value = 0.8079
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.4792872 1.6163674
## sample estimates:
## ratio of variances 
##          0.9546547
  • Bu test, group1 ve group2 arasındaki varyansların birbirine eşit olduğunu gösteriyor. Varyansların oranı 1’e yakın olup, p-değeri 0.05’ten büyük olduğu için gruplar arasındaki varyans farkı anlamlı değildir.
  1. Veri Normalitesini Test Etme

Verilerin normal dağılıp dağılmadığını test etmek için shapiro.test() fonksiyonunu kullanabilirsiniz:

# Normal dağılımı test etme
shapiro_group1 <- shapiro.test(group1)
shapiro_group2 <- shapiro.test(group2)
# Sonuçları yazdır
print(shapiro_group1)
## 
##  Shapiro-Wilk normality test
## 
## data:  group1
## W = 0.9528, p-value = 1.262e-09
print(shapiro_group2)
## 
##  Shapiro-Wilk normality test
## 
## data:  group2
## W = 0.91586, p-value = 0.04735
  • group1 ve group2’nin verileri normal dağılıma uymuyor.

group1’in p-değeri çok küçük, bu yüzden kesin olarak normal dağılmadığı söylenebilir.

group2’nin p-değeri ise 0.05’e yakın, bu da verinin normal dağılıma yakın olmadığını - gösteriyor ama kesin bir şekilde reddedilemez.