正式には(というか,あえて長ったらしく言えば)「GNU R」(グヌー・アール).統計解析から作図までこなす便利なフリーソフト. 公式サイト:www.r-project.org.
本ページの内容はweb上に散在する先達の積み上げた成果に加え,黒田の所属する/した研究室の先輩・同輩・後輩各位の成果の再利用を含みます. R自体はWindowsでも(Mac) OS XでもLINUXでも走りますが,本ページはWindows上での使用を前提としています. 想定する読者は,Rを用いたエコノメ(計量経済学)の実証を目指す初心者の方々です. 単なるクリック統計学/ブラックボックス統計学の手引きとならないように,計算例の幾つかについてはパッケージの提供する関数に加えてその簡易版を自作します(といっても full scratch ではありません).
(2017年5月追記)コードの大半を RPubs に移しました.(2018年7月追記)本ページに残していたコードと説明についても,大半を除去しました.(2020年8月追記)新しいGoogleサイトに移行したところ,さらに読みにくくなってしまいました(preタグがうまく使えません).(2024年12月追記)サイト側の仕様変更(?)により表記が崩れ外部リンクも消えてしまったため必要最小限の手直しをしました.
An Introduction to R - by Douglas et al. (2023)
R for Data Science (2nd edition) - by Wickham et al. (2023)
Econometrics in R [PDF] - by Grant V. Farnsworth [CRAN, Oct. 2008]
Using R for Introductory Econometrics - by Florian Heiss (Wooldridgeのイントロ本に対応)
ARE 212: Econometrics - Multiple Equation Estimation - by Ed Rubin (講義資料.空間データのハンドリングもカバー)
卒業論文のためのR入門 - by 森知晴(立命館)
Rで計量政治学入門 - by 土井 翔平(北大)
私たちのR: ベストプラクティスの探究 - by 宋財泫(同志社)・矢内勇生(高知工科大)
がんばらないデータ加工 Rによるくり返し作業入門 - by やわらかクジラ
空間データ関連
Geocomputation with R(日本語版); 原語版 - by Lovelace, Nowosad, and Muenchow
Getting started with R and R-spatial - by Roelandt and Nowosad
Spatial Data Science - by Edzer Pebesma (Muenster) and Roger Bivand (NHH) (kriging内挿や空間計量もカバー)
Using Spatial Data with R - by Claudia A. Engel (Stanford)
R as GIS for Economists - by Taro Mieno = 三重野太郎 (UNL)
Maps and Data Visualisations with R, Spatial.ly - 地理学者 James Cheshire (UCL) によるコード集
tidyverse (データ操作)
data.table (大規模データの高速処理)
fixest (回帰分析) ... Running regressions in R without the hassle. (Stata → R Cheatsheet); Stata2R: Regression analysis with fixest
データIO
dataset1 <- read.csv(file = "c://hoge/dataset1.csv") # csvから直接読み込む
write.csv(x = dataset2, file = "dataset2.csv") # 書き出し
作業ディレクトリの指定:「 setwd 」.確認:「 getwd() 」
dataset <- read.csv(file.choose()) とすれば「ファイルを選択」ダイアログが表示されてGUIで選択できる.
パッケージ
CRAN (The Comprehensive R Archive Network) =R公式のパッケージ・リポジトリ.「クラン」と呼ぶ人もいますが,CPAN (Perl), CTAN (TeX) との呼称の整合性を優先して「シーラン」と呼ぶのがよいという説も.
CRAN以外でも,zip形式で配布されていたり,GitHubで公開されていたりする(devtools::install_github 参照).
パッケージを {base} のように中括弧(波括弧)を利用して表現するのは日本のローカルルールらしく,使うべきではないとの意見もあるようです.
複数の異なるパッケージで同名の関数を定義することもできるため,呼び出す際に重複が生じた場合には,同名の関数はマスクされます(先に読み込んだ方のパッケージ側??).その場合でも package::function とすれば意図した方の関数を使用できます.そのうえ package::function 表記で関数を呼び出す際には該当するパッケージを事前に library で読み込む必要がないという特徴もあります.
options(repos = c(CRAN = "http://cran.ism.ac.jp")) # ダウンロードサイトを手動で変更
推奨スタイルは The tidyverse style guide を参照.
三中信宏 (R-statistiker) Rの脆弱性と普及度について [Inleiding tot de R-statistiek, 2015-11-21]
見栄えの良いフロントエンドとして RStudio が人気.
データの前処理には {dplyr} パッケージがデファクトスタンダード.
Excelファイルからデータを直接読み込むのはちょっと手間ですが,ファイルを手動で開いて使用する部分をコピーしてクリップボード経由で読み込ませるのは簡単.
dataset1 <- read.table(file = "clipboard", header = TRUE) # 1行目が列名なら「header」の「TRUE」指定を忘れずに
計算時間を計測したいときには「Sys.time()」を利用するのがよいです.
systime_start <- Sys.time()
# 処理
Sys.time() - systime_start
「 proc.time() 」も便利です.計算の前後で関数の3つ目の戻り値の差を取ればOK.
time1 <- proc.time()[3]
for (i in 1:1e7) hoge <- 0
proc.time()[3] - time1
余談ですが time の意味で「 t 」や「 T 」などの変数名を使用してはなりません.それぞれ,t: 行列の転置,T: 論理値の TRUE としてデフォルトで割り当てられています.
予約語などすでに何らかの関数や値が割り当てられているオブジェクト名を「 <- 」で上書きすることも(warningなしで!)できてしまうので,代入する前に,命名したいオブジェクト名で実行してみて「 エラー: オブジェクト 'hoge' がありません」と表示されることを確認しましょう.間違えて代入してしまったら rm すればデフォルトで割り当てられている関数や定数値に戻ります.
pi # デフォルトで円周率 π が割り当てられている
pi <- 2015 # 不適切な代入
pi # 確認してみると「2015」になっている
rm(pi) # remove
pi # 元の「3.141593」に戻っている
自分で設定した全てのオブジェクトを rm で消去することも可能です.自作オブジェクトを ls() で表示させられることを思い出せば「 rm(list = ls()) 」でOK.
回帰モデルの推定結果などをLaTeX用コマンドに変換することも可能です.
lm_swiss1 <- lm(formula = Fertility ~ . , data = swiss)
# install.packages("xtable")
library(xtable)
xtable_swiss1 <- xtable(x = summary(lm_swiss1), caption = "Regression of ln(med. value of house)", label = "lm estimates swiss", digits = 3)
print.xtable(x = xtable_swiss1, type = "latex",
# file = "lm_est_swiss.tex", # 「.tex」ファイルに書きだす場合のみ指定
latex.environments = c("center", "footnotesize") )
rnorm などで発生させた乱数をを後で再現する必要がある場合には set.seed(seed = 0) を用いる.サンプルデータを作成する際にも便利.
オブジェクトのメモリサイズは object.size() で分かる.
gc() でガベージコレクション.
plot関数などで作図していたがいつの間にか挙動がおかしくなってしまった際は「 dev.off() 」で強制的に閉じると元に戻ることもあります.
英語で運用されているメーリングリスト(Mailing Lists)に質問を投げるのも手.もちろんメーリスの趣旨に反する質問はNG.バグの報告ならメーリス受信者が再現できるだけの情報を提供する( sessionInfo() は基本).メールはHTMLではなくプレーンテキストで送信.... etc. Rに限らず優れたexampleの要件は How to create a Minimal, Complete, and Verifiable example (Stack Overflow) にまとまっている.
library(xxx) と library("xxx") の挙動が異なる場合がある? → 盆栽日記 「なぜクソ仕様が生まれたのか(ひとりアドベントカレンダー)」 [2015-12-24]
groundhog.library(pkg, date) ... Simonsohn (2022) Groundhog 2.0: Further addressing the threat R poses to reproducible research; cf. checkpoint package
実証ミクロの分析コードは Angrist Data Archive (by Joshua Angrist, MIT) のようにまとめて公開されているとよいのですが(できればSASではなくRで).
uncorrelated: 有名な iris データへの言い掛かりとそれに対する反論の例