Chapter 16 Week 15:言語研究とオープンサイエンス
16.2 今日の目標
- Rを使った研究の再現性を確保するための方法について理解することができる
2024年8月に名古屋学院大で行われた外国語メディア学会全国大会でのワークショップ(外国語教育研究者のためのオープンサイエンス入門― R Markdownを用いた実践編の内容を改変したものです。
16.3 はじめに
16.3.1 研究成果や研究資料の公開・共有の必要性
16.3.1.1 再現可能な研究のために、研究に使用したマテリアルの提出を推奨
e.g., 実験で使用した刺激文、分析に使用した生データ、分析コード
Shared Research Materials and Data Policy for Accepted Articles. Language Learning encourages accepted authors to upload their data collection materials and/or data to the IRIS database (http://www.iris-database.org). IRIS is an online repository for data collection materials used for second language research. This includes data elicitation instruments such as interview and observation schedules, language tests, pictures, questionnaires, software scripts, URL links, word lists, pedagogical interventions, and so on. (…) The sharing of research instrumentation benefits the research community and helps authors and journals increase the visibility of their published research.
16.4 1. R Markdownを使って分析結果をまとめることができる
16.4.1 R Studioを開いて作成する
16.4.1.1 R Markdownの解体新書
【パーツ1】YAML(YAML Ain’t Markup Language)ヘッダー:文章全体の体裁や情報を操作する
- タイトル、サブタイトル
- 作成者
- 作成した日時、更新日時も設定可能
- どのような形式で作成するか
注意
・ YAMLヘッダーは、RでもMarkdownでもないプログラム言語で記述します。
【パーツ2】コードチャンク:Rのコードを記述するところ
【パーツ3】ドキュメントチャンク:Markdownと呼ばれるプログラム言語で記述するところ
- 見出し、表、箇条書き、強調、斜体など、Wordのリボン部分にある機能をMarkdownで書く
16.6 実際に作ってみましょう
- デスクトップに新しいフォルダーを作成してください
- 名前は、英数字のみがいいです(Rが関係しそうな場合、ファイル名、フォルダ名に日本語を使わない方が安心です)
- 作り方を解説しているサイト(私たちのR)
- デスクトップのフォルダーを指定してプロジェクトを作成しましょう
16.7 ドキュメントチャンク:Markdown記法
16.7.1 覚えるのはマストではない。その都度調べてよく使うものを覚えていく
- Markdownなら生成AIはほぼ完ぺきに正解を教えてくれる
- 必要最低限で覚えておくとよい記法
- 見出し → これはマスト!
- #の数で指定。文字との間を半角あけるのを忘れない。
- 箇条書き
*,+,-のいずれかを入れる。文字との間を半角あけるのを忘れない。- 半角スペースを2つ前(もしくはtab)に入れると、レベル2を作れる。さらに2ついれると、、、
- 強調
- *で挟むと斜体
- **で挟むとBold体
- ***で挟むとどうなるでしょう
- 見出し → これはマスト!
16.8 Let’s 実践
- 以下の文章をMarkdownを使って再現してください。
’# 名古屋飯といえば
’## ひつまぶし:Hitsumabushi
おすすめは以下のお店です。
- ひつまぶし花岡
- 場所:栄
16.10 実は、Wordのように編集できます!
- Markdownで書かなくとも、VisualモードであればWordと似たようにできます。
- 以下で設定ができる
- [Tools] → [Global Options…] → [R Markdown] → [Visual]
- “Use visual editor by default for new documents”の項目に☑
- “Soft-wrap R Markdown files”にも☑を入れると、右側にアウトラインが出ます
- 欠点として、少し動作が遅い。簡単なものはMarkdownで書く方が速い
- 表などはVisualモードがおすすめ
16.11 コードチャンクの挿入
16.15 2. R Markdownでまとめた結果を共有することができる
- YAMLヘッダーのoutputを変更するだけ!
16.15.3 After
- テンプレートを追加することも可能。テンプレートはきちんとレベル分けの設定などを行っておく必要あり(設定の仕方)。
16.16 HTML形式だと、簡単にウェブサイトにできます
- リンクで他者に共有できます。
- 以下の二つは無料で利用できるが、無料版の場合、リンクを知る人だれもが閲覧できるので注意
16.16.1 RPubsを使う
- コメント機能もあるので、「発表へのコメントは匿名でこちらへ」みたいにできそう。
- 使い方の解説
16.16.2 Githubを使う
- Githubとは、コードのバージョン管理をするツール。共同編集可能。
- 今回は一番簡単な方法で実行します。しかし、Git(hub)をフルで使いこなせば、ファイルのバージョン管理、共同編集などが可能でより再現可能な資料作成に一歩近づくと思います。R Studioとの連携も可能。
- 使い方の解説
16.17 3. 様々なパソコンで同じ分析環境を再現することができる
16.17.1 パッケージのバージョン管理:renvパッケージ
reproducible environments(再現性のある分析環境)の略
RのプロジェクトごとにRの環境を作る。同じパソコンで、同じ名前でバージョンが異なるパッケージを使うことができる。
旧バージョンを試しに使ってみたい場合が、今のバージョンも記録しておきたいときに!
プロジェクトディレクトリを相手に共有できる!別のパソコンで分析したいときにも!
Let’s インストール
使用する3つの関数
init関数:パッケージ管理の開始を宣言snapshot関数:パッケージ情報の保存restore関数:パッケージ情報の復元
16.17.2 バージョン管理の開始
- 以下のコマンドを走らせると、プロジェクト内で使用しているパッケージを、RやRmdファイルなどから検出します。そして、そのバージョンの情報を
renv.lockファイルに保存します。
- 最初に実行すると、以下のメッセージが表示されます。
renv: Project Environments for R
Welcome to renv! It looks like this is your first time using renv.
This is a one-time message, briefly describing some of renv's functionality.
renv will write to files within the active project folder, including:
- A folder 'renv' in the project directory, and
- A lockfile called 'renv.lock' in the project directory.
In particular, projects using renv will normally use a private, per-project
R library, in which new packages will be installed. This project library is
isolated from other R libraries on your system.
In addition, renv will update files within your project directory, including:
- .gitignore
- .Rbuildignore
- .Rprofile
Finally, renv maintains a local cache of data on the filesystem, located at:
- "C:/Users/terai-masato/AppData/Local/R/cache/R/renv"
This path can be customized: please see the documentation in `?renv::paths`.
Please read the introduction vignette with `vignette("renv")` for more information.
You can browse the package documentation online at https://rstudio.github.io/renv/.
Do you want to proceed? [y/N]:
- yを押して進むと、開いているプロジェクトのあるディレクトリにrenvというフォルダーが作成されます。その中に、3つのファイルと、1つのディレクトリが作成されています。また、renv.lockというファイルも同じディレクトリに作成されます。新しく作成されたものは、すべて
renvパッケージの利用に必要なので、削除しないでください。
- "C:/Users/terai-masato/AppData/Local/R/cache/R/renv" has been created.
- Linking packages into the project library ... [33/33] Done!
- Resolving missing dependencies ...
# Installing packages --------------------------------------------------------
The following package(s) will be updated in the lockfile:
# CRAN -----------------------------------------------------------------------
- base64enc [* -> 0.1-3]
- bslib [* -> 0.5.1]
- cachem [* -> 1.0.8]
- cli [* -> 3.6.1]
- digest [* -> 0.6.33]
- ellipsis [* -> 0.3.2]
- evaluate [* -> 0.23]
- fastmap [* -> 1.1.1]
- fontawesome [* -> 0.5.2]
- fs [* -> 1.6.3]
- glue [* -> 1.6.2]
- highr [* -> 0.10]
- htmltools [* -> 0.5.7]
- jquerylib [* -> 0.1.4]
- jsonlite [* -> 1.8.7]
- knitr [* -> 1.45]
- lifecycle [* -> 1.0.4]
- magrittr [* -> 2.0.3]
- memoise [* -> 2.0.1]
- mime [* -> 0.12]
- prettydoc [* -> 0.4.1]
- R6 [* -> 2.5.1]
- rappdirs [* -> 0.3.3]
- renv [* -> 1.0.7]
- rlang [* -> 1.1.2]
- rmarkdown [* -> 2.25]
- sass [* -> 0.4.7]
- stringi [* -> 1.7.12]
- stringr [* -> 1.5.0]
- tictoc [* -> 1.2]
- tinytex [* -> 0.48]
- vctrs [* -> 0.6.4]
- xfun [* -> 0.41]
- yaml [* -> 2.3.7]
The version of R recorded in the lockfile will be updated:
- R [* -> 4.3.2]
- Lockfile written to "~/LET/LET_Workshop_2024/materials_LETworkshop_2024/renv.lock".
Restarting R session...
- Project '~/LET/LET_Workshop_2024/materials_LETworkshop_2024' loaded. [renv 1.0.7]
16.17.3 パッケージ情報の保存
パッケージの追加・更新・削除を行ったら、
snapshot関数を使ってrenv.lockファイルを更新します。これを忘れると、バージョン情報が変更されないので、注意。試しに、新しいパッケージをインストールしましょう。今回は、Rに関する様々な名言を含んでいる
fortunesパッケージをインストールしましょう。興味のある方はこちらにリストがあります(R Fortunes: Collected Wisdom)。
## [1] '1.5.4'
##
## R is the lingua franca of statistical research. Work in all other languages
## should be discouraged.
## -- Jan de Leeuw (as quoted by Matt Pocernich on R-help)
## JSM 2003, San Francisco (August 2003)
##
## If we put in a function into rstan that dropped chains, people would use it.
## -- Ben Goodrich (about (not) discarding selected chains from a stanfit
## object)
## Stan-users (December 2016)
- 今回の追加をrenv.lockファイルに追加しましょう。
The following package(s) will be updated in the lockfile:
# CRAN -----------------------------------------------------------------------
- fortunes [* -> 1.5-4]
Do you want to proceed? [Y/n]:
- ファイルが更新される。
- Lockfile written to "~/LET/LET_Workshop_2024/materials_LETworkshop_2024/renv.lock".
- renvフォルダーの中の、library > R-あなたのバージョン > あなたのパソコンPlatformを開くと、パッケージの名前と同じフォルダ(fortunes)が追加されています(五十音順になっているので見つけやすいです)。
16.17.4 パッケージ情報の復元
記録しておくことで、1)パッケージを前のバージョンに戻したり、2)他のパソコンにプロジェクトの分析環境を整えたりすることができる。
パッケージの更新では、お馴染みの
install.packages関数や、update.packages関数、remove.packages関数を使うが、renv関数で管理しているプロジェクト内では、これらの関数はrenv関数内のパッケージを呼び出している。特に、バージョンを指定したパッケージのインストールがしやすくなっている。以下のように、パッケージ名@バージョン名で指定
- 今回は、
fortunesパッケージの古いバージョンをインストールする。
- 今回は、
最初に、
remove.packagesでfortunesパッケージを削除。
注!ここで
renv::snapshot()はやらない。やってしまうと、renv.lockからも削除され、戻らなくなってしまう。
# Installing packages --------------------------------------------------------
- Installing fortunes ... OK [linked from cache]
Successfully installed 1 package in 22 milliseconds.
The following loaded package(s) have been updated:
- fortunes
Restart your R session to use the new versions.
- restart(quit session)をして再度開く。
- renv.lockファイルは確認すると、1.5-4のまま!
- しかし、パッケージのバージョンは1.4.0!
- バージョン1.4.0は2010年9月9日にリリースされている
- 2016年に追加された386番目の名言はこのバージョンでは追加されていないので表示されない。
- 元に戻す場合は、
renv::restore()
The following package(s) will be updated:
# CRAN -----------------------------------------------------------------------
- fortunes [1.4-0 -> 1.5-4]
Do you want to proceed? [Y/n]:
注意
・ パッケージによっては、手動でのダウンロードが必要なものがあります。その場合、エラーメッセージでどのパッケージのインストールができないのか表示されます。エラーメッセージに表示されているパッケージを見て、手動でそれをインストールします。
16.18 Rのバージョン管理
16.18.2 Mac
- Windowsのようなセレクトボタンがない!
- RSwitchをダウンロードする必要あり
16.19 再現性をさらに高める工夫
16.19.2 日付、日時
- いつ作成されたファイルで、更新はされたことあるのかを明記することが重要
- デフォルトでは、ファイルの作成日を手動で切り替えないといけない。
- r Sys.Date:2022-01-20
title: "Untitled"
author: "Masato Terai"
date: "`r Sys.Date()` in JST" # ``と""で囲うのを忘れない。
output: html_document- r Sys.time:2022-01-20 21:36:36
title: "Untitled"
author: "Masato Terai"
date: "`r format(Sys.time(), '%Y-%m-%d %X')`" # ``と""で囲うのを忘れない。
output: html_document- 寺井おすすめ
16.19.3 Rのバージョン & 使用したRのパッケージのバージョン
- Rのバージョンやパッケージのバージョン情報など
## R version 4.3.2 (2023-10-31 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 22621)
##
## Matrix products: default
##
##
## locale:
## [1] LC_COLLATE=Japanese_Japan.utf8 LC_CTYPE=Japanese_Japan.utf8
## [3] LC_MONETARY=Japanese_Japan.utf8 LC_NUMERIC=C
## [5] LC_TIME=Japanese_Japan.utf8
##
## time zone: Asia/Tokyo
## tzcode source: internal
##
## attached base packages:
## [1] grid stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] exactRankTests_0.8-35 nonpar_1.0.2 vcd_1.4-13
## [4] sjstats_0.18.2 performance_0.13.0 ggeffects_1.3.2
## [7] tictoc_1.2.1 arm_1.14-4 lme4_1.1-37
## [10] Matrix_1.6-5 kableExtra_1.3.4.9000 sjPlot_2.8.15
## [13] emmeans_1.8.9 gt_0.10.0 rstan_2.32.5
## [16] StanHeaders_2.32.5 brms_2.20.4 hdm_0.3.2
## [19] MASS_7.3-60 olsrr_0.6.1 beeswarm_0.4.0
## [22] rstanarm_2.26.1 Rcpp_1.0.11 magick_2.8.5
## [25] gmodels_2.19.1 gganimate_1.0.9 gridExtra_2.3
## [28] lubridate_1.9.3 forcats_1.0.0 stringr_1.5.0
## [31] purrr_1.0.2 readr_2.1.4 tidyr_1.3.0
## [34] tibble_3.2.1 tidyverse_2.0.0 vioplot_0.5.0
## [37] zoo_1.8-12 sm_2.2-6.0 psych_2.3.9
## [40] moments_0.14.1 patchwork_1.3.0 dplyr_1.1.3
## [43] ggplot2_3.5.1
##
## loaded via a namespace (and not attached):
## [1] bitops_1.0-7 matrixStats_1.1.0 httr_1.4.7
## [4] webshot_0.5.5 RColorBrewer_1.1-3 insight_1.0.1
## [7] doParallel_1.0.17 tools_4.3.2 backports_1.4.1
## [10] sjlabelled_1.2.0 utf8_1.2.4 R6_2.6.1
## [13] DT_0.30 lazyeval_0.2.2 mgcv_1.9-0
## [16] nortest_1.0-4 withr_3.0.2 Brobdingnag_1.2-9
## [19] prettyunits_1.2.0 cli_3.6.1 shinyjs_2.1.0
## [22] labeling_0.4.3 sass_0.4.9 robustbase_0.99-2
## [25] mvtnorm_1.2-3 QuickJSR_1.0.7 systemfonts_1.2.1
## [28] svglite_2.1.3 qqplotr_0.0.6 DHARMa_0.4.7
## [31] pwr_1.3-0 rstudioapi_0.17.1 generics_0.1.3
## [34] gtools_3.9.4 crosstalk_1.2.0 vroom_1.6.5
## [37] car_3.1-2 distributional_0.3.2 inline_0.3.19
## [40] loo_2.6.0 abind_1.4-5 lifecycle_1.0.4
## [43] yaml_2.3.10 carData_3.0-5 promises_1.2.1
## [46] gdata_3.0.0 crayon_1.5.3 fortunes_1.5-4
## [49] miniUI_0.1.1.1 lattice_0.21-9 haven_2.5.3
## [52] chromote_0.4.0 pillar_1.10.1 knitr_1.49
## [55] boot_1.3-28.1 estimability_1.4.1 shinystan_2.6.0
## [58] codetools_0.2-19 glue_1.6.2 V8_4.4.1
## [61] data.table_1.17.0 gifski_1.32.0-1 vctrs_0.6.4
## [64] png_0.1-8 Rdpack_2.6.2 twosamples_2.0.1
## [67] gtable_0.3.6 datawizard_1.0.0 cachem_1.1.0
## [70] xfun_0.49 rbibutils_2.3 mime_0.12
## [73] pracma_2.4.4 coda_0.19-4.1 reformulas_0.4.0
## [76] survival_3.5-7 pbmcapply_1.5.1 iterators_1.0.14
## [79] shinythemes_1.2.0 ellipsis_0.3.2 nlme_3.1-163
## [82] xts_0.13.1 bit64_4.6.0-1 threejs_0.3.3
## [85] progress_1.2.3 tensorA_0.36.2 bslib_0.9.0
## [88] colorspace_2.1-0 mnormt_2.1.1 tidyselect_1.2.1
## [91] processx_3.8.4 bit_4.5.0.1 compiler_4.3.2
## [94] curl_5.1.0 rvest_1.0.4 see_0.8.4
## [97] xml2_1.3.6 plotly_4.10.4 bayestestR_0.15.1
## [100] colourpicker_1.3.0 posterior_1.5.0 bookdown_0.42
## [103] caTools_1.18.2 checkmate_2.3.0 scales_1.3.0
## [106] dygraphs_1.1.1.6 lmtest_0.9-40 DEoptimR_1.1-3
## [109] digest_0.6.33 goftest_1.2-3 minqa_1.2.6
## [112] rmarkdown_2.29 benchmarkmeData_1.0.4 htmltools_0.5.8.1
## [115] pkgconfig_2.0.3 base64enc_0.1-3 fastmap_1.2.0
## [118] rlang_1.1.2 htmlwidgets_1.6.4 shiny_1.8.0
## [121] farver_2.1.1 jquerylib_0.1.4 jsonlite_1.8.9
## [124] magrittr_2.0.3 Formula_1.2-5 bayesplot_1.10.0
## [127] parameters_0.24.1 munsell_0.5.1 stringi_1.7.12
## [130] plyr_1.8.9 pkgbuild_1.4.5 parallel_4.3.2
## [133] sjmisc_2.8.9 splines_4.3.2 hms_1.1.3
## [136] qqconf_1.3.2 ps_1.8.1 igraph_1.5.1
## [139] opdisDownsampling_1.0.1 markdown_1.13 effectsize_1.0.0
## [142] reshape2_1.4.4 stats4_4.3.2 rstantools_2.3.1.1
## [145] evaluate_1.0.3 RcppParallel_5.1.7 modelr_0.1.11
## [148] nloptr_2.0.3 tzdb_0.4.0 foreach_1.5.2
## [151] tweenr_2.0.3 httpuv_1.6.12 benchmarkme_1.0.8
## [154] broom_1.0.7 xtable_1.8-4 later_1.3.1
## [157] viridisLite_0.4.2 websocket_1.4.2 timechange_0.2.0
## [160] bridgesampling_1.1-2
16.19.4 パソコンのスペック
- CPUとコア数とRAM
- CPU
- コア数(論理コア)
- 「論理コア」は「スレッド」「論理プロセッサ」、「仮想コア」とも呼ばれる
- CPUとコアについて
- RAM (Random Access Memory)
- ストレージ(SSDやHDD)ではなく、データを一時保存する場所
## $vendor_id
## [1] "GenuineIntel"
##
## $model_name
## [1] "13th Gen Intel(R) Core(TM) i9-13900K"
##
## $no_of_cores
## [1] 32
## 137 GB
16.20 関数の呼び出し方
library(関数名):一番メジャーパッケージ名::関数名:あまりメジャーじゃないrequire(関数名):library()とほとんど変わらないが、関数を読み込めたかどうかを論理値で返すことができる。関数が読み込めない(=パッケージを入れていない)場合に、まずそのパッケージを読み込んで、処理に進ませるみたいな用途で使える。
16.20.1 関数名が被ることがある(xxxはマスクされています)
グラフの透明度を設定する
alpha関数(ggplot2パッケージ)と、信頼性係数を出すalpha関数(psychパッケージ)- エラーの原因になる場合あり。
::で定義すると回避できる。
- エラーの原因になる場合あり。
16.21 まとめ
R Markdownでは、YAMLヘッダー、コードチャンク、ドキュメントチャンクを使って分析結果をまとめることができる。
- 研究ごとにプロジェクトを作成しておくとよい
作成したR Markdownファイルは、Word、HTMLファイル、Power Pointなど様々な形式に出力できる。
- RPubsやGithubを使えば、ウェブページとして共有できる
RのパッケージやR自体のバージョンは切り替えて使うことができる。
- 再現しようとする分析ファイルに記載されたバージョンに合わせて分析することでより再現性が高まる
16.23 期末課題レポートについて
期末課題の詳細についてはTACTにてアナウンスします。
共有されたデータを基に、分析を行い、その結果を報告してください。HTML形式での共有になります。
以下の点が評価の範囲として含まれます
研究課題が明記してあるか(自分自身のデータを使う方以外は、こちらで研究課題を設定しています。)
記述統計、作図などメインの分析だけでなく、データの概要や特徴などがきちんと説明されているか(論文のResultsセクションをイメージしてください)
分析の結果が正確に、また分かりやすく報告されているか
- 先行研究との比較などは書かなくてもよいですが、今回の結果を踏まえて研究課題に対してどのような問いが得られたのかも記載してください
締め切りは8月8日金曜日の17時です。
未提出・再提出課題についても8月8日金曜日の17時まで受け付けます。提出は
terai.research [at] gmail.com宛てに送ってください。
