library(wooldridge)
## Warning: package 'wooldridge' was built under R version 4.4.2
data("discrim")
Açıklanmaya veya tahmin edilmeye çalışılan sonuç değişkenidir. Muhtemelen soda tüketimi veya soda tercihlerini temsil etmektedir.
prpblck: Siyahi nüfusun oranı. Soda tüketiminin bu demografik faktöre göre nasıl değiştiğini yansıtır.
income: Gelir düzeyi. Soda tüketiminin ekonomik koşullara göre nasıl değiştiğini açıklar.
β 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.
Modelde yer almayan ve psoda’yı etkileyen diğer tüm faktörleri içerir.
mean(discrim$prpblck)
## [1] NA
sd(discrim$prpblck)
## [1] NA
mean(discrim$income)
## [1] NA
sd(discrim$income)
## [1] NA
sum(is.na(discrim$prpblck))
## [1] 1
sum(is.na(discrim$income))
## [1] 1
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)"))
| 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 |
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.
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
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
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.
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.
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.
# Veri setinden iki grup seçelim
group1 <- discrim$psoda[discrim$prpblck < 0.5]
group2 <- discrim$psoda[discrim$prpblck >= 0.5]
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
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
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’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.