forked from babayoshihiko/morning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path09.Rmd
135 lines (92 loc) · 6.15 KB
/
09.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# クロス集計 {#ch09}
## クロス集計
クロス集計表の説明は、統計検定4級テキストの p. 62 にあります。
複数の項目を組合わせて度数を集計した表です。
テキストには書かれていませんが、実はこれを図示したものが帯グラフです。
つまり、帯グラフとクロス集計表は同じものを表しています。
そこで、帯グラフを作図する際に使ったデータを使ってみましょう。
まずは、同じデータをインポートし、データフレーム `dfInjury` に格納します。
<div style="display:inline-block;width:48%;vertical-align:top;">
```{r}
library(readxl)
dfInjury <- read_excel("とうけい4きゅう.xlsx", sheet = "p55-raw")
dfInjury$りゆう <- factor(dfInjury$りゆう)
dfInjury$せいべつ <- factor(dfInjury$せいべつ)
```
</div><div style="display:inline-block;width:10%;vertical-align:top;">
</div><div style="display:inline-block;width:38%;vertical-align:top;">
```{r}
flextable::flextable(dfInjury)
```
</div>
ここまでは、帯グラフの時と全く同じです。
次に、`ftable()` 関数を使って、クロス集計表を出力してみます。
```{r}
ftable(dfInjury, row.vars = "せいべつ", col.vars = "りゆう")
```
これは、確認するためには十分ですが、報告書にこのまま記載するわけにはいきません。
そこで、もう少し見た目の良い表を作るために `crosstable` というパッケージを追加してみます。
```{r}
library(crosstable)
as_flextable(crosstable(dfInjury, cols = りゆう, by = せいべつ))
```
最後に、インタラクティブに操作することができる `rpivotTable` パッケージを紹介します。
これは、HTML の特徴を生かして、ウェブページ上で表示を変えることができるものになります。
```{r}
library(rpivotTable)
rpivotTable(dfInjury, rows="せいべつ", cols="りゆう", width="100%", height="400px")
```
## Wide と Long、集計
このパートは、直接 R で作業を行いません。第8章の繰り返しになりますが、大事なことなので2回目の説明です。
R の解説本を読んでいて困ることは、本に書かれているソースコードを、自分のデータで実行してみても、エラーが出たり思い通りの図や表が出ないことがあります。
今、各群10人、2群の被験者に対して、2つの尺度(例、50m走と幅跳び)を、2回測定するものとします。
エクセル等でデータを作成するとき、次の3種類があります。
要約データ
| Group | 50m走 1回目 | 50m走 2回目 | 幅跳び 1回目 | 幅跳び 2回目 |
| ----- | -------- | -------- | ---------- | ---------- |
| A | 87.4 (2.0) | 92.4 (2.2) | 17.4 (2.0) | 22.4 (2.2) |
| B | 87.6 (2.2) | 88.4 (2.1) | 17.6 (2.0) | 16.8 (2.1) |
生データ (Wide)
| PatientID | 群 | 50m走 1回目 | 50m走 2回目 | 幅跳び 1回目 | 幅跳び 2回目 |
| --------- | -- | -------- | -------- | ---------- | ---------- |
| 1 | A | 85 | 85 | 17 | 18 |
| 2 | B | 85 | 80 | 16 | 17 |
多くの人は、生データ (Wide) から、集計データや図を作成していくのではないでしょうか?
実は、Wide 形式というのは、必ずしも使いやすい形式ではありません。
現在、Rでは以下のような生データ (Long) を準備することが推奨されています。
生データ (Long)
| PatientID | Group | Scale | Time | Value |
| --------- | ----- | ----- | ---- | ----- |
| 1 | A | 50m走 | 1 | 85 |
| 1 | A | 50m走 | 2 | 85 |
| 1 | A | 幅跳び | 1 | 17 |
| 1 | A | 幅跳び | 2 | 18 |
| 2 | B | 50m走 | 1 | 85 |
| 2 | B | 50m走 | 2 | 80 |
| 2 | B | 幅跳び | 1 | 16 |
| 2 | B | 幅跳び | 2 | 17 |
`ggplot2` による作図や各種の検定は、Long 形式のデータから直接できるようになっています。
統計検定4級テキストでは、これまでほとんど「集計データ」を扱ってきました。
これは、統計検定4級テキストにあるデータで完成されたものは、集計データだけだったからです。
生データ (Wide) に相当するものは、p.55 表2.2.1 (ある小学校の保健室の利用記録)、p.63 表2.2.6 (体育祭に関するアンケート結果の一覧表)など一部ありしたが、2名程度しかデータがありませんでした。
例外は、帯グラフを作成するときに利用した保健室データの生データですが、これはテキスト中にはなく想像で作ったものです。
生データ (Long) は、以下のようなことが利点として挙げられます。
* 記録する際のフォーマットに近い。
* 検査ごとに検査者や日付データなどを入れることもできる。
一方で、欠点もあります。
* 生データ (Wide) と異なり、欠測データが一覧表からは分かりにくい。
R では、これまで Long と Wide を変換するパッケージが何度か大きく改定されてきました。
インターネット上で `R wide long 変換` などと検索すると、現在でも変遷する前の古い方法が引っ掛かります。
| パッケージ | long から wide | wide から long |
| ---------- | -------------- | -------------- |
| reshape2 | dcast | melt |
| tidyr < 1.0 | spread | gather |
| tidyr >= 1.0 | dcast | pivot_longer |
`reshape2` パッケージは、今でも使うことができます。
また、`tidyr` パッケージの `spread()` と `gather()` 関数もまだありますが、いずれはなくなると思われます。
基本的には、`tidyr` の `pivot_*` 関数を覚えるようにしましょう。
なお、これは紹介するだけのとどめ、実際の操作は、次の章で行います。
## まとめ
* R におけるクロス集計の作成方法を学んだ。
* データの形式として、集計データ、生データ (wide)、生データ (long) について学んだ。
* R で作図や表作成をするには、適切な生データ (wide または long) を使う必要があることを学んだ。