考古学のためのR統計解析〜Ben Marwick先生の授業を復習する（カイ2乗検定編）〜

この記事は、2020年5月7日に行われた「第2回考古学のためのR統計解析」の復習です。
当日は、ものすごスピードで盛りだくさんの内容が詰め込まれていたので、ゆっくりと勉強してみました。

[当日資料「Statistical Inference and Data Exploration for Archaeologists」](https://benmarwick.github.io/stat-inference-and-exploration-for-archaeologists/stat-inference-and-exploration-for-archaeologists.html#1)

# パッケージ読み込み

```{r}
library(tidyverse)
```

# 報告書データ読み込み

セミナーでは、Marwick先生がデータを用意されていましたが、せっかくなので日本の北海道のデータを使用します。
北海道埋蔵文化財センターさんの[厚真町オコッコ1遺跡（２）](https://sitereports.nabunken.go.jp/70356)（北埋調報356,p234-243）の石器一覧表データを使用しました。

1. 全国遺跡総覧から報告書データをダウンロード
2. pdftkコマンドで一覧表部分を抽出（Rコードではありません）

```{shelscript}
#247-256ページを抽出
pdftk myData/okoko.pdf cat 247-256 output myData/table.pdf
```
一覧表PDFはこんな感じです。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/aef51d8f-bcab-1857-ccaf-9fac7fad3208.png)

`tabulizer`パッケージでpdfのtableデータをtibble形式に変換し、csvに書き出します。

```{r}
library(tabulizer)
# pdfデータをtibble形式に変換
tabulizer::extract_tables("myData/table.pdf") %>%
purrr::map_dfr(as.data.frame) %>%
as_tibble()%>%
write_csv("myData/table.csv")
```

Rだけでデータクリーニングができなかったので、リブレオフィスでcsvを開いて目視で編集します。
この時点で、残念ながら再現性が破綻してしまいました。

```{r}
# 手動でデータ編集して再読込（再現性破綻）
tbs <-
  read_csv("myData/table2.csv")
# 読み込んだデータ
> tbs
# A tibble: 762 x 12
   遺構  発掘区 小グリッド 層位  取り上げ日 遺物名 細分記号 石材  長さ   厚さ 幅   
   <chr> <chr>  <chr>      <chr> <chr>      <chr>  <chr>    <chr> <chr> <dbl> <chr>
 1 北盛土… K      A          MII上 2015/8/21  石槍   Ib       Sh    5.8     0.7 2.2  
 2 南盛土… T      C          MII上 2015/9/18  石槍   Ib       Obs   8       1.1 2.9  
 3 NA    M      NA         V     2015/7/6   石槍   Ib       Sh    7.8     0.9 3.1  
 4 北盛土… J      D          MII中 2015/9/10  石槍   Ib       Sh    8       0.8 3.1  
 5 南盛土… S      NA         MI    2015/8/7   石槍   Ib       Obs   8.3     1.3 3.3  
 6 南盛土… R      NA         MI    2015/8/28  石槍   Ib       Sh    6.3     1   3.2  
 7 NA    M      NA         V上   2015/8/4   石槍   Ib       Sh    8.4     1   2.8  
 8 NA    S      NA         NA    2015/8/17  石槍   Ib       Sh    10.60   0.8 3.8  
 9 NA    T      NA         V     2015/7/8   石槍   Ia       Sh    6.7     1   2.7  
10 NA    O      NA         V中   2015/10/1  石槍   Ib       Obs   5.4     0.7 2.5  
# … with 752 more rows, and 1 more variable: 重さ <chr>
```

# カイ2乗検定

準備として、剝片石器を3種類選択します。オーソドックスな3器種を選びました。

```{r}
# 剝片石器をいくつか選択
tbs3 <- 
  tbs2 %>% 
  filter(遺物名 %in% c("石槍", "石鏃" ,"スクレイパー")) 
```

`library(infer)`は仮説検定のためのモダンなパッケージです。ggplot2と連携して、仮説検定を視覚的に把握することができます。以下で行っているのは次のような手順です。

1. `specify()`で分析対象の「遺物名」と「石材」のみのtableを生成しつつ、factor型に変換します。
2. `hypothesize()`で、帰無仮説を指定します。ここでは「遺物名と石材は独立である」が、帰無仮説です。
3. `generate()`で、標本からのリサンプリングを行います。今回は1000回のリサンプリングを指定しました。
4. `caluculate()`のオプションstat = に"Chisq"を指定します。

```{r}
library(infer) # 統計的検定のためのモダンなパッケージ
null_distribution <-  
  tbs3 %>% 
  specify(遺物名 ~ 石材) %>% # 遺物名と石材をfactor型に変換
  hypothesize(null = "independence") %>% # 独立性の検定を指定
  generate(reps = 1000, type = "permute") %>% # reps= でリサンプリング回数を指定　type = "bootstrap", "permute"," or "simulate" が選択可能
  calculate(stat = "Chisq") # カイ2乗統計量を算出
```

標本本体のカイ2乗検定の統計量を算出します。

```{r}
chi_square_stat <- 
  tbs3 %>%
  specify(遺物名 ~ 石材) %>% 
  calculate(stat = "Chisq") %>%
  dplyr::pull() # caluculate()の結果の要素（chitestの統計量）にアクセス
```

先ほど1000回リサンプリングした標本の分布にカイ2乗検定の統計量（chi_square_stat=2.88ぐらい）を重ねます。
標本分布の真ん中ほどに赤いバーで示されているのが、データから直接算出されたカイ2乗の統計量です。
このグラフを見る限りでは、「遺物名と石材は独立である」という帰無仮説を棄却することは難しそうです。

```{r}
null_distribution %>%  # 1000回リサンプリングしたカイ2乗の統計量
  visualize() +  # ヒストグラム描画
  shade_p_value(obs_stat = chi_square_stat, # データの統計量
                direction = "right") # 片側（上側）検定を指定
```

![chi_visual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60438/7b3a8d81-5aa6-fa67-3b41-3062a1635822.png)

p値を算出してみます。

```{r}
library(knitr)
tbs3 %>%
  chisq_test(遺物名 ~ 石材) %>% # 遺物名と石材の独立性の検定
  kable() # 表に書き出し
```
| statistic| chisq_df|   p_value|
|---------:|--------:|---------:|
|  2.889206|        3| 0.4090247|

p_value = 0.4090 ですから、やはり帰無仮説を棄却することはできなさそうです。
つまり、「石器の器種によって石材の偏りがあると判断することはできない」という結論になります。

次回はt検定編です（先は長い）。