Code
1 + 1
[1] 2
2024/04/15
2024/06/24
Rは,統計分析に強みを持つコンピュータ言語です(統計ソフトと呼ぶこともあるけど,厳密な違いはよくわかりません)。
Posit社の提供する統合開発環境(IDE)。Rを便利に使うための装備品
開いて操作するのはRstudio
プロジェクト内に先にこれから使うデータの保存先を作っておきます。
Rなどの統計ソフトを使う利点の一つは,再現性
例えばエクセルでは,どんな順番にどんな処理をしたのかは記録されません。
Rなどのプログラミングソフトを使うと,操作した内容と順番をコードの形で記録しておけます。
コードを記録したファイルを「スクリプトファイル」と言います。
スクリプトファイルは,画面左上にある緑の「+」アイコンを押して,「R Script」を選択することで新規作成できます。
「第2回」という名前をつけて保存してみてください。
初期状態の説明です。配置は自由に変えられます。ただし,授業の説明上少なくともこの授業の間は配置を変えないでほしい。
スクリプトファイルを作成すると(初期状態では)画面の左上に白紙のファイルが出てきます。ここにコマンドを打ち込んでいきます。
例えば以下のコマンドを打って実行すると,画面の左下にあるRの画面に実行結果が出ます。
実行の仕方は,実行したい行を選択→Ctrl + Enter
(Macでは⌘ + Enter
)
左下の画面(console)に直接 1+1
と打ち込んでも同じ結果が出ますが,後で記録に残らないので,コードはスクリプト画面に書く,左下は結果の表示だけ,と使い分けた方が良いです。
Rスクリプトに以下の内容を打ち込んでください。スクリプト右上のRunボタンを押すか,Control + Enter
(Macの場合は⌘+Enter
)で実行してください。
このパートは森知晴先生(立命館大学総合心理学部)のサイト (卒業論文のためのR入門) 及び今井耕介先生(Harvard University / 東京大学)の著書 (社会科学のためのデータ分析入門)等を参考にしています。
簡単な計算は,以下の通り
Rでは情報を自分で名前をつけたオブジェクトとして保存できます。Rstudioでは,保存されたオブジェクトは右上のEnvironmentと言うところに表示されます。
「<-
」(不等号<とマイナス- )の左はオブジェクト,右はその中身を表します。なので,「xという名前のオブジェクトに3を入れる」という指示をしています。これを実行すると画面右上にxというオブジェクトが表示されるはずです。xの中身を確認するには,そのオブジェクトの名前(今回の場合z
)を打つと良いです。
一度オブジェクトを作っておけば,それを使った計算も可能です。
文字列でもオブジェクトになります(その場合” “で囲みます)
これは数字じゃないので計算はできません
複数の数値の並び(ベクトル)をオブジェクトとすることもできます。
ベクトルごと足し算とか掛け算とかもできます
縦×横の行列も作れます。matrixという名前です。
ncol=2
は列の数, byrow=TRUE
は,横に並べるということ。
[,1] [,2]
[1,] 435 165
[2,] 265 135
例えばbyrow=FALSE
にすると縦に並ぶ
[,1] [,2]
[1,] 435 265
[2,] 165 135
縦横の名前をつけると
rownames
はrow(行)の名前,colnames
はcolumn(列)の名前
列1 列2
行1 435 165
行2 265 135
中に入っているものが全て数字なら,計算が可能です。
Rを使う上で最も重要なのが関数です。足し算引き算とかよりも高度な命令は関数を使って行います。先ほど作ったベクトル(vec
)を使って
上にあるように,Rのコマンドは基本的には,やること(実行する対象)
という構造になっている。
mean(vec)
は,
やることが平均(mean
)
対象がvec
オブジェクトの中で重要な形式として,データフレームがあります。これは,縦方向に観測値を、横方向に変数を並べたデータを言います。
dframe
という名前のデータフレームに
エクセル等のデータを読み込んで分析する場合は,このデータフレーム形式です。
データフレームの中の特定の列を指定する場合は,「データフレーム名$列名
」
データフレーム内の一部を取り出して関数を使って計算できます
test_score
としてくださいmean()
関数のに先に作成した点数のベクトルを代入N
とする新たな変数を作成してください
length()
関数はベクトルの次元を返します。関数に受け渡す値を指し,例えば三つの引数を取る関数 example_function(A, B, C)
に関して,A
を第一引数,B
を第二引数,C
を第三引数と呼ぶ。関数ごとに引数の数や指定の仕方は異なる。
関数の中には(というかほとんどが)複数の引数を持ちます。
seq()
は連続した数を作る関数。from = 0.1
から,二つ目の引数to = 0.2
まで,三つ目の引数by = 0.1
ごとに数字を並べるちなみにRの関数は引数の定位置を持っていて,その順番に従った場合,fromやtoといった指示は省略可能です。なので以下も全く同じ結果になります。
定位置以外の順番でやる場合は,指示が必要です。以下も同じです。
Rは半角スペースを無視します。なので,以下は全部同じです
でも,可読性のため,<-の前後や2項演算子(+とかーとか),あとコンマの後などには半角スペースを入れることが一般的です。
日本人がプログラムを打つときに失敗しがちなのが,全角スペースを入れてしまうことです。全角スペースはひらがなや漢字など同じ文字として認識されるので,全角スペースを入れるとエラーになります。半角スペース二つと全角スペースは,ぱっと見見分けがつかないので注意!
Rではかっこ()やコンマ(,)の後など,コードの切れ目で改行しても動作します。特に()何重にもなる場合,改行したほうが見やすいかもしれません。例えば,上でやった行列の作成コマンド
は,以下のように書いても全く同じように動作します。
あまり改行しすぎるのもかえって読みにくいかもしれません。自分が見やすいように程よく改行してください。
より高度なことをしたり,同じことをより簡単にしたりするために追加の機能を足すことができます。
この追加の機能をパッケージと言います。
RがスマートフォンのOSのようなもので,パッケージはアプリのようなもの。
Rのプログラムを格段にわかりやすくするパッケージであるtidyverseを使う準備をしてみます。パッケージは,最初に使う時にはインストールする必要があります(これは1回だけ。App Storeでアプリをとるような感じ)。
パッケージを使う時には,分析ファイルを実行する最初の段階で以下のコマンドを使います(スマートフォンにすでに入っているアプリを開くイメージ)。
後で使うので,以下のパッケージも読み込んでおきます(みなさんは先にインストールしてください)。
pacmanパッケージのpacman:::p_load()
というコマンドを使うと
library()
コマンドを実行して)install.packages()
→library()
)をしてくれます。新しいパッケージを使うたびにインストールしてもらう手間が省けるので,授業ではlibrary()
ではなくpacman:::p_load()
を使います。
そのための準備として,左下のconsoleに以下のコマンドを打ち込んでください
pacman
がない時そこで
前回はデータを下記のように手打ちしました。
しかし,アンケートデータや,企業の会計データ等をこのように手打ちするのは現実的ではありません。エクセル等で集計されたデータを読み込むのが一般的です。
以下では,エクセルファイルを読み込む方法についてまとめています。
エクセルで列が変数,行が観測となるようにデータを作られていることを想定します。まず,これを表計算ソフト上でcsv形式でプロジェクト内のdataフォルダに保存します1。
dataフォルダに入れたファイルを読み込むには,csv形式なら,read_csv("ファイル名")
もしくはread.csv("ファイル名")
を使います2。ここでは,tests.csvと言う名前のデータを,testsと言う名前で読み込んでいます。
読み込んだデータを見てみます。最初のいくつかだけが表示されるhead(データ名)
コマンドが便利です。
データをグループで共有するときなどに便利です。
dl=0
をdl=1
に変えて,read_csv
(もしくは read.csv
)コマンドで読み込めますデータをグループで共有するときなどに便利です。
google driveに保存したデータを共有(リンクを知っている人全員)に設定
リンクurl(https://drive.google.com/file/d/*********/view?usp=sharing)の********の部分がidなので,その部分をメモしておく。
下記の通り,idを定義して,下記の通りのコードを実行すると,目当てのファイルを取り込める。
分析に入る前に必要そうな処理を紹介します。
現在のデータにはない,4教科の合計点が欲しい。新しい変数はmutate()
で作る。ただし,mutateだけだと,変数を作ってどこにも保存してくれないので,保存場所を指定する必要があります。今回は元のデータに付け足す形で作ります。
tests に testsの中のデータを使って作った新しい変数を入れる。
Rのコマンドやパッケージは無数にあります。いつも使うもの以外は覚えてられません。
でも大丈夫。ネット上にはさまざまなコマンドの紹介やエラーへの対処法が落ちています。
ここに載っていない場合は,「やりたいこと + R」でググると手っ取り早い
プログラミングをやってて一番むかつき,嫌いになる要因はエラーメッセージ
できることは
「エラーが出てたら99.99%自分が悪い(パソコンは悪くない)」ということを自覚すること
Rには分析に必要なさまざまな機能が装備されています。
しかし,
などは,パッケージとして提供されます。その中でもRの操作性全般にわたる改善を行うパッケージがtidyverse
です。
tidyverseを使ったコードはいわゆる「モダンな」コードと呼ばれたりします
実際その便利さは,BaseRを知ってないと実感できないですが,この授業では特に断りなくtidyverse
の方法を中心に構成しています。
ネットで検索すると,同じ処理でもbaseRを使った方法とtidyverse
を使った方法が紹介されることがあります。どっちを使っても,また2つの方法が混ざってても基本的に問題はありません。
tidyverse
とmagrittr
パッケージのパイプ演算子を使うことで,同じコマンドをより読みやすくできます。これからは断りなくこれらのパッケージの機能を使います。
読み込んだデータtest
の算数(math
)の平均点を求めたい。普通にやると4.4 関数にあるように,データフレーム名$列名
で指定するので
パイプ演算子%$%
を使うと同じコマンドが以下のようになる
これだとあまり何がいいのかわかりませんが,複数の変数を指定したいときなど,いちいちデータフレーム名を指定しなくて良いので便利です。
以下は(1)test
データを使って,(2)数学の点数と他の点数の関係を分析(lm
)した上で,(3)その結果を表示する(summary
)もの。
日本語の順番と,コマンドの構造が反対 (結果を表示する→分析内容→データ)
全く同じことをパイプ演算子を使うと,(1) testsデータで, (2)分析をして, (3)結果の要約を表示する,という思考の順番で書けます。
命令が複雑になる程効果が実感できます。
ちなみに%$%
は,使うデータを指定するのに使います。%>%
はコマンドの結果を次のコマンドに渡すのに使います。
ただ,最近Base Rの中でも同じような機能が実装されました(%>%
の代わりに|>
)。これらは全部同じこと