Rで論文っぽい図を描く④　APAスタイルの表を作成しWordに出力する

今日は、論文で使えるような表を作っていく。
Excelでもできるはずだが、**Rだと計算→表作成がほぼ同時にできる**ので、慣れれば楽だと思う。

（R3.6.2使用）

##サンプルデータの取得##

またまたirisデータでやります。

```{r}
#irisの取り込み
data <- iris
#確認
head(iris)
```

```html:出力結果
 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
```


##パッケージの読み込み##


```{r}
if (!require(qwraps2))install.packages('qwraps2')
if (!require(sjPlot))install.packages('sjPlot')
if (!require(tidyr))install.packages('tidyr')
if (!require(dplyr))install.packages('dplyr')
library(qwraps2)
library(sjPlot)
library(tidyr)
library(dplyr)
```

##表の作成##
まずは1因子の表から。

Speciesでグループ分けして、平均と標準誤差を出す。**dplyr**のgroup_by関数とsummarise関数（この2つはネットに情報けっこう有）、**qwraps2**のmean_sd関数（比較的マイナーかも）を組み合わせる。

```{r}
#平均と標準誤差の計算
sdtable <- data %>%
  dplyr::group_by(Species) %>% #Speciesでグループ分け
  dplyr::summarise("Petal length" = mean_sd(Petal.Length, #Petal.Lengthを用いた
                                            denote_sd = "pm", #pmは±の意味
                                            markup = getOption("qwraps2_markup", "markdown"))) #記法の指定（詳細は趣旨とずれるので割愛）

#Wordに出力
tab_df(sdtable,  file = "1way.doc")
```

こんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682014/16ac5abc-6b7b-9fef-9fb1-47af353eb6f9.png)



ちなみに、"pm"のところを"paren"にすると、1.46 (0.17)のような表記になる。




続いて**2因子**の表を作る。Two-way的な表。

irisデータはSpecies以外に因子となりうるものがないので、ここは説明のために架空のTemperatureというデータの列を作る。
各Species（50サンプルずつ）につき、25個をHigh、もう25個をLowとした（テキトーで特に意味はない）。

```{r}
#Temperatureの作成
data$Temperature <- c(rep("High", 25), rep("Low", 25), rep("High", 25), rep("Low", 25), rep("High", 25), rep("Low", 25))

#さっきのの応用
sdtable <- data %>%
  dplyr::group_by(Species, Temperature) %>%
  dplyr::summarise("Petal length" = mean_sd(Petal.Length,
                                            denote_sd = "pm",
                                            markup = getOption("qwraps2_markup", "markdown")),
                   "Sepal length" = mean_sd(Sepal.Length,
                                            denote_sd = "pm",
                                            markup = getOption("qwraps2_markup", "markdown")))

#Wordに出力
tab_df(sdtable, , file = "2waytable.doc")
```

ついでにSepal.Lengthの列も増やしておいたので、もしデータをたくさん並べたい時はこれでできることがわかる。

![スクリーンショット (89).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682014/32964fab-ec9c-51b9-5c7e-9a8360532126.png)


良い感じではあるが、ちょっと見づらい。

SpeciesとTemperatureを行列に分けることで、見やすくなる。（ややこしいので次は値はPetal.Lengthだけにしておく）。


```{r}
sdtablespread <- 
  sdtable %>%
  data.frame %>%
  pivot_wider(id_cols = Species,
              names_from = Temperature,
              values_from = c("Petal.length")
              )
tab_df(sdtablespread,
       col.header = c("Species/Temp", "High", "Low"),
       file = "2way.doc"
       )
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682014/ab6a90bf-9e8f-0555-6fd3-63bd59a338a9.png)


ちょっとすっきりした。

##Two-way ANOVAの結果を表にする（APAスタイル）

APAスタイルとは、多くの学術論文がこの方法に従って書くようにしてほしいというような、決まりごとのことである。**アパホテルではない笑**
[Wikipedia](https://ja.wikipedia.org/wiki/APA%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB)

まずはパッケージの読み込み

```{r}
if (!require(apaTables))install.packages('apaTables')
library(apaTables)
if (!require(MBESS))install.packages('MBESS')
library(MBESS)
```

続いて、平均と標準誤差の計算と表の作成（Wordに出力）を一発でやる（Excelより便利じゃないでしょうか？）

```{r}
apa.2way.table(Species, Temperature, Petal.Length, data,
               filename = "2way2.doc",
               table.number = 2, #出力時のTable番号を指定できる
               show.marginal.means = FALSE #TRUEにすれば、各要素に分けた際の平均を出してくれる
               )
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682014/78e199fe-7b30-21c7-3550-91bca31a50fb.png)


クールですねぇ。Word上では何もいじらずにこんな感じで出てきてくれる。


最後に、もろもろのTwo-way ANOVAの計算値を出力させてみる。


```{r}
#aovでTwo-way ANOVAの計算
dataanova <- aov(Petal.Length ~ Species * Temperature, data = data)

#Wordに出力
apa.aov.table(dataanova,
              file = "aov.doc",
              table.number = 3
              )
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682014/c57feb86-e100-fe5b-f710-d3644f400101.png)


Predictorのところの文字（Temperatureとか）が入り切ってないが笑、そのへんはWordでフォントの調整を行うといいと思う。