2 Rのセットアップ

シミュレーション・データの準備とR言語の基本的な機能

2024-04-19


1 Accounting 101(教科書第1.1節)

1.1 企業が営む経済活動

  • 資金調達活動 (Financing)
  • 資金投下(投資)活動 (Investing)
  • 営業活動 (Operation)

単純な小売業を例に

1.2 経済活動を要約するツール \(=\) 財務諸表

2 上場企業のディスクロージャー制度(教科書第4.1節)

2.1 法定開示と適時開示

2.2 EdinetとTDnetから情報を入手してみよう!

Exercise 1

  • EDINETより任天堂の2023年3月期 (2022/04/01-2023/03/31)の有価証券報告書をダウンロードしてみよう.
  • 任天堂の公式サイトから2023年3月期の決算短信を探し,ダウンロードしてみよう.
  • 有価証券報告書と決算短信の相違点を考えてみよう.

3 コードとシミュレーション・データの準備

3.1 コードのダウンロード

Step 1. 本書のサポートサイトのS3にアクセス.

Step 2. Zipファイルをダウンロード.

3.2 Posit Cloudへのコードのアップロード

Step 3. Posit CloudにダウンロードしたZipファイルをアップロード.

Step 4. empirical-accounting-and-finance-in-r-mainフォルダを選択し,Renameによりcodesフォルダへと識別可能性の観点から名前変更.

3.3 シミュレーション・データのダウンロード

Step 1. 本書のサポートサイトのS2にアクセス.

Step 2. Zipファイルをダウンロード.

Step 3. 教科書「まえがき」ivページに記載のパスワードを入力して解凍.

Step 4. 解凍されたファイルを再度圧縮し,改めてZipファイルを作成.

3.4 シミュレーション・データのアップロード

Step 5. Posit Cloudに先の手順により作成されたZipファイルをアップロード.

4 R言語入門

4.1 変数という考え方

  • 変数とは,データを読み書きする「名前付き」の記憶域 (storage)のことで,データを一定期間記憶しておいてくれるので,プログラムによりいつでも参照することができる.例えば,3.14というスカラーをpiという変数として記憶したい場合は,以下のように書けば良い.
Code
pi <- 3.14 
  • 変数に何かを代入するときは=演算子は使わず,<-演算子を使うのがポイント!

  • ひとたびpiを定義すれば,例えば,半径4の円の面積Sを求めるとき,piを使って計算することができる.

Code
S <- pi * 4^2 
print(S) # print()関数で結果を出力
[1] 50.24

4.2 R言語の作法

可読性の高いコードを目指して

Rは「半角スペース」を無視するので,あってもなくてもコード上は一緒.ただし,可読性の観点から様々な作法が存在する.GoogleのRユーザー・コミュニティでは,例えば,二項演算子 (binary operators)の前後には半角スペースを挿入することが徹底されている.

Code
# 良い例
S <- pi * 4^2 

# 悪い例
S<-pi*4^2 
  • もちろんスカラー以外にも,ベクトルや行列などの変数も作成することができる.先ほどのように\((1,2,6)\)の3次元のベクトルをxとして定義する場合は,以下の通りである.
Code
x <- c(1, 2, 6)
  • c()関数はベクトルを作成する関数であり,cはconcatenate(連結する)の略である.

4.3 変数の命名規則

  • 変数の名前は自由に付けることができる。このようなプログラマが自由に付けて良い名前を識別子 (identifier)という.
識別子に使える文字
  • アルファベット,数字,_(アンダースコア),.(ピリオド)
具体例
  • sales_growth(売上高増加率), FY2020.EARNINGS(2020年度の利益)

4.4 変数命名に関する注意点

  • 数字からははじまる変数は付けられない (ダメな例: 2020_earnings, 001Variable)

  • 大文字と小文字は区別されるので,Salessalesは別々の変数として認識される.

プログラミング全般での名前の付け方の作法

  • キャメルケース (camelCase)・・・ salesGrowth, annualStockData
  • パスカルケース (PascalCase)・・・ SalesGrowth, AnnualStockData
  • スネークケース (snake_case)・・・ sales_growth, annual_stock_data
  • ケバブケース (kebab-case)・・・ sales-growth, annual-stock-data

4.5 問題をやってみよう!

Exercise 2

  1. 20点,35点,40点,70点,95点という5人の成績を示したテストの点数 (Test Score)を表すベクトルを作成してみよう.なお,命名規則は,スネークケースによること.

  2. 平均点を求めてみよう.

  • (ヒント) mean()関数の第一引数に先に作成したTest Scoreのベクトルを代入すればオッケー!
  1. 学生の人数をNとする新たな変数を作成しよう.
  • (ヒント) mean()関数は平均値を返すが,同様に,length()関数はベクトルの次元を返す.

5 引数とは?(教科書第3.1節) 

5.1 0.1から0.2まで0.01刻みのRベクトルを作ってみよう!

Code
R <- seq(0.1, 0.2, 0.01)

引数 (arguments)とは

関数に受け渡す値を指し,例えば三つの引数を取る関数 example_function(A, B, C)に関して,Aを第一引数,Bを第二引数,Cを第三引数と呼ぶ.関数ごとに引数の数や指定の仕方は異なる.

  • R <- seq(0.1, 0.2, 0.01)は,R <- seq(from = 0.1, to = 0.2, by = 0.01)の省略形である.
  • R言語の関数には位置指定という概念があり,例えばseq() 関数の場合,引数名が省略されていると,最初の三つの引数はそれぞれ等差数列の始点 (from),終点 (to),差分 (by)と解釈し,実行してくれる.

5.2 関数名や引数は憶えないといけない?(教科書コラム3.3)

  • 現実的には,自分が使う頻度が高い関数に関しては,使い方を積極的に覚えるようにし,そうでない関数はその都度インターネット検索などで使い方を確認するのが良いだろう.
  • それぞれの関数ごとに,引数の指定の仕方や結果の形態が異なっており,それらは全て RDocumentationというサイトに一覧で載っている.
  • 加えて,インターネット上には,個人ブログなどの数多くの有益な情報源が存在しているので,それらの調べ方もRを使いこなす上で重要なスキルである.
  • 最後に,コンソール上でhelp(関数名)あるいは?関数名と打つことで,関数のヘルプを表示できることも知っておこう.
Code
help(seq)
?seq

5.3 要素へのアクセス

  • 例えばR[2]とすれば,2番目の要素が参照できる.要素の指定は変数を用いて行うこともでき,i <- 2と定義しておけば,R[i]は2番目の要素を表す.
Code
# 第2要素へのアクセス方法1
R[2] 
[1] 0.11
Code
# 第2要素へのアクセス方法2
i <- 2 # iを2として定義
R[i] # ベクトルRの第i要素へのアクセス
[1] 0.11

5.4 連続した要素へのアクセス

  • ベクトルの中から連続する一部分を取り出すためにはコロンを使う.例えば,2番目から5番目の要素のみを取り出す場合,R[2:5]と入力すれば良い.一般にコロン (:)は公差が1の等差数列を作成するために用いられ,2:5c(2, 3, 4, 5)という4次元ベクトルを作成する.
Code
# 第2-第5要素へのアクセス
R[2:5]
[1] 0.11 0.12 0.13 0.14
  • もし2番目から最後までの要素を取り出したければ,R[2:length(R)]と入力する.length()関数は,Exercise 2で学習したように,ベクトルの次元を返すので,ここではlength(R)11となる.
Code
# 第2-第11要素へのアクセス
R[2:length(R)] # length(R)はRの次元11を返す
 [1] 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20

6 行列・リスト・データフレーム(教科書コラム3.4)

6.1 行列

  • ここまではスカラーとベクトルが登場した.Rでは,行列 (matrix)も扱うことができる.

Code
# 3×2行列の作成
x <- matrix(1:6, nrow = 3, ncol = 2)
print(x)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

Code
# 文字を要素とする行列の作成
y <- matrix(c("a", "b", "c", "d"), nrow = 2, ncol = 2)
print(y)
     [,1] [,2]
[1,] "a"  "c" 
[2,] "b"  "d" 

6.2 リスト

  • リスト (list)とは,任意のオブジェクトや変数をまとめたもの.

Code
# リストの作成
x <- list(10:11, "ABC")
print(x[[1]])
[1] 10 11
Code
print(x[[1]][2])
[1] 11
Code
print(x[[2]])
[1] "ABC"
  • このリストは,(10, 11)という2次元ベクトルと,ABCという文字列をそれぞれの要素として含んでいる.リストは要素の参照方法が通常のベクトルと異なり,カッコを二重にする.
  • 例えば,xの1番目の要素を参照するには,x[[1]]と指定.上の例だと,x[[1]](10, 11)というベクトルであるため,そのうち11を参照したければ,x[[1]][2]と指定.

6.3 データフレーム

  • データフレーム (data frame)とは,異なるサンプルのデータを表形式にして一つのデータとして扱うためのオブジェクトである.
  • 外観は行列と同じ2次元配列であるが,各行・列がラベルを持ち,それらがどのサンプルの何に関するデータなのかを表す.

Code
# データフレームの作成
ID <- c(1001, 1002, 1003)
name <- c("Firm A", "Firm B", "Firm C")
ROE <- c(0.08, 0.12, 0.15)
x <- data.frame(ID, name, ROE)
print(x)
    ID   name  ROE
1 1001 Firm A 0.08
2 1002 Firm B 0.12
3 1003 Firm C 0.15

6.4 (続)データフレーム

  • Rの内部ではデータフレームはリストの一種として認識されているので,リスト同様の参照が可能である.
  • データフレーム特有の参照方法として,x[[1]]と同じ内容を参照するのに,x$IDと指定することもできる.
  • R特有の文法として,仮にx[ , 1]として特定の次元を空白とすると,その次元は全ての要素が指定される.したがって,x[ , 1]x$IDと全く同じ参照となる.
Code
print(x[  , 1])
[1] 1001 1002 1003
Code
print(x$ID)
[1] 1001 1002 1003

7 for文の使い方

7.1 for文の概要

for文とは?

for (Variable Name in Sequence) {
  Do Something
}

  • for文のように,コードのどの行が実行されるか順序を制御する構文のことを,一般に制御構文と呼ぶ.
Code
for (i in 1:4) {
  j <- i + 10 # iに10を足したものをjとして定義
  print(j) # jを出力
}
[1] 11
[1] 12
[1] 13
[1] 14

7.2 for文の練習問題

Exercise 3

  • 1から10を順番に足した和を求めてみよう!

(ヒント!)

  1. 等差数列の和 (sum of arithmetic series)を表す変数asumを作成し,初期値として0を代入する.
  2. i in 1:10としてasumi = 1から10を次々に代入し,asumの計算結果を更新
  3. 最後にprint()関数を使って,asumを表示させる.

7.3 for文を使った発展問題

Exercise 4

  • 初項が2,公差が3の等差数列について初項から第10項までの和を求めよ.

(ヒント!)

  1. 等差数列はseq()関数を使えば作成することができる.忘れている人は,ここを参照.
  2. 初項から第10項までのベクトルをa \(=(2, 5, \ldots, 29)\)として定義すれば,初項はa[1],第2項はa[2]で参照することができる.忘れている人は,要素へのアクセスを確認しよう.