「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

プログラムとしてのRを学ぶ(その08/16)

 \mathrm{R}をプログラムとして見たときに注意・検討すべきところを学んでおきたい、ということで

を読んでいく。

8. 数学演算とシミュレーションの実行

 \mathrm{R}における数学演算を扱う。

8.1 数学関数

 \mathrm{R}に用意されている数学関数は、たとえば以下がある。

  
関数
内容
   \mathrm{exp}() 指数関数
   \mathrm{sqrt}() 平方根
   \mathrm{abs}() 絶対値
   \mathrm{sin}()など 三角関数
   \mathrm{min}() ベクトル内の最小値
   \mathrm{max}() ベクトル内の最大値
   \mathrm{which.min}() ベクトルの最小要素のインデックス
   \mathrm{which.max}() ベクトルの最大要素のインデックス
   \mathrm{pmin}() 複数のベクトルの要素ごとの最小値
   \mathrm{pmax}() 複数のベクトルの要素ごとの最大値
   \mathrm{sum}() ベクトル要素の合計
   \mathrm{prod}() ベクトル要素の積
   \mathrm{cumsum}() ベクトル要素の累計合計
   \mathrm{cumprod}() ベクトル要素の累積積
   \mathrm{round}() 丸め
   \mathrm{floor}() 切り下げ
   \mathrm{ceiling}() 切り上げ
   \mathrm{factorial}() 階乗関数
8.1.1 微積

 \mathrm{R}には記号微分や数値積分の機能がある。

###############
### 微積分 ###
###############

D(expression(exp(x^2)),"x") # xに関して導関数

integrate(function(x)x^2,0,1) # 数値積分

8.2 統計分布のための関数

 統計分布のための関数は、名前の前に以下のような接頭辞を付ける。

   \mathrm{d} 密度関数または確率質量関数
   \mathrm{p} 積分布関数
   \mathrm{q} 分位関数
   \mathrm{r} 乱数生成
mean(rchisq(1000),df = 2) # 自由度2のカイ二乗乱数1,000個の平均値

qchisq(0.95,2) # 自由度2のカイ二乗分布の95%点

8.3 ソート

##############
### ソート ###
##############

x <- c(13,5,12,5)
sort(x) # 並び替えた後の値を返す
x # Pythonとは異なり、ソート対象は変化しない

order(x) # 並び替えた場合のインデックスを返す

8.4 ベクトルや行列に対する線形代数演算

 ベクトルとスカラの乗算はそのまま実行する。
 ベクトルの内積を計算したい場合は、\mathrm{crossprod}()を用いる。

 

   \mathrm{t}() 行列の転置
   \mathrm{qr}() \mathrm{QR}分解
   \mathrm{chol}() \mathrm{Cholesky}分解
   \mathrm{det}() 行列式
   \mathrm{eigen}() 固有値固有ベクトル
   \mathrm{diag}() 正方行列の対角成分
   \mathrm{sweep}() 数値解析スイープ演算

8.5 集合演算

 \mathrm{R}には以下のような集合演算が用意されている。

   \mathrm{union(x,y)} \mathrm{x}\mathrm{y}の和集合
   \mathrm{intersect(x,y)} \mathrm{x}\mathrm{y}の共通部分
   \mathrm{setdiff(x,y)} \mathrm{x}\mathrm{y}の差集合
   \mathrm{setequal(x,y)} \mathrm{x}\mathrm{y}の等価性の検査
   \mathrm{c\ \%in\%\ y} cが集合yの要素であるかの論理値
   \mathrm{choose(n,k)} サイズnの集合から選べるサイズkの部分集合の数

8.6 Rでのシミュレーションプログラム

8.6.1 組み込み乱数ジェネレーター

 前述の\mathrm{r}...関数を用いて乱数を発生させることでシミュレーションができる。

# 公平なコインで5回コイントスをした際に4回以上表が出る確率をシミュレート
x <- rbinom(10000,5,0.5)
mean(x >= 4)
8.6.2 繰り返し実行時に同じ乱数列を得る

 乱数ジェネレーターは、シード値に32ビット整数を用いる。そのため丸め誤差を除けば同じ初期シードは同じ乱数を生成する。
 同じ乱数を生成したければ、\mathrm{set.seed}()関数を用いて初期シードを設定すればよい。

プライバシーポリシー お問い合わせ