現在作成中です。

Rの特徴

この資料では統計ソフトRを使ったデータ分析について説明しています。Rは統計分析ソフトの一つで、さまざまな分野の研究や実務において利用されています。

Rの特徴は、まず無料で利用できることです。SPSSなどの統計ソフトは、安いもので数万円、高いものは数十万円かかります。それゆえ、大学でこのようなソフトの使用方法を学んでも、卒業後に使うことはまずありません。一方、Rは無料ですので、個人のPC(や許可が得られれば会社のPC)にインストールしてデータ分析を行うことができます。

Rのもう一つの特徴は、さまざまな追加機能がオプション(パッケージといいます)で追加されていることです。Rの本体は必ずしも多機能とは言えないのですが、世界中の研究者やプログラマなどがデータの加工や分析に有益なさまざまなパッケージを公開しています。Rの利用者はとても多いので、先進的な分析手法が他の有料ソフトに先立って利用可能になることも珍しくありません。

以上のような理由で、従来SPSSが主流であった社会学や心理学の分野においても、Rの利用が増加しています。。大学の授業についても同様で、Rを用いた社会調査や心理統計のテキストも徐々に刊行されています。

一方、Rにも短所はあります。第1の短所は、使い方が難しいことです。例えばSPSSではマウスを使った操作でデータの分析や加工を行うことができます(これをGUI=Graphical User Interfaceといいます)。一方、Rではキーボードからコマンドを入力する必要があります(これをCUI=Character User Interfaceといいます)。初歩的なプログラムミングの経験があればそれほど難しくありませんが、ない場合はハードルが高く感じられるでしょう。

第2の短所は、とても残念なことですが、社会調査のデータ分析はあまり得意ではないことです。SPSSにあるような、特定の(複数の)値を欠損値として扱う機能はRにはありません。パッケージとしても提供されていないようです。また、質問紙調査の後には度数分布表やクロス集計表で回答の分布や質問間の関連を確認しますが、Rでは度数と相対度数(%)を同時に表示することができません。とはいえ、いずれの欠点も分析方法を工夫したり、出力結果を加工することで対処可能ですので、あまり致命的な問題点とはいえません。

なお、以下の説明ではRStudio(正式名称はRStudio Desktop)というソフトを利用します。RStudioは統合開発環境(IDE: Integrated Development Environment)と呼ばれるソフトウェアで、Rを便利に利用するためのさまざまな機能を有しています。

Rのインストール

Rを利用するためには、当然ですが、RをPCにインストールする必要があります(ブラウザ上で利用できるRもあることにはあります)。RStudioをインストールする場合はこれもインストールする必要があります。注意が必要なのは、RStudioはあくまでRを便利に利用するためのソフトウェアですので、Rそのものは別にインストールする必要があります。

RとRStudioのインストール方法については、さまざまな解説サイトがありますので、そちらを参考にしてください。

Rを使ってみる。

まずRStudioを起動します。右側のConsoleという枠の>の後にコマンドを入力します。

まずは簡単な計算から。1+1と入力してみましょう。+の前後の空白はあってもなくても構いません。

1 + 1
## [1] 2

[1] 2と表示されました。[1]は長さ1のベクトルという意味です。ベクトルについては後で説明します。

他にも四則演算を行ってみましょう。掛け算記号は*、割り算記号は/を使います(Excelなどと共通するルールです)。

5 - 3
## [1] 2
3 * 4
## [1] 12
8 / 2
## [1] 4

もう少し複雑な計算も可能です。

4 + 3 * 7
## [1] 25
(4 + 3) * 7
## [1] 49
3 ^ 2
## [1] 9
3 ^ 3
## [1] 27
3 ^ (1/2)
## [1] 1.732051

最後の3 ^ (1/2)は3の2分の1乗を示しています。2分の1乗は平方根と同じですから、答えは\(\sqrt{3} = 1.732 \cdots\)になります。1/2にカッコがついているのは、3 ^ 1 / 2(3の1乗 割る2)と区別するためです。

さて、上の例では3の2乗、3乗、2分の1乗を計算しました。このように、同じ数字を繰り返し用いる場合には、オブジェクトを利用することができます。オブジェクトは数学の文字式におけるx、yのような文字のようなもので、数字を代入することができます。代入は<-という記号で表します。

x <- 3
x ^ 2
## [1] 9
x ^ 3
## [1] 27
x ^ (1/2)
## [1] 1.732051

オブジェクトを使った計算をいくつか行ってみましょう。

x <- 3
y <- 4
x*y
## [1] 12
x <- x + 1
x
## [1] 4

x <- x + 1は「xに1を足した数字をxに代入する」という意味です。

なお、オブジェクトの名前は一文字とは限りません。(あまりお勧めしませんが)日本語も使うことができます。

身長 <- 173
体重 <- 69
BMI <- 体重 / (身長/100)^2
BMI
## [1] 23.05456

オブジェクトには文字列も代入することができます。文字列を代入する場合は、文字列はダブルクオテーション"で囲みます。

name <- "大谷翔平"
paste("私の名前は",name,"です")
## [1] "私の名前は 大谷翔平 です"

上の例の2行目では、pasteという関数を使って、「私の名前は」「大谷翔平」=(nameの中身)「です」の3つの文字列を繋げています(copy & pasteのpasteです)。nameの中身を自分の名前に変えて試してみてくだい。

次に論理式というものを学びます。論理式はその内容が真か偽かを判断し、真の場合にはTRUE、偽の場合にはFALSEの値を返すものです。aとbが等しいかどうかを判断する場合は、等号は=ではなく==を用いてa == bと書きます。その他、大小記号も使うことができます。

1 == 1
## [1] TRUE
2 == 3
## [1] FALSE
4 > 3
## [1] TRUE
4 >= 3
## [1] TRUE
3 >= 3
## [1] TRUE
4 < 3
## [1] FALSE

4つ目と5つ目の>=\(\geqq\)を示しています。結果がTRUEなのは不思議に思うかもしれません。 しかし、\(a \geqq b\)は「aはbより大きい、または、bと等しい」という意味ですから、\(4 \geqq 3\)は真になります。同様に、\(3 \geqq 3\)も真です。

name == "デコピン"
## [1] FALSE
"Angels" > "Dodgers" #エンゼルスはドジャースよりも強い?
## [1] FALSE

最後の2つの例は文字列を比較しています。等号で比較した場合は、前後の文字列が完全に一致していればTRUE、そうでなければFALSEになります。大小記号を使って比較するした場合は、アルファベット順、または文字コード順で比較します。

ベクトルは複数の数字や文字列をまとめたもの。コンマ(,)で繋いで、c()で囲む。 ベクトルに含まれているデータの数をベクトルの長さ、もしくはベクトルのサイズという。 ベクトルの順序には意味があり、下の例では5人の身長、体重、名前が同じ順序で入っている。

height <- c(176, 173, 168, 166, 170)
weight <- c(58, 62, 52, 54, 55)
name <- c("相葉","松本","二宮","大野","櫻井")
height
## [1] 176 173 168 166 170
weight
## [1] 58 62 52 54 55
name
## [1] "相葉" "松本" "二宮" "大野" "櫻井"

数字のベクトルにある値を加減乗除すると、ベクトルのすべての値に対してその計算を行う。一方、ベクトル同士で加減乗除すると、ベクトルの同じ位置の数字同士で計算を行う。そのため、同じ長さのベクトル同士でしか計算を行うことはできない。(厳密にいえば違うのだが、ひとまずそのように考えて差し支えない)

height / 100
## [1] 1.76 1.73 1.68 1.66 1.70
height - weight
## [1] 118 111 116 112 115
height >= 170
## [1]  TRUE  TRUE FALSE FALSE  TRUE
height >= c(180, 175, 170, 165, 160)
## [1] FALSE FALSE FALSE  TRUE  TRUE
name == "二宮"
## [1] FALSE FALSE  TRUE FALSE FALSE
arashi <- data.frame(name,height,weight)
arashi
##   name height weight
## 1 相葉    176     58
## 2 松本    173     62
## 3 二宮    168     52
## 4 大野    166     54
## 5 櫻井    170     55
head(arashi)
##   name height weight
## 1 相葉    176     58
## 2 松本    173     62
## 3 二宮    168     52
## 4 大野    166     54
## 5 櫻井    170     55
summary(arashi)
##      name               height          weight    
##  Length:5           Min.   :166.0   Min.   :52.0  
##  Class :character   1st Qu.:168.0   1st Qu.:54.0  
##  Mode  :character   Median :170.0   Median :55.0  
##                     Mean   :170.6   Mean   :56.2  
##                     3rd Qu.:173.0   3rd Qu.:58.0  
##                     Max.   :176.0   Max.   :62.0
arashi$height
## [1] 176 173 168 166 170
arashi$dif <- arashi$height - arashi$weight # データフレームに含まれる列
dif <- arashi$height - arashi$weight # データフレームから独立したベクトル
arashi[5,2] # 5行2列目(櫻井の身長)
## [1] 170
arashi[5,"height"] # 5行目のheight列(櫻井の身長)
## [1] 170
arashi[5,c("height","weight")]
##   height weight
## 5    170     55
arashi[c(4,5),"height"]
## [1] 166 170
arashi$height[2]
## [1] 173
arashi[5,]
##   name height weight dif
## 5 櫻井    170     55 115
arashi[,2]
## [1] 176 173 168 166 170
over170 <- arashi$height >= 170
arashi$name[over170]
## [1] "相葉" "松本" "櫻井"
arashi$name[arashi$height >= 170]
## [1] "相葉" "松本" "櫻井"
name <- c("相葉", "松本", "二宮", "大野", "櫻井", "中居", "木村", "稲垣", "草なぎ", "香取")
group <- c("arashi", "arashi", "arashi", "arashi", "arashi", "smap", "smap", "smap", "smap", "smap")
height <- c(176,173,168,166,170,165,176,172,170,183)
weight <- c(58, 62, 52, 54, 55, 57, 57, 54, 55, 78)
idol <- data.frame(name,group,height,weight)
idol
##      name  group height weight
## 1    相葉 arashi    176     58
## 2    松本 arashi    173     62
## 3    二宮 arashi    168     52
## 4    大野 arashi    166     54
## 5    櫻井 arashi    170     55
## 6    中居   smap    165     57
## 7    木村   smap    176     57
## 8    稲垣   smap    172     54
## 9  草なぎ   smap    170     55
## 10   香取   smap    183     78
mean(idol$height[idol$group=="smap"])
## [1] 173.2
mean(idol$height[idol$group=="arashi"])
## [1] 170.6
t.test(height ~ group, data = idol)
## 
##  Welch Two Sample t-test
## 
## data:  height by group
## t = -0.74135, df = 6.4706, p-value = 0.4845
## alternative hypothesis: true difference in means between group arashi and group smap is not equal to 0
## 95 percent confidence interval:
##  -11.032619   5.832619
## sample estimates:
## mean in group arashi   mean in group smap 
##                170.6                173.2