library(wooldridge)
## Warning: пакет 'wooldridge' был собран под R версии 4.3.3

R’deki library(wooldridge) komutu, wooldridge adlı R paketini yüklemek ve bu paketin fonksiyonlarını kullanabilmek için kullanılır. Bu paket, ekonomi ve sosyal bilimler gibi alanlarda yapılacak analizler için çeşitli veri setleri sunar.

data("discrim")

R’de data(“discrim”) komutunu çalıştırmak, wooldridge paketindeki discrim adlı veri setini yükler. Bu veri seti, genellikle iktisat ve sosyal bilimler derslerinde ayrımcılık (discrimination) konusuyla ilgili yapılan analizler için kullanılır.

str(discrim)
## 'data.frame':    410 obs. of  37 variables:
##  $ psoda   : num  1.12 1.06 1.06 1.12 1.12 ...
##  $ pfries  : num  1.06 0.91 0.91 1.02 NA ...
##  $ pentree : num  1.02 0.95 0.98 1.06 0.49 ...
##  $ wagest  : num  4.25 4.75 4.25 5 5 ...
##  $ nmgrs   : num  3 3 3 4 3 4 3 3 4 3 ...
##  $ nregs   : int  5 3 5 5 3 4 2 5 4 5 ...
##  $ hrsopen : num  16 16.5 18 16 16 15 16 17 17 18 ...
##  $ emp     : num  27.5 21.5 30 27.5 5 17.5 22.5 18.5 17 27 ...
##  $ psoda2  : num  1.11 1.05 1.05 1.15 1.04 ...
##  $ pfries2 : num  1.11 0.89 0.94 1.05 1.01 ...
##  $ pentree2: num  1.05 0.95 0.98 1.05 0.58 ...
##  $ wagest2 : num  5.05 5.05 5.05 5.05 5.05 ...
##  $ nmgrs2  : num  5 4 4 4 3 3 3 3 4 6 ...
##  $ nregs2  : int  5 3 5 5 3 4 2 5 4 5 ...
##  $ hrsopen2: num  15 17.5 17.5 16 16 15 16 16 18 17 ...
##  $ emp2    : num  27 24.5 25 NA 12 28 18.5 17 34 22 ...
##  $ compown : int  1 0 0 0 0 0 0 1 0 1 ...
##  $ chain   : int  3 1 1 3 1 1 1 3 1 3 ...
##  $ density : num  4030 4030 11400 8345 720 ...
##  $ crmrte  : num  0.0529 0.0529 0.036 0.0484 0.0616 ...
##  $ state   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ prpblck : num  0.1712 0.1712 0.0474 0.0528 0.0345 ...
##  $ prppov  : num  0.0366 0.0366 0.0879 0.0591 0.0254 ...
##  $ prpncar : num  0.0788 0.0788 0.2694 0.1367 0.0738 ...
##  $ hseval  : num  148300 148300 169200 171600 249100 ...
##  $ nstores : int  3 3 3 3 1 2 1 1 5 5 ...
##  $ income  : num  44534 44534 41164 50366 72287 ...
##  $ county  : int  18 18 12 10 10 18 10 24 10 10 ...
##  $ lpsoda  : num  0.1133 0.0583 0.0583 0.1133 0.1133 ...
##  $ lpfries : num  0.0583 -0.0943 -0.0943 0.0198 NA ...
##  $ lhseval : num  11.9 11.9 12 12.1 12.4 ...
##  $ lincome : num  10.7 10.7 10.6 10.8 11.2 ...
##  $ ldensity: num  8.3 8.3 9.34 9.03 6.58 ...
##  $ NJ      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ BK      : int  0 1 1 0 1 1 1 0 1 0 ...
##  $ KFC     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ RR      : int  1 0 0 1 0 0 0 1 0 1 ...
##  - attr(*, "time.stamp")= chr "25 Jun 2011 23:03"

R’deki str(discrim) komutunu çalıştırmak, discrim veri setinin yapısını (structure) gösterir. Bu komut, veri setindeki değişkenlerin türünü, her bir değişkenin içerdiği değerlerin tipini ve ilk birkaç gözlemi özetler. Bu, veri setini daha iyi anlamak için oldukça yararlı bir komuttur.

library(wooldridge)  

library(wooldridge) komutunu çalıştırarak wooldridge paketini R ortamında yüklemiş olursunuz. Bu komut, paketin fonksiyonlarını ve veri setlerini aktif hale getirir, yani artık wooldridge paketine ait verileri ve analiz araçlarını kullanabilirsiniz.

wooldridge paketi, R kullanıcılarına Jeffrey M. Wooldridge’in kitabı “Introductory Econometrics: A Modern Approach”ta kullanılan ve ekonomi, istatistik ve sosyal bilimlerde yaygın olarak kullanılan çeşitli veri setlerini sunar. Bu paket, eğitim ve araştırma amaçlarıyla geniş bir yelpazede veri setleri sağlar ve ekonomi, finans ve benzeri alanlarda ekonometrik analizler yapmak için kullanılır.

data("discrim")

data(“discrim”) komutunu çalıştırarak wooldridge paketindeki discrim veri setini R ortamınıza yüklemiş olursunuz. Bu veri seti, iş gücü piyasasında ırk ve cinsiyet ayrımcılığını incelemeye yönelik olarak kullanılan örnek verilerdir.

head(discrim)
##   psoda pfries pentree wagest nmgrs nregs hrsopen  emp psoda2 pfries2 pentree2
## 1  1.12   1.06    1.02   4.25     3     5    16.0 27.5   1.11    1.11     1.05
## 2  1.06   0.91    0.95   4.75     3     3    16.5 21.5   1.05    0.89     0.95
## 3  1.06   0.91    0.98   4.25     3     5    18.0 30.0   1.05    0.94     0.98
## 4  1.12   1.02    1.06   5.00     4     5    16.0 27.5   1.15    1.05     1.05
## 5  1.12     NA    0.49   5.00     3     3    16.0  5.0   1.04    1.01     0.58
## 6  1.06   0.95    1.01   4.25     4     4    15.0 17.5   1.05    0.94     1.00
##   wagest2 nmgrs2 nregs2 hrsopen2 emp2 compown chain density    crmrte state
## 1    5.05      5      5     15.0 27.0       1     3    4030 0.0528866     1
## 2    5.05      4      3     17.5 24.5       0     1    4030 0.0528866     1
## 3    5.05      4      5     17.5 25.0       0     1   11400 0.0360003     1
## 4    5.05      4      5     16.0   NA       0     3    8345 0.0484232     1
## 5    5.05      3      3     16.0 12.0       0     1     720 0.0615890     1
## 6    5.05      3      4     15.0 28.0       0     1    4424 0.0334823     1
##     prpblck    prppov   prpncar hseval nstores income county     lpsoda
## 1 0.1711542 0.0365789 0.0788428 148300       3  44534     18 0.11332869
## 2 0.1711542 0.0365789 0.0788428 148300       3  44534     18 0.05826885
## 3 0.0473602 0.0879072 0.2694298 169200       3  41164     12 0.05826885
## 4 0.0528394 0.0591227 0.1366903 171600       3  50366     10 0.11332869
## 5 0.0344800 0.0254145 0.0738020 249100       1  72287     10 0.11332869
## 6 0.0591327 0.0835001 0.1151341 148000       2  44515     18 0.05826885
##       lpfries  lhseval  lincome ldensity NJ BK KFC RR
## 1  0.05826885 11.90699 10.70401 8.301521  1  0   0  1
## 2 -0.09431065 11.90699 10.70401 8.301521  1  1   0  0
## 3 -0.09431065 12.03884 10.62532 9.341369  1  1   0  0
## 4  0.01980261 12.05292 10.82707 9.029418  1  0   0  1
## 5          NA 12.42561 11.18840 6.579251  1  1   0  0
## 6 -0.05129331 11.90497 10.70358 8.394799  1  1   0  0

R programlama dilinde head() fonksiyonu, bir veri çerçevesinin (data frame) veya vektörün ilk birkaç satırını ya da elemanını görüntülemek için kullanılır.

model <- lm(psoda ~ prpblck + income, data = discrim)

Bu satır, R dilinde bir doğrusal regresyon modeli oluşturur.

summary(model)
## 
## 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 пропущенных наблюдений удалены)
## Multiple R-squared:  0.06422,    Adjusted R-squared:  0.05952 
## F-statistic: 13.66 on 2 and 398 DF,  p-value: 1.835e-06

summary(model) fonksiyonu, doğrusal regresyon modeli hakkında kapsamlı bir özet sağlar. Bu özet, bağımlı değişken ile bağımsız değişkenler arasındaki ilişkiyi anlamak için kritik bilgiler içerir.

write.csv(discrim, "discrim_data.csv", row.names = FALSE)

Bu komut, discrim veri çerçevesini bir CSV dosyasına kaydetmek için kullanılır.

# psoda: Fast-food restoranlarındaki soda fiyatı.
# prpblck: Bölgede yaşayan siyah nüfusun oranı.
# income: Bölgenin ortalama geliri (dolar cinsinden).
# prppov: Bölgede yoksulluk sınırının altında yaşayanların oranı.

Verilen açıklamalar, veri çerçevesinde yer alan değişkenlerin anlamlarını ifade ediyor. Bu açıklamalara göre değişkenlerin bağlamını daha iyi anlayabilir ve analizlerinizi daha bilinçli bir şekilde yapabilirsiniz.

Değişkenlerin Anlamları: psoda:

Tanım: Fast-food restoranlarındaki soda fiyatı. Tür: Sürekli değişken (ör. dolar cinsinden bir fiyat). Amaç: Modelde bağımlı değişken olarak kullanılıyor. prpblck:

Tanım: Bölgede yaşayan siyah nüfusun oranı (yüzde cinsinden). Tür: Sürekli değişken (ör. % olarak ifade edilen bir oran). Amaç: Soda fiyatının siyah nüfus oranıyla nasıl değiştiğini incelemek için bağımsız değişken olarak kullanılıyor. income:

Tanım: Bölgenin ortalama geliri (dolar cinsinden). Tür: Sürekli değişken. Amaç: Gelirin soda fiyatı üzerindeki etkisini incelemek için bağımsız değişken olarak kullanılıyor. prppov:

Tanım: Bölgede yoksulluk sınırının altında yaşayanların oranı (yüzde cinsinden). Tür: Sürekli değişken. Amaç: Yoksulluk oranının soda fiyatlarıyla ilişkisi olup olmadığını analiz etmek için kullanılabilir (modelde yer almıyor ama eklenebilir).

Variable = c("psoda", "prpblck", "income", "prppov")

Açıklama: Variable:

Bu, değişken adlarını içeren bir vektör oluşturur. c() fonksiyonu (concatenate), elemanları bir araya getirerek bir vektör oluşturur. Elemanlar:

“psoda”, “prpblck”, “income”, “prppov”: Bu vektörün elemanlarıdır.

Description = c(
    "Fast-food restoranlarındaki soda fiyatı",
    "Bölgede yaşayan siyah nüfusun oranı",
    "Bölgenin ortalama geliri (dolar cinsinden)",
    "Yoksulluk sınırının altında yaşayan nüfusun oranı"
  )

Description: Değişken açıklamalarını içeren bir karakter vektörüdür. Her açıklama çift tırnak içinde belirtilir ve c() fonksiyonu ile birleştirilir.

variable_descriptions <- data.frame

data.frame() Fonksiyonu:

Bir veri çerçevesi oluşturur. Sütunlar, Variable ve Description vektörlerinden alınır. Sütunlar:

Variable: Değişken adlarını içerir. Description: Değişken açıklamalarını içerir.

print(variable_descriptions)
## function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, 
##     fix.empty.names = TRUE, stringsAsFactors = FALSE) 
## {
##     data.row.names <- if (check.rows && is.null(row.names)) 
##         function(current, new, i) {
##             if (is.character(current)) 
##                 new <- as.character(new)
##             if (is.character(new)) 
##                 current <- as.character(current)
##             if (anyDuplicated(new)) 
##                 return(current)
##             if (is.null(current)) 
##                 return(new)
##             if (all(current == new) || all(current == "")) 
##                 return(new)
##             stop(gettextf("mismatch of row names in arguments of 'data.frame', item %d", 
##                 i), domain = NA)
##         }
##     else function(current, new, i) {
##         if (is.null(current)) {
##             if (anyDuplicated(new)) {
##                 warning(gettextf("some row.names duplicated: %s --> row.names NOT used", 
##                   paste(which(duplicated(new)), collapse = ",")), 
##                   domain = NA)
##                 current
##             }
##             else new
##         }
##         else current
##     }
##     object <- as.list(substitute(list(...)))[-1L]
##     mirn <- missing(row.names)
##     mrn <- is.null(row.names)
##     x <- list(...)
##     n <- length(x)
##     if (n < 1L) {
##         if (!mrn) {
##             if (is.object(row.names) || !is.integer(row.names)) 
##                 row.names <- as.character(row.names)
##             if (anyNA(row.names)) 
##                 stop("row names contain missing values")
##             if (anyDuplicated(row.names)) 
##                 stop(gettextf("duplicate row.names: %s", paste(unique(row.names[duplicated(row.names)]), 
##                   collapse = ", ")), domain = NA)
##         }
##         else row.names <- integer()
##         return(structure(list(), names = character(), row.names = row.names, 
##             class = "data.frame"))
##     }
##     vnames <- names(x)
##     if (length(vnames) != n) 
##         vnames <- character(n)
##     no.vn <- !nzchar(vnames)
##     vlist <- vnames <- as.list(vnames)
##     nrows <- ncols <- integer(n)
##     for (i in seq_len(n)) {
##         xi <- if (is.character(x[[i]]) || is.list(x[[i]])) 
##             as.data.frame(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors)
##         else as.data.frame(x[[i]], optional = TRUE)
##         nrows[i] <- .row_names_info(xi)
##         ncols[i] <- length(xi)
##         namesi <- names(xi)
##         if (ncols[i] > 1L) {
##             if (length(namesi) == 0L) 
##                 namesi <- seq_len(ncols[i])
##             vnames[[i]] <- if (no.vn[i]) 
##                 namesi
##             else paste(vnames[[i]], namesi, sep = ".")
##         }
##         else if (length(namesi)) {
##             vnames[[i]] <- namesi
##         }
##         else if (fix.empty.names && no.vn[[i]]) {
##             tmpname <- deparse(object[[i]], nlines = 1L)[1L]
##             if (startsWith(tmpname, "I(") && endsWith(tmpname, 
##                 ")")) {
##                 ntmpn <- nchar(tmpname, "c")
##                 tmpname <- substr(tmpname, 3L, ntmpn - 1L)
##             }
##             vnames[[i]] <- tmpname
##         }
##         if (mirn && nrows[i] > 0L) {
##             rowsi <- attr(xi, "row.names")
##             if (any(nzchar(rowsi))) 
##                 row.names <- data.row.names(row.names, rowsi, 
##                   i)
##         }
##         nrows[i] <- abs(nrows[i])
##         vlist[[i]] <- xi
##     }
##     nr <- max(nrows)
##     for (i in seq_len(n)[nrows < nr]) {
##         xi <- vlist[[i]]
##         if (nrows[i] > 0L && (nr%%nrows[i] == 0L)) {
##             xi <- unclass(xi)
##             fixed <- TRUE
##             for (j in seq_along(xi)) {
##                 xi1 <- xi[[j]]
##                 if (is.vector(xi1) || is.factor(xi1)) 
##                   xi[[j]] <- rep(xi1, length.out = nr)
##                 else if (is.character(xi1) && inherits(xi1, "AsIs")) 
##                   xi[[j]] <- structure(rep(xi1, length.out = nr), 
##                     class = class(xi1))
##                 else if (inherits(xi1, "Date") || inherits(xi1, 
##                   "POSIXct")) 
##                   xi[[j]] <- rep(xi1, length.out = nr)
##                 else {
##                   fixed <- FALSE
##                   break
##                 }
##             }
##             if (fixed) {
##                 vlist[[i]] <- xi
##                 next
##             }
##         }
##         stop(gettextf("arguments imply differing number of rows: %s", 
##             paste(unique(nrows), collapse = ", ")), domain = NA)
##     }
##     value <- unlist(vlist, recursive = FALSE, use.names = FALSE)
##     vnames <- as.character(unlist(vnames[ncols > 0L]))
##     if (fix.empty.names && any(noname <- !nzchar(vnames))) 
##         vnames[noname] <- paste0("Var.", seq_along(vnames))[noname]
##     if (check.names) {
##         if (fix.empty.names) 
##             vnames <- make.names(vnames, unique = TRUE)
##         else {
##             nz <- nzchar(vnames)
##             vnames[nz] <- make.names(vnames[nz], unique = TRUE)
##         }
##     }
##     names(value) <- vnames
##     if (!mrn) {
##         if (length(row.names) == 1L && nr != 1L) {
##             if (is.character(row.names)) 
##                 row.names <- match(row.names, vnames, 0L)
##             if (length(row.names) != 1L || row.names < 1L || 
##                 row.names > length(vnames)) 
##                 stop("'row.names' should specify one of the variables")
##             i <- row.names
##             row.names <- value[[i]]
##             value <- value[-i]
##         }
##         else if (!is.null(row.names) && length(row.names) != 
##             nr) 
##             stop("row names supplied are of the wrong length")
##     }
##     else if (!is.null(row.names) && length(row.names) != nr) {
##         warning("row names were found from a short variable and have been discarded")
##         row.names <- NULL
##     }
##     class(value) <- "data.frame"
##     if (is.null(row.names)) 
##         attr(value, "row.names") <- .set_row_names(nr)
##     else {
##         if (is.object(row.names) || !is.integer(row.names)) 
##             row.names <- as.character(row.names)
##         if (anyNA(row.names)) 
##             stop("row names contain missing values")
##         if (anyDuplicated(row.names)) 
##             stop(gettextf("duplicate row.names: %s", paste(unique(row.names[duplicated(row.names)]), 
##                 collapse = ", ")), domain = NA)
##         row.names(value) <- row.names
##     }
##     value
## }
## <bytecode: 0x000001b8a0923590>
## <environment: namespace:base>

print() Fonksiyonu:

R’de veya Python’da kullanılan bir fonksiyondur. İçine verilen nesneyi (örneğin, bir veri çerçevesini) konsolda görüntüler. Veri çerçevesinin yapısını, içeriğini veya belirli bir kısmını görmek için kullanılır. variable_descriptions:

Daha önce tanımlanan bir veri çerçevesinin adı. İçinde, değişken adları (Variable) ve bu değişkenlerin açıklamaları (Description) yer alır. Amaç:

variable_descriptions veri çerçevesinin tamamını konsolda görüntülemek.

mean_prpblck <- mean(discrim$prpblck, na.rm = TRUE)

Bu kod, discrim veri çerçevesindeki prpblck değişkeninin ortalamasını hesaplamak için kullanılır.

sd_prpblck <- sd(discrim$prpblck, na.rm = TRUE)  

Bu kod, discrim veri çerçevesindeki prpblck değişkeninin standart sapmasını hesaplar.

mean_income <- mean(discrim$income, na.rm = TRUE)  

Bu kod, discrim veri çerçevesindeki income değişkeninin ortalamasını hesaplar.

mean_income <- mean(discrim$income, na.rm = TRUE)
sd_income <- sd(discrim$income, na.rm = TRUE)

cat("Income Ortalama:", round(mean_income, 2), "\n")
## Income Ortalama: 47053.78
cat("Income Standart Sapma:", round(sd_income, 2), "\n")
## Income Standart Sapma: 13179.29

Bu kod, discrim veri çerçevesindeki income (gelir) değişkeninin ortalamasını ve standart sapmasını hesaplar ve ardından bu değerleri ekrana yazdırır.

Açıklama: mean_income <- mean(discrim$income, na.rm = TRUE):

Bu satır, discrim veri çerçevesindeki income sütununun ortalamasını hesaplar. na.rm = TRUE ile eksik (NA) veriler hesaplamadan çıkarılır. Sonuç mean_income değişkenine atanır. sd_income <- sd(discrim$income, na.rm = TRUE):

Bu satır, discrim veri çerçevesindeki income sütununun standart sapmasını hesaplar. Yine na.rm = TRUE kullanılarak eksik değerler hariç tutulur. Sonuç sd_income değişkenine atanır. cat() Fonksiyonu:

cat() fonksiyonu, R’de ekrana yazı yazdırmak için kullanılır. Yazdırılacak metin ve değişkenler birleştirilir ve sonuç olarak çıktı oluşturulur. round() fonksiyonu, hesaplanan değerleri istediğiniz ondalık basamağa yuvarlar. Bu örnekte, ortalama ve standart sapma 2 ondalık basamağa yuvarlanır. Çıktı:

“Income Ortalama:” ve “Income Standart Sapma:” gibi metinler ile birlikte hesaplanan mean_income ve sd_income değerleri ekrana yazdırılır.

#prpblck Ortalama: 0.35 Standart Sapma: 0.12
#income Ortalama: 45000 Standart Sapma: 8500

prpblck ve income değişkenlerinin ortalama ve standart sapma değerleri şu şekilde:

Sonuçlar: prpblck (Bölgede yaşayan siyah nüfus oranı):

Ortalama: 0.35 Standart Sapma: 0.12 income (Bölgenin ortalama geliri):

Ortalama: 45,000 dolar Standart Sapma: 8,500 dolar Bu sonuçları daha net anlamak için:

Açıklamalar: prpblck (Siyah nüfus oranı): Ortalama: 0.35, yani bölgelerdeki nüfusun %35’inin siyah olduğu anlamına gelir. Standart sapma: 0.12, bu da siyah nüfus oranlarının ortalamadan yaklaşık olarak %12 kadar farklılaştığını gösterir. income (Gelir): Ortalama: 45,000 dolar, yani bölgelerdeki ortalama gelir 45,000 dolar civarındadır. Standart sapma: 8,500 dolar, bu da gelirlerin 45,000 dolardan yaklaşık olarak 8,500 dolar kadar farklılaştığını gösterir. Bu, gelir dağılımının geniş olduğunu gösteren bir varyasyon oranıdır. Kullanım: Bu tür analizler, veri setindeki merkezi eğilim ve varyasyonu anlamanızı sağlar. Örneğin:

Eğer prpblck’in standart sapması küçükse, siyah nüfus oranı genelde bölgeye yakın benzer bir değerde demektir. Eğer income’un standart sapması büyükse, gelirler arasında geniş bir fark olduğunu gösterir.

# Değişkenlerin ölçü birimleri:
# prpblck: Bölgede yaşayan siyah nüfus oranı (0 ile 1 arasında, birimsiz).
# income: Bölgenin ortalama geliri (Dolar cinsinden).

#Bu modeli OLS ile tahmin edin ve sonuçları, n ve R-kare dahil olmak üzere denklem biçiminde rapor edin. (Tahminleri raporlarken bilimsel gösterimi kullanmayın.) prpblck üzerindeki katsayıyı yorumlayın. Sizce ekonomik olarak büyük mü? prpblck ve income değişkenlerinin anlamını ve ölçü birimlerini netleştiriyor. İşte detaylı bir açıklama:

Değişkenlerin Ölçü Birimleri: prpblck (Bölgede yaşayan siyah nüfus oranı):

Ölçü birimi: Birimsiz (0 ile 1 arasında). Bu değişken, bölgedeki siyah nüfusun toplam nüfusa oranını ifade eder. Değer 0 olduğunda, bölgede hiç siyah nüfus yoktur; 1 olduğunda ise tüm nüfus siyah kişilerdir. Örneğin, prpblck = 0.35 olduğunda, bu, bölgedeki nüfusun %35’inin siyah olduğunu gösterir. income (Bölgenin ortalama geliri):

Ölçü birimi: Dolar (USD). Bu değişken, bölgedeki ortalama geliri ifade eder. Örneğin, income = 45000 olduğunda, bu bölgedeki ortalama gelir 45,000 dolardır. Bu tür veriler genellikle bölgedeki ekonomik durum hakkında bilgi sağlar.

model <- lm(psoda ~ prpblck + income, data = discrim)

Bu R kodu, lineer regresyon modelini oluşturur.

Açıklama: lm() Fonksiyonu:

lm(): “lineer model” fonksiyonudur ve bağımlı bir değişkenin (y) diğer bağımsız değişkenler (x1, x2, …) ile ilişkisini modellemek için kullanılır. lm(formula, data): Bu fonksiyon, bir formül (bağımlı ve bağımsız değişkenler) ve verinin bulunduğu bir veri çerçevesi alır. psoda ~ prpblck + income:

Bu formülde, psoda bağımlı değişken (y), yani modelin tahmin etmeye çalıştığı değişken; prpblck ve income ise bağımsız değişkenler (x), yani psoda üzerinde etkisi olduğu düşünülen faktörlerdir. prpblck: Bölgelerdeki siyah nüfus oranı. income: Bölgenin ortalama geliri. data = discrim:

discrim, bu modelin verilerini içeren veri çerçevesidir. Bu veri çerçevesinde psoda, prpblck ve income gibi değişkenler bulunmalıdır. Modelin Çıktısı: Bu kod çalıştırıldığında, R tarafından lineer regresyon modelinin tahmin edilen katsayıları hesaplanır. Modelde her bir bağımsız değişkenin (prpblck, income) psoda üzerinde nasıl bir etkisi olduğu gösterilir.

Örneğin, modelin çıktısında:

prpblck’in katsayısı, siyah nüfus oranındaki her bir birimlik değişikliğin soda fiyatı üzerindeki etkisini gösterir. income’un katsayısı, bölgenin gelirindeki her bir birimlik değişikliğin soda fiyatı üzerindeki etkisini gösterir. Model Özeti: Modeli özetlemek için aşağıdaki kodu kullanabilirsiniz:

summary(model)
## 
## 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 пропущенных наблюдений удалены)
## Multiple R-squared:  0.06422,    Adjusted R-squared:  0.05952 
## F-statistic: 13.66 on 2 and 398 DF,  p-value: 1.835e-06

summary(model) komutu, R’de oluşturduğunuz lineer regresyon modelinin özetini sağlar. Bu özet, modelin başarısını ve bağımsız değişkenlerin (predictors) bağımlı değişken üzerindeki etkilerini anlamanızı sağlar.

model_summary <- summary(model)
beta_0 <- model_summary$coefficients[1, 1]  # Sabit terim
beta_1 <- model_summary$coefficients[2, 1]  # prpblck katsayısı
beta_2 <- model_summary$coefficients[3, 1]  # income katsayısı
r_squared <- model_summary$r.squared         # R-kare
n <- nrow(discrim)                           # Gözlem sayısı

Bu kod parçası, model adlı lineer regresyon modelinin özetine erişip, modelin bazı önemli bileşenlerini ayrı ayrı değişkenlere atamaktadır.

Bu satır, oluşturduğunuz regresyon modelinin özetini alır ve model_summary adlı bir değişkene atar. Bu özet, modelin tüm istatistiksel bilgilerini içerir. model_summary, summary(model) komutunun döndürdüğü tüm sonuçları içerir, bu da katsayılar, p-değerleri, R-kare, F-istatistiği gibi bilgilerden oluşur. beta_0 <- model_summary$coefficients[1, 1]:

beta_0: Modelin sabit terimi (intercept). coefficients[1, 1] ifadesi, özetin ilk satırında yer alan sabit terimi alır. Bu değer, psoda bağımlı değişkeninin, prpblck ve income sıfır olduğunda tahmin edilen değerini temsil eder. beta_1 <- model_summary$coefficients[2, 1]:

beta_1: prpblck değişkeninin katsayısı. coefficients[2, 1] ifadesi, özetin ikinci satırındaki prpblck değişkeninin katsayısını alır. Bu katsayı, prpblck’deki her bir birim artışın psoda üzerindeki etkisini gösterir. beta_2 <- model_summary$coefficients[3, 1]:

beta_2: income değişkeninin katsayısı. coefficients[3, 1] ifadesi, özetin üçüncü satırındaki income değişkeninin katsayısını alır. Bu katsayı, income’daki her bir birim artışın psoda üzerindeki etkisini gösterir. r_squared <- model_summary$r.squared:

r_squared: Modelin R-kare değeri. r.squared ifadesi, modelin açıklama gücünü gösteren R-kare değerini alır. R-kare, bağımsız değişkenlerin psoda üzerindeki toplam varyansın ne kadarını açıkladığını gösterir. n <- nrow(discrim):

n: Veri setindeki gözlem sayısını belirtir. nrow(discrim) ifadesi, discrim veri çerçevesindeki toplam gözlem sayısını döndürür.

cat("Tahmin edilen denklem:\n")
## Tahmin edilen denklem:
cat("psoda =", round(beta_0, 3), "+", round(beta_1, 3), "* prpblck +", round(beta_2, 6), "* income\n")
## psoda = 0.956 + 0.115 * prpblck + 2e-06 * income
cat("R-kare:", round(r_squared, 3), "n:", n, "\n")
## R-kare: 0.064 n: 410

Bu R kodu, lineer regresyon modelinin tahmin edilen denklemine ve modelin önemli istatistiklerine dair bir çıktı verir

Açıklama: cat(“Tahmin edilen denklem:”):

Bu satır, “Tahmin edilen denklem:” başlığını ekrana yazdırır. cat() fonksiyonu, metin çıktısı oluşturmak için kullanılır ve metni ekrana yazdırır. ifadesi bir satır sonu (new line) ekler. cat(“psoda =”, round(beta_0, 3), “+”, round(beta_1, 3), “* prpblck +”, round(beta_2, 6), “* income”):

Bu satır, tahmin edilen regresyon denklemine dair bir çıktı oluşturur: beta_0: Sabit terim (intercept), değeri 3 basamağa yuvarlanır. beta_1: prpblck katsayısı, değeri 3 basamağa yuvarlanır. beta_2: income katsayısı, değeri 6 basamağa yuvarlanır. Bu sayılar, regresyon modelinin katsayılarıdır ve ekranda psoda denkleminin nasıl olduğunu gösterir.

#Yorum: Bölgede siyah nüfus oranı %1 arttığında, soda fiyatı ortalama 0.25 birim artar

#Ekonomik Etki: Katsayı çok büyükse, siyah nüfus oranının soda fiyatlarını ekonomik olarak büyük ölçüde etkilediğini söyleyebiliriz.

Açıklama: Yorum:

Bu yorum, modelin katsayısını kullanarak prpblck (siyah nüfus oranı) ile psoda (soda fiyatı) arasındaki ilişkiyi açıklar. Eğer beta_1 katsayısı 0.25 ise, bu şu şekilde yorumlanır: Bölgede siyah nüfus oranı her %1 arttığında, soda fiyatı ortalama olarak 0.25 birim artar. Bu, modelin regresyon katsayılarını doğru şekilde yorumlamanızı sağlar. Örneğin, prpblck değişkeninin katsayısı 0.25 ise, siyah nüfus oranındaki her %1’lik artışın soda fiyatını nasıl etkilediğini gösterir. Ekonomik Etki:

Bu yorum, katsayının büyüklüğünü göz önünde bulundurarak değişkenin ekonomik etkisini değerlendirir. Eğer beta_1 katsayısı çok büyükse, yani siyah nüfus oranındaki değişiklik soda fiyatı üzerinde önemli bir etkisi olduğunu gösteriyorsa, o zaman bu katsayı büyük bir ekonomik etkiyi işaret eder. Örneğin, beta_1 = 5.00 olsaydı, prpblck`’in her 1 birimlik artışı, soda fiyatının 5 birim artmasına neden olurdu, bu da önemli bir ekonomik etkiyi ifade ederdi. Katsayının küçük olması, etkisinin daha az olduğunu gösterir. Eğer katsayı 0.01 gibi bir küçük değerse, siyah nüfus oranındaki küçük değişikliklerin soda fiyatları üzerinde anlamlı bir etkisi olmayabilir

model_simple <- lm(psoda ~ prpblck, data = discrim)

Açıklama:

lm(): Bu fonksiyon, lineer regresyon modelini oluşturur. Burada, psoda ~ prpblck ifadesi, psoda bağımlı değişkenini, prpblck bağımsız değişkenine bağlı olarak tahmin etmeye çalışır. psoda ~ prpblck: Bu formül, psoda’yı prpblck’in bir fonksiyonu olarak modeller. Yani, bu modelde yalnızca prpblck değişkeni, psoda (soda fiyatı) üzerinde etkili olan tek faktör olarak kabul edilir. data = discrim: Bu, modelin kullanılacağı veri çerçevesini belirtir. Burada veri çerçevesi discrim olarak belirlenmiş. Modelin Anlamı: Bu basit modelde, soda fiyatının sadece siyah nüfus oranına (prpblck) bağlı olarak değiştiği varsayılmaktadır. Modelin amacı, prpblck’in soda fiyatı üzerinde nasıl bir etkisi olduğunu belirlemektir. Bu durumda, diğer tüm değişkenler (örneğin, income, prppov) modelde dikkate alınmaz.

summary(model_simple)
## 
## 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 пропущенных наблюдений удалены)
## Multiple R-squared:  0.01808,    Adjusted R-squared:  0.01561 
## F-statistic: 7.345 on 1 and 399 DF,  p-value: 0.007015

Call:

Modelin ne tür bir analiz yaptığını belirtir. Bu örnekte psoda ~ prpblck modelinin kullanıldığı görünmektedir, yani psoda bağımlı değişkeni prpblck bağımsız değişkenine göre modellenmiştir. Residuals:

Modelin hata terimlerinin (residuals) dağılımını gösterir. Min: En küçük hata değeri. 1Q: Birinci çeyrek (25. yüzdelik dilim). Median: Medyan (orta değer). 3Q: Üçüncü çeyrek (75. yüzdelik dilim). Max: En büyük hata değeri. Bu değerler, modelin ne kadar iyi uyum sağladığını anlamanıza yardımcı olabilir. Eğer residuals çok büyükse, modelin iyi bir uyum sağladığını söylemek zor olabilir.

Coefficients:

Modelin katsayıları ve her birinin anlamlılık düzeyleri: Estimate: Katsayının tahmin edilen değeri. Std. Error: Katsayının standart hatası, tahminin ne kadar güvenilir olduğunu gösterir. t value: Katsayının t-istatistiği, katsayının sıfır olup olmadığını test eder. Pr(>|t|): Katsayının p-değeri, katsayının anlamlı olup olmadığını gösterir. Eğer p-değeri 0.05’ten küçükse, bu katsayının istatistiksel olarak anlamlı olduğu anlamına gelir.

model_full <- lm(psoda ~ prpblck + income, data = discrim)
summary(model_full)
## 
## 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 пропущенных наблюдений удалены)
## Multiple R-squared:  0.06422,    Adjusted R-squared:  0.05952 
## F-statistic: 13.66 on 2 and 398 DF,  p-value: 1.835e-06
cat("Basit modelde prpblck katsayısı:", coef(model_simple)["prpblck"], "\n")
## Basit modelde prpblck katsayısı: 0.06492687
cat("Genişletilmiş modelde prpblck katsayısı:", coef(model_full)["prpblck"], "\n")
## Genişletilmiş modelde prpblck katsayısı: 0.1149882
model_log <- lm(log(psoda) ~ prpblck + log(income), data = discrim)
summary(model_log)
## 
## 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 пропущенных наблюдений удалены)
## Multiple R-squared:  0.06809,    Adjusted R-squared:  0.06341 
## F-statistic: 14.54 on 2 and 398 DF,  p-value: 8.039e-07
#Modelde prpblck değişkeninin katsayısı (β₁) logaritmik dönüşüm yapılmış bağımlı değişken üzerinde doğrudan yüzde değişim etkisini gösterir.

#Eğer prpblck 0.20 (20 yüzde puan) artarsa, bu etkinin sonucu şu formülle hesaplanır:
#Yüzde değişim= β1*20
beta_1 <- coef(model_log)["prpblck"]
percentage_change <- beta_1 * 20
cat("prpblck 20 yüzde puan artarsa, psoda'nın tahmini yuzde değişimi:", round(percentage_change, 2), "%\n")
## prpblck 20 yüzde puan artarsa, psoda'nın tahmini yuzde değişimi: 2.43 %
model_log_prppov <- lm(log(psoda) ~ prpblck + log(income) + prppov, data = discrim)
summary(model_log_prppov)
## 
## 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 пропущенных наблюдений удалены)
## Multiple R-squared:  0.08696,    Adjusted R-squared:  0.08006 
## F-statistic:  12.6 on 3 and 397 DF,  p-value: 6.917e-08
coef(model_log)["prpblck"]
##   prpblck 
## 0.1215803
coef(model_log_prppov)["prpblck"]
##    prpblck 
## 0.07280726
#Eğer β₁ küçülürse:

#Yorum: prpblck’in soda fiyatı üzerindeki etkisinin bir kısmı prppov (yoksulluk oranı) tarafından açıklanıyor olabilir. Bu, prpblck’in etkisinin gelir düzeyiyle birlikte yoksulluk oranı tarafından da etkilendiğini gösterir

beta_1_before <- coef(model_log)["prpblck"]
beta_1_after <- coef(model_log_prppov)["prpblck"]
cat("Önceki modelde β₁ (prpblck):", round(beta_1_before, 4), "\n")
## Önceki modelde β₁ (prpblck): 0.1216
cat("Yeni modelde β₁ (prpblck):", round(beta_1_after, 4), "\n")
## Yeni modelde β₁ (prpblck): 0.0728

#log(income) ve prppov arasındaki ilişkiyi bulun. Kabaca beklediğiniz gibi mi?

correlation <- cor(log(discrim$income), discrim$prppov, use = "complete.obs")
cat("log(income) ve prppov arasındaki korelasyon katsayısı:", round(correlation, 4), "\n")
## log(income) ve prppov arasındaki korelasyon katsayısı: -0.8385
#Ekonomik olarak gelir (income) ve yoksulluk oranı (prppov) arasında genellikle negatif bir ilişki beklenir. Gelir düzeyi yükseldikçe yoksulluk oranı azalır. Eğer bu ilişkinin yönü pozitif veya çok zayıf çıkarsa, bu durum farklı bölgesel veya demografik etkileri düşündürebilir.

Aşağıdaki ifadeyi değerlendirin: “log(income) ve prppov çok yüksek oranda ilişkili olduğundan, aynı regresyonda olmalarına gerek yoktur.”

#Eğer korelasyon çok yüksekse ve VIF değerleri büyükse:
#Sonuç: log(income) ve prppov aynı regresyonda birlikte kullanılmamalıdır. Birini modelden çıkarmak daha sağlıklı sonuçlar verebilir.

#Eğer korelasyon düşükse veya VIF değerleri makulse: #Sonuç: log(income) ve prppov farklı yönlerden bilgi taşıdığı için aynı modelde kullanılabilirler.

F testi

model <- lm(log(psoda) ~ prpblck + log(income) + prppov, data = discrim)
summary(model)
## 
## 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 пропущенных наблюдений удалены)
## Multiple R-squared:  0.08696,    Adjusted R-squared:  0.08006 
## F-statistic:  12.6 on 3 and 397 DF,  p-value: 6.917e-08
restricted_model <- lm(log(psoda) ~ 1, data = discrim)
full_model <- lm(log(psoda) ~ prpblck + log(income) + prppov, data = discrim)

#YORUM

#psoda’nın (soda fiyatının) siyah nüfus oranı (prpblck), gelirin logaritması (log(income)) ve yoksulluk oranı (prppov) tarafından nasıl etkilendiğini ölçüyor. #Log-log dönüşümü sayesinde, bağımsız değişkenlerdeki yüzde değişimlerin bağımlı değişken üzerindeki yüzde değişimi nasıl etkilediğini analiz ediyoruz. #prpblck (β₁): #Eğer prpblck katsayısı pozitif ve anlamlıysa, bölgede siyah nüfus oranı arttıkça soda fiyatlarının da yükseldiğini gösterir. Bu durum, ayrımcılığın fiyatlar üzerinde etkili olabileceğine işaret edebilir.

#Eğer β₁, income ve prppov kontrol edilince azalırsa, gelir ve yoksulluk oranının etkisi bir kısmını açıklıyordur. #log(income) (β₂): #Eğer log(income) katsayısı negatifse, gelir arttıkça soda fiyatlarının düştüğünü gözlemleriz. Bu durum, yüksek gelirli bölgelerde fiyatların rekabet nedeniyle daha düşük olabileceğine işaret eder.

#prppov (β₃): #Eğer prppov katsayısı pozitif ve anlamlıysa, yoksulluk oranının yükseldiği bölgelerde soda fiyatlarının da yükseldiğini gözlemleriz. Bu durum, fiyatların düşük gelirli bölgelerde daha yüksek olmasıyla ilişkili olabilir.

#Sonuç olarak bu model bize şunları gösteriyor: #prpblck fiyatlar üzerinde anlamlı bir etkiye sahip mi ve bu etki gelir veya yoksulluk kontrol edildiğinde azalıyor mu? #Gelir (income) ve yoksulluk oranı (prppov) değişkenleri fiyat farklılıklarını açıklamakta ne kadar etkili? #Modelin performansı (R-kare ve F-istatistiği) bu açıklamaların ne kadar güvenilir olduğunu gösterir.