Download - SappoRo.R #2 初心者向けWS資料
始めよう,RSappoRo.R 初心者向けワークショップ
1
MENU
• 【啓蒙編】Rは何がよいのか,あるいは私はいかにしてRに手を染めるようになったか
• 【入門編】R環境の導入とRでできる基本的なこと
• 【実践編】Rをもっと便利に使いましょう
2
自己紹介• なまえ;小杉考司(Twitter @kosugitti)
• しょぞく;山口大学教育学部教育心理学コース
• せんもん;社会心理学,または心理学的統計法
• けいれき;関西大学/関西学院大学→山口大学
• 「都会/マンモス/私立」から「地方/少数/国立」へ
3
【啓蒙編】
• Rを始めるべき理由,あるいはいかに私はRを始めるようになったか.
4
Rを使い始めた理由「研究編」• 2007年着任当時,SPSSを持っていなかったし,ユーザ数が少ない地方国立大学では,全学的にフォローしてくれる環境もなかった。
• 研究をするために,基本的な統計処理と構造方程式モデリングをする環境を自分で整えなければならなかった。
• 毎年のようにバージョンアップされるSPSSを追いかける気力・体力・資金力がなかった。
5
Rを使い始めた理由「研究編」
• 当時尺度開発の研究を行っていて,項目反応理論を扱えるソフトウェアが欲しかった。以前はBILOG-MG,Parscaleなど専門ソフトを買ってもらっていたが,それも自分で用意する必要があった。
• 統計手法のコレクターでもあったので,テキストマイニングや数量化理論,MDS(特に非対称)など,とにかく色々な統計手法が自由に使いたかった。
6
そこで ですよ• フリーソフトウェアなので簡単に導入できた。
• 基本関数が豊かだったので自分でプログラムを書くのも簡単にできた(複素数に対応した固有値分解関数!)
• MDS,IRTなどはパッケージを追加するだけで簡単に実行できた。
• 青木先生のサイトなど既に十分なインターネット上の情報公開,関数提供がなされていた=テキストも無料だった
7
Rを使い始めた理由「教育編」
• 学生の研究室に共同利用するPCが三台あった。学部生にひとつ,M1/M2にひとつずつ。そこには古いSPSSとHALBAWが導入されていた。
• 学生は一人一台のノートPCを持たせることを推奨していたので,皆PCはもっていたが,卒論・修論の時期になると分析と印刷は共同PCで行うので,混雑することが多かった。
8
Rを使い始めた理由「教育編」• 統計がGUI環境で簡単に実行できることが,かろうじて文系の学生にも受け入れられる理由であったが,教育上少なくとも3つの問題があった。
1. 操作の意味を分からないまま身につけている。
2. 同じことを何度もやってみせて教えなければならない。
3. エラーが生じた時,再現性が確保されない。9
そこで ですよ
• フリーソフトウェアなので個々人に導入できた。
• コマンドを書くのは大変な労力ではあったが,「今何をしているか」を考えさせる役に立った。
• データを共有するだけで,どこででも再現できたので,忙しいときはメールだけで指導できた。
10
当初は苦労した
• CUIのハードルの高さが,個人的には問題なかったが,学生にはやたら高く感じられるようであった。
• コードの代筆としてRcmdrを使っていたが,関数がお仕着せだったりマシンによっては非常に鈍重な動きになっていた。
• 入門書,特にパッケージに関する解説本が少なかった。
11
いまはもう だけ• プラットフォームとして確立した感がある
• RstudioなどIDE環境が整った
• 動作が特に重く感じることはなくなってきた
• ダウンロード・インストールに関する意識,あるいはコマンドを使うということに関する学生の意識が変わってきた
12
まとめ
やすい!
ひろい!
はやい!
13
こっちこいよ!
• サンプルデータが防府豊富にあるので教材としても優れている
• 乗り換えを考えている人は,とりあえず「データファイルの読み込み」と「データの整形」の山をこえれば後は問題ない
• 乗り換えの精神は「背水の陣」と「信じるものは救われる」
14
【入門編】Rでできる基本的なこと
15
subMENU
• R環境の導入
• Rとの対話
• 関数とヘルプ• 数をセットで扱う• 表計算ソフトとは違うよ• 試しにやってみよう1
• 代入しておけるオブジェクト• リストとデータフレーム• 数字の種類• 試しにやってみよう2
16
Rを導入しよう• 「R」一文字では検索できないので,「Rproject」で検索してみましょう。
17
18
19
20
21
Rの基本
• Rと一問一答スタイルです!
• 大文字と小文字を区別することに注意!
• 「>」この状態になっていれば会話スタートです!
22
Rの基本
• 四則演算をやってみましょう。
• 1+2はいくらだい?と聞いてみます。
23
もっともっと• 2+3,3*4,4/5,(2+6)/4などの四則演算もお茶の子さいさい
• sqrt(16)とかabs(-2),cos(30)といった関数も使えます
• 2+3i+4+5iという複素数の計算も!
• piと書くと円周率がでてきます(予約語)
• 予約語については?Constantsで調べてね
24
Tips
関数とヘルプ
• ()で括るのを「関数」といいます。
• sqrt()もabs()もcos()も関数です。()の中に数値やデータやオプションを指定します。
• ヘルプをひくのも関数で。help(sqrt)など。
• Rを終わらせるのも関数で。q()とします。
25
関数とヘルプ
• ()で括るのを「関数」といいます。
• sqrt()もabs()もcos()も関数です。()の中に数値やデータやオプションを指定します。
• ヘルプをひくのも関数で。help(sqrt)など。
• Rを終わらせるのも関数で。q()とします。
25
作業スペース?• Rの記憶だと思ってください。
• 次にRを使うときに,今やったことの記憶を引き継ぎたければ「はい」を,宵越しの記憶は持たない,という人は「いいえ」を選択。
26
関数の書き方• 関数は,関数名(引数,引数,引数,...)のように書きます。
• 引数(ひきすう)は関数に渡したい数字やデータです。
• 引数でオプションの指定をすることもあります。
• 例)mean(x, na.rm=TRUE)
• TRUE/FALSEはスイッチのon/offを表す記号です(予約語)
ヘルプを使おう• 関数の意味が分からなかったら,「>」とRが聞き耳を立てているときにお伺いをたてましょう。
• help(mean) あるいは ?meanと書いてみましょう
• そうするとびっくりすることが起きるよ。
28
ヘルプを使おう• 関数の意味が分からなかったら,「>」とRが聞き耳を立てているときにお伺いをたてましょう。
• help(mean) あるいは ?meanと書いてみましょう
• そうするとびっくりすることが起きるよ。
28
ヘルプの使い方• ヘルプは英語ですが,書式は整っているので慣れれば読めます• Description;解説
• Usage;使い方とデフォルト情報。
• Auguments;引数。与える情報。
• Details;関数の詳細。
• Value;関数が返す値。アウトプット。
• ReferenceやExampleもあります。29
ヘルプはネットにも• 青木先生のサイトやseekRも役に立ちます。
30
ただの電卓じゃないよ• 数字をセットで扱えます。
• 数字のセットに名前を付けてとっておくことができます。次のように入力してみてください。
• 1:4 -> sapporo
• 「いちころんよん ハイフン だいなり さっぽろ」
• 「さっぽろ」31
ただの電卓じゃないよ• 数字をセットで扱えます。
• 数字のセットに名前を付けてとっておくことができます。次のように入力してみてください。
• 1:4 -> sapporo
• 「いちころんよん ハイフン だいなり さっぽろ」
• 「さっぽろ」
> 1:4 -> sapporo> sapporo[1] 1 2 3 4
31
一言一句解説• 一行目;
• 「いちころんよん」;1から4まで連続した数字
• 「ハイフン だいなり」;→のつもり。代入しなさい。• 「さっぽろ」;サッポロと名付けた箱の中に。
• 二行目
• 「さっぽろ」;サッポロの中身はなんなんだい?32
数をセットで扱うというのは
• 次のように入力してみましょう
• c(1,3,5,7,9) ->Sapporo
• 注意!Sapporoとsapporoは別物です!sappoRoもね!
• Sapporo+3
• Sapporo*2
cは「つないで」
33
数をセットで扱うというのは
• 次のように入力してみましょう
• c(1,3,5,7,9) ->Sapporo
• 注意!Sapporoとsapporoは別物です!sappoRoもね!
• Sapporo+3
• Sapporo*2
> c(1,3,5,7,9)-> Sapporo> Sapporo+3[1] 4 6 8 10 12> Sapporo*2[1] 2 6 10 14 18
cは「つないで」
33
数をセットで扱うので• 当然こんなことができます。
平均はmean()
分散はvar()
標準偏差はsd()
相関はcor()
> x <- 1:10> y <- c(2,3,4,2,3,4,2,3,4,5)> mean(x)[1] 5.5> var(x)[1] 9.166667> sd(x)[1] 3.02765> cor(x,y)[1] 0.5330018
34
それじゃあ関数電卓だよ!
• という人のために。作図もできます。
• plot(x)
• plot(x,y)
• boxplot(x,y)
35
でもまだ○xcelに負けてるね!
• という人のために,今から色々紹介していきますが,
• ひとまずdemo(graphics)と入力してみないか?!
• 数値の行列処理,作図能力,なかなかのもんじゃぜ?
36
数字のセットとセットで
• 数字と数字のセットを足し合わせたりすることもできます
37
数字のセットとセットで
• 数字と数字のセットを足し合わせたりすることもできます
> x [1] 1 2 3 4 5 6 7 8 9 10> y [1] 2 3 4 2 3 4 2 3 4 5> x+y [1] 3 5 7 6 8 10 9 11 13 15
37
行列だぜ
• 表計算ソフトはベクトルの計算はできても行列計算は苦手なわけでして・・・
• 次のように入力してみましょう
• mat1 <- matrix(1:10,nrow=2)
• mat1
38
行列だぜ
• 表計算ソフトはベクトルの計算はできても行列計算は苦手なわけでして・・・
• 次のように入力してみましょう
• mat1 <- matrix(1:10,nrow=2)
• mat1
> mat1 <- matrix(1:10,nrow=2)> mat1 [,1] [,2] [,3] [,4] [,5][1,] 1 3 5 7 9[2,] 2 4 6 8 10
38
要素にアクセス• 出力の周辺に,[,1]とか[2,]とかありましたね。
• アレがそのまま,行列アクセスのヒントになっています。
• mat1[,1]
• mat1[2,]
• mat1[2,1]
39
要素にアクセス• 出力の周辺に,[,1]とか[2,]とかありましたね。
• アレがそのまま,行列アクセスのヒントになっています。
• mat1[,1]
• mat1[2,]
• mat1[2,1]
> mat1[,1][1] 1 2> mat1[2,][1] 2 4 6 8 10> mat1[2,1][1] 2
39
行列の計算?
• mat1 -2とかmat1*1とか。ベクトルと同じで要素全てに処理。
• 行列とベクトルのかけ算とか,行列と行列の足し算とか・・・は必要なんだけど,算数の授業じゃないのでパス!
40
代入袋
• ベクトル,マトリックスなど入れておく袋には種類があります
• 後二つ知っておいたら完璧。これぞリストとデータフレーム型
41
リストって• なんでも入れておける。数字でも,文字でも。何も気にしなくていい。とにかく放り込める,まるで四次元ポケット。
42
リストって• なんでも入れておける。数字でも,文字でも。何も気にしなくていい。とにかく放り込める,まるで四次元ポケット。
> Obj <- list(name=c("kosugi","koji"),+ sex=c("male","female","DK/NA"),+ hight=c(160,170,180),+ mat=matrix(1:10,nrow=5))
42
中身を確認
nameという名称で保存した情報。文字列。sexという名称で保存した情報。文字列。
highという名称で保存した情報。数値のセット。
matという名称で保存した情報。数値のセットのセット=行列
> Obj$name[1] "kosugi" "koji" $sex[1] "male" "female" "DK/NA" $hight[1] 160 170 180$mat [,1] [,2][1,] 1 6[2,] 2 7[3,] 3 8
43
呼び出しは見た通り
• 出力の途中に$がありましたね。
• アレがそのまま,要素へのアクセスのヒントになっています。
• Obj$name
• Obj$mat
44
呼び出しは見た通り
• 出力の途中に$がありましたね。
• アレがそのまま,要素へのアクセスのヒントになっています。
• Obj$name
• Obj$mat
> Obj$name[1] "kosugi" "koji" > Obj$mat [,1] [,2][1,] 1 6[2,] 2 7[3,] 3 8[4,] 4 9[5,] 5 10
44
データフレームって
• 行列とリストのいいとこ取り?
• 整頓されたリスト。矩形。よく見るデータセットの形。
• 列名(変数名)がつけられる
45
データフレームの例
• Irisデータをみてみましょう。baseに最初から含まれるデータセットですので,特に何もしなくても読み込まれています。
• head(iris)/tail(iris);データの最初の数行,最後の数行
• summary(iris);データの要約が表示されます。
46
データフレームの例
• ここでstr関数
• str(iris);オブジェクトの構造を示します。
> str(iris)'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
47
データの種類
• num;数字ですね
• factor;数字+ラベル,のことです
• iris$Speciesと入力してみましょう。
• 名義・順序尺度水準の数値
48
データの種類
• num;数字ですね
• factor;数字+ラベル,のことです
• iris$Speciesと入力してみましょう。
• 名義・順序尺度水準の数値
> iris$Species [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
(中略)[131] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica [141] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica Levels: setosa versicolor virginica
48
データの種類
• num;数字ですね
• factor;数字+ラベル,のことです
• iris$Speciesと入力してみましょう。
• 名義・順序尺度水準の数値
> iris$Species [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
(中略)[131] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica [141] virginica virginica virginica virginica virginica virginica virginica virginica virginica virginica Levels: setosa versicolor virginica
1, 2, 348
ちなみに
• 先ほどのリストObjもstrすると種類が分かります。
• 他にも論理型Logicalというのがあり,TRUE/FALSEの二つの値をとります。
List of 4 $ name : chr [1:2] "kosugi" "koji" $ sex : chr [1:3] "male" "female" "DK/NA" $ hight: num [1:3] 160 170 180 $ mat : int [1:5, 1:2] 1 2 3 4 5 6 7 8 9 10
文字列chr
数値num整数値int
49
データと分析の一例を• hist(iris$Sepal.Width)
• cor(iris$Sepal.Width,iris$Sepal.Length)
• result <- aov(Sepal.Length~Species,data=iris)
• summary(result)
• result2 <- lm(Sepal.Length~Sepal.Width,data=iris)
• result2
• plot(iris$Sepal.Width,iris$Sepal.Length)
• abline(result2)
50
さて
51
【実践編】Rをたっぷり使いましょう
52
subMENU
• Rstudioをつかってもっと便利にRを使おう
• ファイルからデータを読み込むには
• パッケージを読み込むには
• データを整理整頓
• モデルの表記法を知ろう53
はじめに;圧倒的にお勧め
と
54
はじめに;圧倒的にお勧め
と
54
どれぐらいお勧めかというと
• 統計処理をお料理に例えると(cf.木下冨雄)
• R本体でも楽しくお料理はできる。飯ごう炊爨的楽しさ。
• RStudioはキッチンスタジアム級!
55
四つの領域と複数のタブ
ConsoleScript
Workspace/History Files/Plots/Packages/Help
Files 冷蔵庫/Plot ブログ用画像Package 調味料/Help レシピ本
シンク/カメラ
調理場ここでレシピを展開
56
57
58
RstudioのProject
• プロジェクト単位によるデータ管理をしておくとよい
• ひとつのフォルダにデータとソースコードを入れておく
59
60
61
62
63
64
長所
• ファイルがあちこちに拡散しない
• プロジェクトごとにワークスペース(Rの記憶)が保持できる
• Working Directoryが自動的に設定される(パスが短くて済む)
• R単体だとsetwd関数で指定してやる必要がある
65
他にも便利な機能がいっぱい
• 関数補完機能(TABキー)
• SourceからConsoleへ(Run),HistoryからConsoleやSourceへ
• 実行してうまく行ったものをSourceに保存=清書
• プロットした図の出力(サイズ変更やClipboard出力,File出力)
66
subMENU
• Rstudioをつかってもっと便利にRを使おう
• ファイルからデータを読み込むには
• パッケージを読み込むには
• データを整理整頓
• モデルの表記法を知ろう67
データの読み込み
• 多くの場合,データはファイルとしてR外部に置いてある
• これが読み込めるだけでずいぶん捗りますよね
• データはカンマ区切り(csv),タブ区切りのテキスト形式で保存してあることが望ましいです。
68
データの読み込み• 関数を使って読み込む例
• 代入先←関数名(ファイル名,ヘッダ,欠損値)• delim;テキストファイル,csv;カンマ区切り
• ファイル名を直接指定するかfile.choose関数
• 一行目に変数名あり=TRUE,なし=FALSE
• 欠損値は文字,記号等を指定する
sample1 <- read.delim("sample.dat",head=TRUE,na.strings="*")sample2 <- read.csv("sample.csv",head=TRUE,na.strings=".")sample3 <- read.csv(file.choose(),head=FALSE,na.strings="9")
補遺)データの読み込み
• SPSSやExcelなど,他のアプリで作ったデータをそのまま読み込みたい時はforeignパッケージを使いましょう
• あるいはRzパッケージを使いましょう。RzパッケージはGUI環境でファイルの操作が可能です!
70
Rstudio)ファイルを読み込むと
• read.delim / read.csv関数でファイルを指定する時は,フルパスが必要(ex. “C:\User\Kosugitti\Data\sample.csv”)
• でもプロジェクトフォルダ内だとファイル名だけでいい。
• 読み込んだ後にWorkspaceにどんなものがあるか表示されている
71
subMENU
• Rstudioをつかってもっと便利にRを使おう
• ファイルからデータを読み込むには
• パッケージを読み込むには
• データを整理整頓
• モデルの表記法を知ろう72
over 4000 packages!
• パッケージは「新しい料理のレシピ」,”Cookpad”のようなもの。
• インターネット上のCRANから取り込んで料理上手になろう!
• パッケージをインストールするのは三通り• install.packages関数を使う
• Rguiから
• Rstudioから73
パッケージのインストール• install.packages(“psych”) とするか,
• メニューのパッケージから進むか
74
パッケージのインストール• install.packages(“psych”) とするか,
• メニューのパッケージから進むか
74
Rstudio)packageタブから
• ここでinstall Packagesを選ぶとグイグイいけます。
• ダウンロード済みのパッケージをアップデートするのもグイッと!
75
ダウンロードと実装
• インストールするだけでは使えません。
• 「ここで装備していくかい?」=library関数
• library(psych)とするとpsychパッケージの関数群がつかえるようになります。
76
Rstudio)libraryもボタン一つで
装備を外す=detachもチェックボックスをオフにするだけ
77
subMENU
• Rstudioをつかってもっと便利にRを使おう
• ファイルからデータを読み込むには
• パッケージを読み込むには
• データを整理整頓
• モデルの表記法を知ろう78
変数を触る,作る,切り取る• read.delim関数で読み込んだデータセットは,data.frame型になっている。
• ドルマークをつかって変数にアクセスするのでした。
• ex) iris$Sepal.Width
• 変数同士を計算することも当然できるわけです
• ex) iris$Sepal.Width/iris$Sepal.Length79
変数を触る,作る,切り取る• 計算結果の保存先を同じデータセットにし,新しい名前を付けてやると新しい変数ができます。
• iris$ratio <- iris$Sepal.Width/iris$Sepal.Length
80
変数を触る,作る,切り取る• 計算結果の保存先を同じデータセットにし,新しい名前を付けてやると新しい変数ができます。
• iris$ratio <- iris$Sepal.Width/iris$Sepal.Length
80
変数を触る,作る,切り取る• 計算結果の保存先を同じデータセットにし,新しい名前を付けてやると新しい変数ができます。
• iris$ratio <- iris$Sepal.Width/iris$Sepal.Length
80
変数を触る,作る,切り取る
• 変数の一部を切り取って別のオブジェクトにできます。
• iris2 <- subset(iris,select=c("Sepal.Length","ratio"))
81
変数を触る,作る,切り取る
• 条件で切り取ることでもできます。
• iris3 <- subset(iris,iris$Species=="setosa")
82
Rstudio)ここでも確認できます
• 新しいデータセットを作るとRのWorkingSpaceに蓄えられていく
変数やオブザベーションの数に注意して見てね
83
接着ける• データとデータを引っ付ける場合はcbind
かrbind関数
• cbindは横に,rbindは縦にひっつけます。
• 行数・列数が等しくないとエラーになります.
X Y
cbind
84
接着ける• データとデータを引っ付ける場合はcbind
かrbind関数
• cbindは横に,rbindは縦にひっつけます。
• 行数・列数が等しくないとエラーになります.
X
Zrbind
84
Rstudio)ここでも確認できます
変数やオブザベーションの数に注意して見てね
85
接着ける2
• データの名寄せをする時はmerge関数が便利です
• 名寄せのキーになる変数をbyオプションで指定するなど
• 詳細はhelp(merge)のExampleを見てみましょう
86
subMENU
• Rstudioをつかってもっと便利にRを使おう
• ファイルからデータを読み込むには
• パッケージを読み込むには
• データを整理整頓
• モデルの表記法を知ろう87
基本となる書き方
• 関数の意味やモデルの詳細はヘルプに譲るとして・・・
• 独立変数(説明変数)と従属変数(被説明変数,目的変数)の関係を表すformulaを知っておくと,少しばかり捗ります。
• 従属変数~独立変数+独立変数・・・という書き方をします。
88
データと分析の一例を
• result1 <- aov(Sepal.Length~Species,data=iris)
• result2 <- lm(Sepal.Length~Sepal.Width,data=iris)
• result3 <- lm(Sepal.Length~Sepal.Width+Petal.Length,data=iris)
• 分散分析と回帰分析は同じ仲間!
89
データと分析の一例を
• result4 <- factanal(~.,factors=1,data=iris[,-5])
• 因子分析は従属変数がないことがわかる
• ピリオドで「全ての変数」• iris[,-5]は5列目は削除してね,という意味
90
Tips
Enjoy Life!
Thank you!