ミクロ政治データ分析実習

第5回 Quartoと再現可能な研究

(そん)  財泫(じぇひょん)

関西大学総合情報学部

2024-05-09

R MarkdownとQuarto

R Markdown / Quartoとは

R Markdown
  • R + Markdown
  • Rのコードと結果、文章が一つの文書としてまとまったもの
    • HTML、Microsoft Word(.docx)、PDF等
  • スライド、ホームページ、ポスター、書籍なども作成可能

Quarto
  • 読み方は「クゥオート」(クワトロじゃない)
  • 断片化されつつあるR Markdown生態系を一つに統合したもの
    • R Markdownだとホームページには{blogdown}、書籍執筆は{bookdown}、スライド作成は{xaringan}など
    • 本講義のスライド、サポートページ、教科書、宋のホームページも全てQuartoで作成
  • R Markdownと使い方はほぼ同じ
    • 本講義ではQuartoを使用
  • Python/Julia/Observable JSも使用可能

プレーンテキストとリッチテキスト

  • Plain text:書式情報などが含まれていない純粋なテキストのみで構成されている文書
    • macOSの「テキストエディット」、Windowsの「メモ帳」など
  • Rich text:書式情報だけでなく、図表なども含まれる文書
    • Microsoft Word、Apple Pagesなど
  • 書式情報の例: 文書の余白、行間の幅、文字サイズ、太さ、色
  • リッチテキストには文字情報以外にも様々な書式情報が含まれているため、サイズが大きく、パソコンへの負担も大きい

プレーンからリッチへ

  • Markup言語:プレーンテキストをリッチテキストへ変換するための言語
  • HTML(HyperText Markup Language)が代表的
    • 例1) <b></b>で囲まれた文字は太字として出力される。
    • 例2) <a></a>で囲まれた文字はリンクであり、<a>href引数で指定されたリンク先へ飛ばされる。

Input:

この文字は<b>太字</b>にしましょう。<br/>
この文字は<a href = "https://www.jaysong.net">リンク</a>にしましょう。

Output:

この文字は太字にしましょう。
この文字はリンクにしましょう。

Markdownとは

  • Markdown): Markup言語の軽量版
    • 文章作成に必要なタグ(tag)をより簡単に記述できる。
    • ブラインドタッチに慣れればWordよりも素早く文書を作成することができるようになる。


以下の2つのコードは同じ結果を返す。

Markupの場合(HTML)

この文字は<b>太字</b>にしましょう。<br/>
この文字は<a href = "https://www.jaysong.net">リンク</a>にしましょう。

Markdownの場合

この文字は**太字**にしましょう。

この文字は[リンク](https://www.jaysong.net)にしましょう。

結果

この文字は太字にしましょう。

この文字はリンクにしましょう。

Markup vs. Markdown

表の作成

Markup

<table>
    <thead style = "font-weight:bold;">
        <td>ID</td>
        <td>Name</td>
    </thead>
    <tr>
        <td>1</td>
        <td>Song</td>
    </tr>
    <tr>
        <td>2</td>
        <td>Yanai</td>
    </tr>
</table>

Markdown

| ID | Name  |
|----|-------|
| 1  | Song  |
| 2  | Yanai |

綺麗に揃えなくてもOK

|ID|Name|
|---|---|
|1|Song|
|2|Yanai|

Output

ID Name
1 Song
2 Yanai

Markup vs. Markdown

箇条書き

Markup

<ul>
  <li>箇条書き1</li>
    <ul>
      <li>箇条書き1A</li>
      <li>箇条書き1B</li>
    </ul>
  <li>箇条書き2</li>
  <li>箇条書き3</li>
</ul>

Markdown

* 箇条書き1
   * 箇条書き1A
   * 箇条書き1B
* 箇条書き2
* 箇条書き3

Output

  • 箇条書き1
    • 箇条書き1A
    • 箇条書き1B
  • 箇条書き2
  • 箇条書き3

Markup

<ol>
  <li>箇条書き1</li>
    <ol>
      <li>箇条書き1A</li>
      <li>箇条書き1B</li>
    </ol>
  <li>箇条書き2</li>
  <li>箇条書き3</li>
</ol>

Markdown

1. 箇条書き1
   1. 箇条書き1-1
1. 箇条書き2
1. 箇条書き3

Output

  1. 箇条書き1
    1. 箇条書き1-1
  2. 箇条書き2
  3. 箇条書き3

はじめてのQuarto

.qmdファイルの生成

  1. RStudioを起動し、プロジェクトを作成する。
  2. File > New > Quarto Document…を選択する。
    • Use visual markdown editorのチェックを外す
  3. OKをクリックする。
  4. YAMLヘッダーを修正する。
  5. ファイルを保存する(File > Save)。
    • ショートカットキー: ⌘ + S(macOS)、または Ctrl + S(Linux/Windows)
  6. Sourceペイン上段のRenderをクリックする。
    • ショートカットキー: ⌘ + Shift + K(macOS)、または Ctrl + Shift + K(Linux/Windows)

YAMLヘッダー

.qmdファイル最上段に位置する文書の情報に関する内容

  • 最初はtitleformatのみになっているため、適宜修正(場合によってはtitleのみになっている)
---
title: "はじめてのQuarto"
author: "関大花子"
date: "2024/5/9"
format: html
lang: ja
---
  • title: 文書のタイトル
    • subtitle:でサブタイトルも付けられる。
  • author: 文書の作成者
  • date: 日付(「年/月/日」形式で入力)
    • date: todayに修正すると、Renderした日の日付が自動的につけられる。
  • format: 出力形式(htmlのままで良い)
    • 他にもPDF、Microsoft Word、スライド、ウェブページ、書籍などにも対応
  • lang: 出力言語(デフォルトはen; jaは日本語)

Markdown文法

Markdownの文法:文章の改行

1回のみの改行は連続した文字列として認識するため、文章を改行するためには、必ず2回改行が必要

Input

これは文章1です。
これは文章2です。

Output

これは文章1です。 これは文章2です。

Input

これは文章1です。

これは文章2です。

Output

これは文章1です。

これは文章2です。

Markdownの文法:強調

  • 英語の強調はイタリック、日本語の強調は太字を使用
    • イタリックの日本語は使用しない。

Input

文章の一部を**太字**にしてみましょう。

The G7 consists of Canada, France, Germany, Italy, *Japan*, UK, and USA.

~~取り消し線~~はあまり使わないかも。

<u>アンダーライン</u>はHTMLタグを使います。

Output

文章の一部を太字にしてみましょう。

The G7 consists of Canada, France, Germany, Italy, Japan, UK, and USA.

取り消し線はあまり使わないかも。

アンダーラインはHTMLタグを使います。

Markdownの文法:リンク

  • [リンク文](URL)
  • []で囲まれた文章をクリックすると()内で指定したURLへ移動

Input

[ここ](https://www.jaysong.net)をクリックすると、宋のHPへ移動します。

Output

ここをクリックすると、宋のHPへ移動します。

Markdownの文法:見出し

  • # + 半角スペース + 見出し(#が多いほど小さくなる)

Input

# 見出し1 (ヘッディング1)
## 見出し2 (ヘッディング2)
### 見出し3 (ヘッディング3)
#### 見出し4 (ヘッディング4)

Output

見出し1 (ヘッディング1)

見出し2 (ヘッディング2)

見出し3 (ヘッディング3)

見出し4 (ヘッディング4)

Markdownの文法:水平線

  • 任意の行に---を挿入
  • 章と章の区切り、節と節の区切りなどに使用

Input

文章1

---

文章2

Output

文章1


文章2

Markdownの文法:箇条書き(順序なし)

  • * + 半角スペース + 文字列
  • 階層構造にする場合、*の前に半角スペースを3個入れる
  • *の代わりに-も可

Input

* リスト1
* リスト2
   * リスト2-1
      * リスト2-1-1
      * リスト2-1-2
   * リスト2-1
* リスト3

Output

  • リスト1
  • リスト2
    • リスト2-1
      • リスト2-1-1
      • リスト2-1-2
    • リスト2-1
  • リスト3

Markdownの文法:箇条書き(順序付き)

  • 1. + 半角スペース + 文字列
  • 1.の箇所は任意の数字でもOK。1.2.、…も可
  • 階層構造にする場合、1.の前に半角スペースを3個入れる
  • 1.*の組み合わせも可能

Input

1. リスト1
2. リスト2
   1. リスト2-1
      1. リスト2-1-1
      2. リスト2-1-2
   2. リスト2-1
3. リスト3

Output

  1. リスト1
  2. リスト2
    1. リスト2-1
      1. リスト2-1-1
      2. リスト2-1-2
    2. リスト2-1
  3. リスト3

Markdownの文法:数式

  • 文中数式は$数式$、独立した行の数式は$$で囲む。
  • \(\LaTeX\)の数式表記法を理解する必要がある。

Input

文中の数式の例:$e = mc^2$

独立した数式の例は、

$$
y_i \sim \text{Normal}(\mathbf{X} \boldsymbol{\beta}, \sigma).
$$

のように書きます。

Output

文中の数式の例:\(e = mc^2\)

独立した数式の例は、

\[ y_i \sim \text{Normal}(\mathbf{X} \boldsymbol{\beta}, \sigma). \]

のように書きます。

Markdownの文法:表

  • 行は改行で、列は|で区切る
  • 1行目は表のヘッダーであり、|---|で区切る(-は1個以上でOK)
    • |---||:---|は左揃え、|---:|は右揃え、|:---:|は中央揃え

Input

|ID |Name   |Birth (Year)|Pref   |
|:-:|-------|-----------:|-------|
|1  |Ogura  |1852        |Tokyo  |
|2  |Tsurumi|1858        |Tochigi|
|3  |Yoshida|1858        |Fukuoka|
|4  |Hotta  |1859        |Chiba  |
|5  |Inoue  |1847        |Nagano |
|6  |Tezuka |1862        |Tokyo  |
|7  |Shikata|1857        |Saitama|
|8  |Nomura |1855        |Gunma  |

Output

ID Name Birth (Year) Pref
1 Ogura 1852 Tokyo
2 Tsurumi 1858 Tochigi
3 Yoshida 1858 Fukuoka
4 Hotta 1859 Chiba
5 Inoue 1847 Nagano
6 Tezuka 1862 Tokyo
7 Shikata 1857 Saitama
8 Nomura 1855 Gunma

Markdownの文法:コメント

出力に影響されないコメントを入れる場合

  • <!---->内に囲む
  • <!---->の間の文章は出力されない
  • 自分用のメモ、とりあえず出力させない内容などに使用
  • チャンク内コメントは#(チャンクは後に解説)

Input:

これは文章1です。

<!--
これはコメントです。
-->

これは文章2です。

Output:

これは文章1です。

これは文章2です。

Markdownの文法:その他

教科書の「R Markdown入門」と「Quarto入門」を参照

  • 図の挿入
  • 脚注
  • 引用
  • Quarto独自の機能など

Rコードの挿入

Rコード:チャンク(Chunk)

Rのコードを挿入する領域

  • ```{r}```で囲む。
    • チャンクの外にコードを書いても文章として認識する。
    • チャンク内においてMarkdown文法は通用しない。純粋なRコードのみ。
    • `は「バッククォート(back quote)」と読む。
    • チャンクの前後は必ず改行する(下のコードの4・9行目のように)。
  • コードの出力 > 結果の出力の順番

Input

ここはチャンクの外

ここに書いたものは文章として扱われる。

```{r}
x <- 5 # 円の半径
print(3.14 * x^2)
```

ここに書いたのも文章

Output

ここはチャンクの外

ここに書いたものは文章として扱われる。

x <- 5 # 円の半径
print(3.14 * x^2)
[1] 78.5

ここに書いたのも文章

Rコード:チャンクのオプション

チャンク内に各チャンクのオプションが指定可能

チャンクオプションの付け方

```{r}
#| label: my_chunk_1
#| warning: false
#| echo: false
#| fig-width: 8
#| fig-align: center

Rのコード
```
  • #| label: チャンクの名前
    • チャンクに名前を付ける
  • #| eval: false
    • コードのみ出力し、結果は出力しない
  • #| echo: false
    • 結果のみ出力し、コードは出力しない
  • #| fig-width: 5
    • 出力される図の幅を8インチに
  • #| fig-height: 500px
    • 出力される図の幅を高さを500ピクセルに
  • #| fig-align: center
    • 出力される図を中央揃えに
  • #| warning: false
    • 警告メッセージを隠す
  • #| error: true
    • エラーが発生してもとりあえずRenderする

Rコード:インラインコード

文章内にRコードの結果を埋め込む場合

  • `r`の間にコードを挿入
  • 単に`で囲まれたものはコードのように表示してくれるものの、そのコードは実行されない。文中に短いコードのみを入れたり、変数名、関数名を示す際に使う機能である。

Input:

```{r}
X <- c(2, 3, 5, 7, 11)
```

変数`X`の平均値は`r mean(X)`です。

Output:

X <- c(2, 3, 5, 7, 11)

変数Xの平均値は5.6です。

再現・再生可能な研究

再現可能性と再生可能性

国里 (2020)による定義

  • 学会、分野によっては正反対の概念になる場合もある (Barba 2018)


再生可能性 (Reproducibility)

  • 同じデータ + 同じ方法 = 同じ結果
  • Quarto/R Markdownの主な目的は再生可能性


再現可能性 (Replicability)

  • 新しいデータ + 同じ方法 = 同じ結果
  • 新しいデータ + 違う方法 = 同じ結果

Quartoと再生可能性

  1. 具体的にどのような手順で分析が行われたかが分かる
    • コードを記録&公開
  2. コードに対する説明が付いている
    • 自分が書いたコードであっても、昔書いたコードは読みにくい
    • 過去、自分が行った分析の再生する出来ない場合も
      • 今、教壇に立っている人の話ではない
  3. コードと結果が同時に照会できる
    • わざわざRを立ち上げなくても、その場で分析の手順が分かる

再生可能な研究を目指して

  • 可能な限り、詳細な説明を付ける
    • 文章領域では「以下のコードがどのような目的で書かれたコードであるか」などを明示する。
    • チャンク内にもこまめにコメント(#)を付ける
      • 理想としては一行ごとにコメントを付ける

悪い例 (悪くはないが、良くもない)

x <- rep(NA, 5)

良い例

x <- rep(NA, 5) # 欠損値で埋められた長さ5のベクトル

再生可能な研究を目指して

  • コードを分かりやすく書く
    • 長いオブジェクト名を避ける
    • 分かりやすいオブジェクト名
    • 適宜スペースと字下げを入れるなど
    • 読みやすいコードの書き方(前回講義を参照)
  • データについても詳細に書く
    • どのように収集されたデータであるのか
    • どのような変数があるのか

課題

今回以降の課題はQuartoを利用する。

  1. 今回課題用のプロジェクトを作成する。
  2. LMSの「第5回課題」から「問題ファイル(.qmd形式)」ダウンロードし、プロジェクトのフォルダーにアップロードする。
  3. アップロードした.qmdファイルを開く。
  4. Renderし、結果を確認する。
  5. 本講義のサポートページの「課題 > 第5回課題」へアクセスする。
  6. サンプルのような体裁になるように問題ファイルを修正する。
    • 学籍番号・氏名は自分の学籍番号・氏名に直すこと。
  7. 完成後、生成された.htmlファイルを自分のPCにダウンロードし、ダウンロードした.htmlファイルを関大LMSに提出する。
    • ファイルのダウンロード方法はサポートページの「Rの使い方 > ファイル管理」を参照すること
  8. 期限は2024年5月15日(水)の23時59分とする。

注意!!

  • 間違ったファイルを提出しないこと(期限の差し替えは何度でも可; 期限の差し替えは不可)
    • ダメな例).qmdファイルの提出 \(\leftarrow \times\)
    • 邪悪な例).qmdファイルの拡張子を.htmlに変えて提出 \(\leftarrow \times\)(Androidスマホにリンゴのシールだけ貼って、「これiPhoneです」と言うのと同じレベルの話)
  • サポートページの「課題の取り組み方」を必ず確認すること。毎年、間違って提出方法で未提出扱いとなった学生がいる。自分が提出したファイルが問題ないかを確認したい場合、LMSの「マイレポート」から提出物をダウンロードし、自分のPCで開いてみることを推奨。期限内なら何度でも差し替え可能。
  • 期限内に提出できなかった場合、宋に連絡不要(延長は絶対にない)