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

ルビスコくん空を飛ぶ

大学院生(M2)の日記です.日記に加えてプログラム(R)のメモ書きもします.

Rの関数作成

R

Rを使ってデータ解析をしていると,「標準誤差を出す」とか「何らかの曲線で回帰して,r2値・係数・切片を求める」とか同じ作業が多い.そこでいちいち

res_a <- summary(lm(y1 ~ x1))$coef[1] #直線による回帰式の傾きを得る

res_b <- summary(lm(y1 ~ x1))$coef[2] #直線による回帰式のy切片を得る

なんて書くのめんどくさい.上の例ならまだいいけど,非直線回帰になると

result <- nls(y1~ exp(a * x1 + b), start=c(a=0,b=0))
aa <- summary(result)$coeff[1]
bb <- summary(result)$coeff[2]

p_value <- summary(result)$coeff[7]

で,さらに非線形回帰モデルの当てはまりをみるには

mod <- exp(aa * x1 + b)

r2 <- summary(lm(y1 ~ mod))$r.square

というように,いちいち式の形を明示しなければならない.使う式の形が決まっているなら,こういう動作を関数としてあらかじめ別のプログラムに関数として書いておいて,コード中でsource()で呼び出すほうが明らかに効率がよい.下のコードはベクトルy1とx1を指数関数曲線で回帰してその係数aとb,p値を取り出す関数.実際にコード中でこの定義された関数を使うときには,source("[関数プログラムのパス]")で関数を読み取ってexpo_ab(x1, y1)を実行すると,返り値として3つの数字(a, b, p値)が出てくる.

f:id:pam715:20160521212356p:plain