読者です 読者をやめる 読者になる 読者になる

統計Rの勉強

いまさらながら、統計ツールRの勉強をしている。
発端はPRML本の結果とJavaの結果がだいぶ違ったので、確かめてやろうとおもったこと。
前から、覚えないといけないかもなぁと思っていたこともあり、本腰を入れることにした。

で、Rのintroからまじめに読んでいくことにした。
最新版:http://cran.r-project.org/doc/manuals/R-intro.html
1.7の日本語:http://cran.r-project.org/doc/contrib/manuals-jp/R-intro-170.jp.pdf

ひとまず2章だけ。

  • 基本的に行列データとその演算の集合でできてる。
  • データ=オブジェクトと呼ぶ。演算=関数と呼ぶ。
  • 各要素に対して普通に考えられる演算(+,-など)はできる。
  • 基本的な統計量はだせる(min,max,mean,var,sumなど)。
  • 演算時に要素が足りないと、勝手に保管される。便利だが要注意。
  • 添え字に論理値が使える。
    • 例:
#ベクトルxから5以上の値だけ取り出す
 x[x>5]
#欠損値に0をうめておく
 x[is.na(x)] <- 0
#上限値以上のデータを上限値でうめておく
 limit <- 10
 x[x>limit] <- limit
                                  • -

メモ

#使ってみる(変数xに値を代入する)
x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))
c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
x #内容を表示する

#使ってみる(ちょっと演算)
y <- c(x, 0, x) #要素は11個になる(xの要素と0とxの要素)

v  <-  y  +  1 #yの全部の要素に1を足す(裏では、一番要素数の大きなベクトルに合わせて出力を試みる。要素数が小さいベクトルは、値の繰り返しが行われて、要素数の調節されて演算される)
# +, -, *, /, ^, log, exp, sin, cos, tan, sqrt
#要素毎に演算
#注意:"*"は要素毎に掛け算。行列の掛け算ではない。

sum(x) #合計
min(x) #最小
max(x) #最大
mean(x) #平均
length(x) #長さ
var(x) #偏差
range(x) #c(min(x), max(x))と同じ
prod(x) #要素間の積

sort(x) #昇順ソート

#使ってみる(順列を作る)
z <- 1:30 # 1から30までのベクトルを作る
z <- seq(1,30) #同じ
z <- seq(from=1, to=30)
z <- seq(to=30, from=1)
s3 <- seq(-5, 5, by=.2) #-5から5まで0.2刻みでベクトルを作る
s4 <- seq(length=51,  from=-5,  by=.2) #-5から0.2刻みで51個の数列を要素とするベクトルを作る

z <- 2*1:30 # 1から30までのベクトルを作って2倍する
n <- 10 #":"演算子は四則演算子よりも優先なので、以下は答えが違う
1:n-1
1:(n-1)

s5 <- rep(x, times=5) #xベクトルを5回繰り返す
s6 <- rep(x, each=5) #xの要素毎に5回繰り返す

#論理演算と論理ベクトル
temp  <-  x  >  13 #xの各要素について、13より大きい場合Trueとする要素をもつ論理ベクトル
#<, <=, >, >=, ==, != 
# c1 & c2, c1 | c2, !c1


NA #欠損値(欠損値に対する演算は全部欠損値になる)
NaN #Not a number(0で割るなどでできる)
is.na(x) #xの中でNAまたはNaNの要素がtrueとなるベクトル

#文字列ベクトル
c("X","Y")
#文字列を要素単位であわせる
 labs  <-  paste(c("X","Y"),  1:10,  sep="")
#[1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"

#添え字での要素選択
x[c(1,2,3)]
x[1:3]
x[c(3,2,1,2,3)] #3,2,1,2,3の順に並んだベクトル
x[-(4:5)] #4から5番目を除いたベクトルを返す
x[c(T,F,T,T,T)] #論理値で選択
x[!is.na(x)] #欠損値の要素を除いたベクトル

#添え字に名前をつけて選択
fruit  <-  c(5,  10,  1,  20)
names(fruit)  <-  c("orange",  "banana",  "apple",  "peach")
lunch  <-  fruit[c("apple","orange")]
#xの欠損値を0に置き換える
x[is.na(x)]  <-  0

#使ってみる(変数を消す)
objects() #変数名一覧
rm(x,y,v) #xとy,vを消す

ふう。一気に簡単なところまで読んだ。