教科書(今井 2018)第2章のRコードを整理する。

準備

tidyverseパッケージを使うので、まず読み込む。

2.1 労働市場における人種差別

データ resume.csv をプロジェクト内のdataディレクトリにダウンロードし、保存する。

このファイルをread::read_csv() で読み込み(readrパッケージはtidyverseに含まれている)、resumeという名前のオブジェクトを作る。

## Parsed with column specification:
## cols(
##   firstname = col_character(),
##   sex = col_character(),
##   race = col_character(),
##   call = col_integer()
## )

データの中身を確認する。

## Observations: 4,870
## Variables: 4
## $ firstname <chr> "Allison", "Kristen", "Lakisha", "Latonya", "Carrie"...
## $ sex       <chr> "female", "female", "female", "female", "female", "m...
## $ race      <chr> "white", "white", "black", "black", "white", "white"...
## $ call      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
##   firstname             sex                race          
##  Length:4870        Length:4870        Length:4870       
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##       call        
##  Min.   :0.00000  
##  1st Qu.:0.00000  
##  Median :0.00000  
##  Mean   :0.08049  
##  3rd Qu.:0.00000  
##  Max.   :1.00000

人種 (race) と連絡がきたかどうか (call) のクロス表を作る。

##        call
## race       0    1
##   black 2278  157
##   white 2200  235

周辺度数(各行、各列の合計)を加える。

##        call
## race       0    1  Sum
##   black 2278  157 2435
##   white 2200  235 2435
##   Sum   4478  392 4870

審査通過率を計算する。

## [1] 0.08049281

人種ごとの審査通過率を計算する。

## # A tibble: 2 x 2
##   race  passage
##   <chr>   <dbl>
## 1 black  0.0645
## 2 white  0.0965

Rでデータを部分集合化する

黒人らしい名前の審査通過率を計算する。そのために、dplyr::filter() を使って、データフレーム一部を切り取る(dplyrパッケージはtidyverseに含まれている)。

## [1] 0.06447639

黒人のみのデータフレームを作る。

このデータフレームを使って審査通過率を計算する。

## [1] 0.06447639

黒人女性らしい名前の観測対象を残し、変数は call と firstname のみ残す。

## # A tibble: 6 x 2
##    call firstname
##   <int> <chr>    
## 1     0 Lakisha  
## 2     0 Latonya  
## 3     0 Kenya    
## 4     0 Latonya  
## 5     0 Aisha    
## 6     0 Aisha

黒人男性のデータフレームを作る。

白人女性のデータフレームを作る。

白人男性のデータフレームを作る。

元のデータフレームの観測の数と比べる。

## [1] 4870
## [1] 4870

女性同士の人種格差を計算する。

## [1] 0.03264689

男性同士の人種格差を計算する。

## [1] 0.03040786

黒人女性であることを示すBlackFemaleという変数を作る。

人種と性別の組み合わせで4つのタイプに分類する type という変数を作る。

変数typeのクラスを確認する。

## [1] "character"

typeを因子に変える。

## 
## BlackFemale   BlackMale WhiteFemale   WhiteMale 
##        1886         549        1860         575

名前 (firstname) を因子型に変え、それぞれの名前の審査通過率を計算し、それを昇順に並べ替える。

## # A tibble: 36 x 2
##    firstname passage
##    <fct>       <dbl>
##  1 Aisha      0.0222
##  2 Rasheed    0.0299
##  3 Keisha     0.0383
##  4 Tremayne   0.0435
##  5 Kareem     0.0469
##  6 Darnell    0.0476
##  7 Tyrone     0.0533
##  8 Hakim      0.0545
##  9 Tamika     0.0547
## 10 Lakisha    0.055 
## # ... with 26 more rows

2.4 ランダム化比較実験

データファイル (social.csv)[http://qss.princeton.press/student-files/CAUSALITY/social.csv] をダウンロードしてdataディレクトリに保存する。

データを読み込み、中身を確認する。

## Parsed with column specification:
## cols(
##   sex = col_character(),
##   yearofbirth = col_integer(),
##   primary2004 = col_integer(),
##   messages = col_character(),
##   primary2006 = col_integer(),
##   hhsize = col_integer()
## )
## Observations: 305,866
## Variables: 6
## $ sex         <chr> "male", "female", "male", "female", "female", "mal...
## $ yearofbirth <int> 1941, 1947, 1951, 1950, 1982, 1981, 1959, 1956, 19...
## $ primary2004 <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0,...
## $ messages    <chr> "Civic Duty", "Civic Duty", "Hawthorne", "Hawthorn...
## $ primary2006 <int> 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1,...
## $ hhsize      <int> 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 1,...

異なるメッセージ (messages) を受け取ったグループの投票率を調べよう。

## # A tibble: 4 x 2
##   messages    mean
##   <chr>      <dbl>
## 1 Civic Duty 0.315
## 2 Control    0.297
## 3 Hawthorne  0.322
## 4 Neighbors  0.378

コントロールグループの投票率。

各グループの投票率からコントロールグループの投票率を引く

## # A tibble: 4 x 2
##   messages      dif
##   <chr>       <dbl>
## 1 Civic Duty 0.0179
## 2 Control    0     
## 3 Hawthorne  0.0257
## 4 Neighbors  0.0813

年齢変数を作成する。

メッセージ別の年齢の平均値を確かめる。

## # A tibble: 4 x 2
##   messages     age
##   <chr>      <dbl>
## 1 Civic Duty  49.7
## 2 Control     49.8
## 3 Hawthorne   49.7
## 4 Neighbors   49.9

メッセージ別のprimy2004の平均値を確かめる。

## # A tibble: 4 x 2
##   messages   primary2004
##   <chr>            <dbl>
## 1 Civic Duty       0.399
## 2 Control          0.400
## 3 Hawthorne        0.403
## 4 Neighbors        0.407

メッセージ別のhhsize(世帯人数)の平均値を確かめる。

## # A tibble: 4 x 2
##   messages   hhsize
##   <chr>       <dbl>
## 1 Civic Duty   2.19
## 2 Control      2.18
## 3 Hawthorne    2.18
## 4 Neighbors    2.19

2.5 観察研究

データファイル (minwage.csv)[http://qss.princeton.press/student-files/CAUSALITY/minwage.csv] をダウンロードしてdataディレクトリに保存する。

データを読み込み、中身を確認する。

## Parsed with column specification:
## cols(
##   chain = col_character(),
##   location = col_character(),
##   wageBefore = col_double(),
##   wageAfter = col_double(),
##   fullBefore = col_double(),
##   fullAfter = col_double(),
##   partBefore = col_double(),
##   partAfter = col_double()
## )
## Observations: 358
## Variables: 8
## $ chain      <chr> "wendys", "wendys", "burgerking", "burgerking", "kf...
## $ location   <chr> "PA", "PA", "PA", "PA", "PA", "PA", "PA", "PA", "PA...
## $ wageBefore <dbl> 5.00, 5.50, 5.00, 5.00, 5.25, 5.00, 5.00, 5.00, 5.0...
## $ wageAfter  <dbl> 5.25, 4.75, 4.75, 5.00, 5.00, 5.00, 4.75, 5.00, 4.5...
## $ fullBefore <dbl> 20.0, 6.0, 50.0, 10.0, 2.0, 2.0, 2.5, 40.0, 8.0, 10...
## $ fullAfter  <dbl> 0.0, 28.0, 15.0, 26.0, 3.0, 2.0, 1.0, 9.0, 7.0, 18....
## $ partBefore <dbl> 20.0, 26.0, 35.0, 17.0, 8.0, 10.0, 20.0, 30.0, 27.0...
## $ partAfter  <dbl> 36, 3, 18, 9, 12, 9, 25, 32, 39, 10, 20, 4, 13, 20,...
##     chain             location           wageBefore      wageAfter    
##  Length:358         Length:358         Min.   :4.250   Min.   :4.250  
##  Class :character   Class :character   1st Qu.:4.250   1st Qu.:5.050  
##  Mode  :character   Mode  :character   Median :4.500   Median :5.050  
##                                        Mean   :4.618   Mean   :4.994  
##                                        3rd Qu.:4.987   3rd Qu.:5.050  
##                                        Max.   :5.750   Max.   :6.250  
##    fullBefore       fullAfter        partBefore      partAfter    
##  Min.   : 0.000   Min.   : 0.000   Min.   : 0.00   Min.   : 0.00  
##  1st Qu.: 2.125   1st Qu.: 2.000   1st Qu.:11.00   1st Qu.:11.00  
##  Median : 6.000   Median : 6.000   Median :16.25   Median :17.00  
##  Mean   : 8.475   Mean   : 8.362   Mean   :18.75   Mean   :18.69  
##  3rd Qu.:12.000   3rd Qu.:12.000   3rd Qu.:25.00   3rd Qu.:25.00  
##  Max.   :60.000   Max.   :40.000   Max.   :60.00   Max.   :60.00

PAとNJのデータフレームを分ける。

賃金が5.05ドル以下のファーストフード店の割合。

## [1] 0.9106529
## [1] 0.003436426
## [1] 0.05970149
## [1] 0.9402985

常勤労働者の割合を表す変数を作る。

平均の差を計算する。

## [1] 0.04811886

ファーストフード店の割合を確認する。

## .
## burgerking        kfc       roys     wendys 
##  0.4054983  0.2233677  0.2508591  0.1202749
## .
## burgerking        kfc       roys     wendys 
##  0.4626866  0.1492537  0.2238806  0.1641791

バーガーキングのみ切り出す。

常勤雇用の割合を比較する。

## [1] 0.03643934



授業の内容に戻る