第1講 - さまざまな多変量解析とR言語の使い方
(Press ?
for help, n
and p
for next and previous slide)
村田 昇
MASS::Animals
)body [kg] | brain [g] | |
---|---|---|
Mountain beaver | 1.350 | 8.1 |
Cow | 465.000 | 423.0 |
Grey wolf | 36.330 | 119.5 |
Goat | 27.660 | 115.0 |
Guinea pig | 1.040 | 5.5 |
Dipliodocus | 11700.000 | 50.0 |
Asian elephant | 2547.000 | 4603.0 |
Donkey | 187.100 | 419.0 |
… | … | … |
Figure 1: 体重と脳の重さの関係 (単回帰)
wine.csv
)年号 | 価格(対数) | 冬の降雨 | 気温 | 秋の降雨 | 経過年 |
---|---|---|---|---|---|
1952 | -0.99868 | 600 | 17.1167 | 160 | 31 |
1953 | -0.4544 | 690 | 16.7333 | 80 | 30 |
1954 | NA | 430 | 15.3833 | 180 | 29 |
1955 | -0.80796 | 502 | 17.15 | 130 | 28 |
1956 | NA | 440 | 15.65 | 140 | 27 |
1957 | -1.50926 | 420 | 16.1333 | 110 | 26 |
1958 | -1.71655 | 582 | 16.4167 | 187 | 25 |
1959 | -0.418 | 485 | 17.4833 | 187 | 24 |
… |
Figure 2: ワインの価格と生産環境の関係
Figure 3: 生産環境によるワイン価格の予測 (重回帰)
jpamenity.csv
)昼夜人口比 | 年少人口比 | 老年人口比 | 人口増減率 | |
---|---|---|---|---|
北海道 | 100.0 | 11.7 | 26.0 | -0.47 |
青森県 | 100.0 | 12.1 | 27.0 | -0.95 |
岩手県 | 99.7 | 12.4 | 27.9 | -0.84 |
宮城県 | 100.2 | 13.0 | 22.9 | -0.09 |
秋田県 | 99.9 | 11.1 | 30.7 | -1.12 |
山形県 | 99.8 | 12.6 | 28.3 | -0.78 |
福島県 | 99.6 | 12.9 | 26.1 | -1.41 |
茨城県 | 97.2 | 13.2 | 23.8 | -0.51 |
… | .. | .. | .. | .. |
Figure 4: 県別の生活環境(人口動態)の散布図
Figure 5: 県別の生活環境(教育・労働)の散布図
Figure 6: 県別の生活環境(貯蓄・余暇)の散布図
Figure 7: 県別の生活環境の主成分分析
MASS::biopsy
)ID | V1 | V2 | V3 | V4 | V5 | V6 | V7 | V8 | V9 | class |
---|---|---|---|---|---|---|---|---|---|---|
1000025 | 5 | 1 | 1 | 1 | 2 | 1 | 3 | 1 | 1 | benign |
1002945 | 5 | 4 | 4 | 5 | 7 | 10 | 3 | 2 | 1 | benign |
1015425 | 3 | 1 | 1 | 1 | 2 | 2 | 3 | 1 | 1 | benign |
1016277 | 6 | 8 | 8 | 1 | 3 | 4 | 3 | 7 | 1 | benign |
1017023 | 4 | 1 | 1 | 3 | 2 | 1 | 3 | 1 | 1 | benign |
1017122 | 8 | 10 | 10 | 8 | 7 | 10 | 9 | 7 | 1 | malignant |
1018099 | 1 | 1 | 1 | 1 | 2 | 10 | 3 | 1 | 1 | benign |
1018561 | 2 | 1 | 2 | 1 | 2 | 1 | 3 | 1 | 1 | benign |
… | .. | .. | .. | .. | .. | .. | .. | .. | .. | … |
Figure 8: 乳癌患者(良性・悪性)の生研検査の散布図
Figure 9: 生研検査の主成分分析
Figure 10: 生研検査による乳癌患者の判別分析
omusubi.csv
)梅 | 鮭 | 昆布 | 鰹 | 明太 | 鱈子 | ツナ | 他 | |
---|---|---|---|---|---|---|---|---|
北海道 | 13.86 | 27.94 | 5.58 | 5.26 | 9.26 | 15.06 | 11.61 | 11.39 |
青森 | 14.93 | 30.79 | 7.01 | 2.43 | 10.36 | 11.58 | 11.58 | 11.28 |
岩手 | 17.91 | 23.13 | 5.22 | 3.35 | 17.91 | 10.07 | 10.44 | 11.94 |
宮城 | 15.16 | 29.5 | 10 | 1.66 | 14.83 | 8.83 | 12.83 | 7.16 |
秋田 | 10.63 | 31.38 | 5.31 | 3.19 | 14.89 | 13.29 | 10.63 | 10.63 |
山形 | 16.58 | 20.27 | 8.29 | 1.38 | 18.89 | 10.13 | 12.9 | 11.52 |
福島 | 12.37 | 21.99 | 8.93 | 3.43 | 16.49 | 9.62 | 19.24 | 7.9 |
茨城 | 15.42 | 26.49 | 7.98 | 2.54 | 18.33 | 11.79 | 11.79 | 5.62 |
… | .. | .. | .. | .. | .. | .. | .. | .. |
Figure 11: おむすびの具に関するアンケート分析 (県別の集計)
Figure 12: アンケート結果にもとづく県のクラスタ分析
datasets::AirPassengers
)Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | … | |
---|---|---|---|---|---|---|---|---|---|---|
1949 | 112 | 118 | 132 | 129 | 121 | 135 | 148 | 148 | 136 | … |
1950 | 115 | 126 | 141 | 135 | 125 | 149 | 170 | 170 | 158 | … |
1951 | 145 | 150 | 178 | 163 | 172 | 178 | 199 | 199 | 184 | … |
1952 | 171 | 180 | 193 | 181 | 183 | 218 | 230 | 242 | 209 | … |
1953 | 196 | 196 | 236 | 235 | 229 | 243 | 264 | 272 | 237 | … |
1954 | 204 | 188 | 235 | 227 | 234 | 264 | 302 | 293 | 259 | … |
1955 | 242 | 233 | 267 | 269 | 270 | 315 | 364 | 347 | 312 | … |
… | .. | .. | .. | .. | .. | .. | .. | .. | .. | … |
Figure 13: 米国航空機旅客量の変遷
Figure 14: 階差時系列の自己相関分析
Figure 15: 航空機旅客量の予測 (SARIMAモデルによる)
例えば以下のような計算を行うことができる
#' 一般的な数式を入力すれば計算機として使える #' "#" 以降はコメントとして無視される 1 + 2 + 3 + 4 # 空白は無視される sin(pi/3) / cos(pi/3) # tan(pi/3) になるはず
コンソール上で終了を指示する以下のコマンドを入力すれば R を終了させることができる
#' R の終了には q() または quit() を用いる q()
help()
や ?
などを利用終了時にコンソールに以下のメッセージ, または同様の内容のダイアログボックスが表示される場合がある
> q()
Save workspace image? [y/n/c]:
y
を入力: セーブする (yesの略)n
を入力: セーブしない (noの略)c
を入力: Rの終了をキャンセルする (cancelの略)加減乗除 | +, -, *, / |
羃乗 | ^ または ** |
三角関数 | sin(), cos(), tan() |
逆三角関数 | asin(), acos(), atan() |
指数関数 | exp() |
対数関数 | log(), log10(), log2() |
双曲線関数 | sinh(), cosh(), tanh() |
平方根 | sqrt() |
絶対値 | abs() |
コンソール上での計算例
#' 与えられた式の計算をコンソール上で実行してみよう #' 1 x 2 + 3^2 の計算 1 * 2 + 3^2 #' sin(2π) の計算 sin(2*pi) #' √2 + |-0.6| の計算 sqrt(2) + abs(-0.6)
[1] 11 [1] -2.449294e-16 [1] 2.014214
関数の呼び出し方 (関数名を f
とする)
f(arg1 = value1, arg2 = value2) # 擬似コード #' arg1, arg2 は引数の名前,value1, value2 は引数に渡す値を表す f(value1, value2) # 上と同値.順序に注意
help(関数名)
または ?関数名
で
ヘルプが表示される正弦関数の計算
#' 正弦関数(引数が1つ)の計算例 sin(x = pi/2) sin(pi/2) # 引数名は省略でき,前の行とこの行は同じ結果になる
対数関数の計算
#' 対数関数(引数が2つ)の計算例 #' 以下は擬似コード.a, b を適当な数値に置き換えて実行しなさい log(a, b) # 底を b とする a の対数 log(x = a, base = b) #上と同値 log(base = b, x = a) #上と同値(引数名があれば順序は自由に変えられる) log(b, a) # = log(x=b,base=a) (引数名がなければ規定の順序で解釈される) log(a) # 自然対数 =log(a,base=exp(1))
help()
(使い方や例の表示)example()
(例を実際に実行してくれる)help.search()
(キーワード検索)ヘルプの使い方
#' 関数 log() に関するヘルプの例 help(log) # Helpタブに結果は表示される ?log # 上と同値 example(log) # ヘルプ内の例を実行 help.search("log") # "log"に関連する項目は? ??"log" # 上と同値
型の名称 | 役割 | 例 |
---|---|---|
numeric |
(広義の)実数を表す | 1, pi, NaN |
complex |
複素数を表す | 1i, 3-4i |
character |
文字列を表す | "foo", "Hello World!" |
logical |
論理値(真偽)を表す | TRUE, FALSE, 3<4, NA |
代入操作の例
#' 数値を変数 foo に代入する (foo <- 3) # foo <- 3; print(foo) と等価 #' 変数 foo を用いて計算し,結果を bar に代入する bar <- sin(2/3*pi) + cos(foo * pi/4) # 計算結果は表示されない #' 変数 bar の内容を表示する print(bar)
[1] 3 [1] 0.1589186
c, q, t, C, D, F, I, T
には注意が必要
関数の定義には関数 function()
を利用する
#' 関数 function() の使い方 (擬似コード) 関数名 <- function(引数){ # 計算ブロックの開始 ## このブロック内に必要な手続きを記述する.複数行に渡って構わない return(返値) # 計算結果を明示的に示す } # ブロックの終了
縦と横の長さを与えて長方形の面積を計算
#' 縦の長さ a, 横の長さ b (既定値は1) の長方形の面積 foo <- function(a, b = 1){ out <- a * b return(out) # 計算結果を外に返却 } #' 実行例 foo(2, 3) # foo(a = 2, b = 3) と同義 foo(2) # foo(a = 2, b = 1) と同義
[1] 6 [1] 2
無名関数 (anonymous function) の作り方
#' 変数や関数を定義して計算する方法 (x <- 1:10/10) foo <- function(x) sin(x)/x # 式の計算結果を返却(returnを省略可) foo(x) #' 変数や関数を定義せずに計算する方法 (function(x) sin(x)/x)(1:10/10) (\(x) sin(x)/x)(1:10/10) # R 4.1 以降の短縮表現
[1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 [1] 0.9983342 0.9933467 0.9850674 0.9735459 0.9588511 0.9410708 0.9203110 0.8966951 [9] 0.8703632 0.8414710 [1] 0.9983342 0.9933467 0.9850674 0.9735459 0.9588511 0.9410708 0.9203110 0.8966951 [9] 0.8703632 0.8414710 [1] 0.9983342 0.9933467 0.9850674 0.9735459 0.9588511 0.9410708 0.9203110 0.8966951 [9] 0.8703632 0.8414710
練習
- R の関数 integrate() についてヘルプを調べなさい.
以下の関数の定積分を求めなさい.
\begin{align} f(x)&=\frac{1}{1+x^{2}},\quad x\in[0,1]\\ g(x)&=\exp\left( -\frac{x^{2}}{2} \right),\quad x\in\mathbb{R} \end{align}
関数 integrate() を利用して定積分を計算
#' 関数 1/(1+x^2) を区間 [0,1] で積分 (関数オブジェクトを渡す書き方) f <- function(x) 1/(1+x^2) # 関数を定義 integrate(f, 0, 1) # pi/4 #' 関数 e^(-x^2/2) を実軸全体で積分(Gauss積分) (関数を定義しない書き方) integrate(\(x)exp(-x^2/2), -Inf, Inf) # sqrt(2*pi)
0.7853982 with absolute error < 8.7e-15 2.506628 with absolute error < 0.00023