閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

Rで遊ぼう

前から興味のあったRを少しだけ触ってみました。といってもただ起動しただけでは何をしていいかわからず、ちょっとした配列の平均を求める、といったことしかできなかったのですが、それではつまらないので以下のページの問題をRで解いてみることにしました。


入学試験と学業成績の回帰直線を描く

まずデータを入力します。

> a<-c(440,448,455,460,473,485,489,500,512,518,528,550,582,569,585,593,620,650,690) # 入学試験の点数
> b<-c(1.57,1.83,2.05,1.14,2.73,1.65,2.02,2.98,1.79,2.63,2.08,2.15,3.44,3.05,3.19,3.42,3.87,3.00,3.12) # 学業成績

とりあえず散布図を描く。

> plot(b~a, xlim=c(400,700))

xlimは横軸の最大最小値を指定しているもので、普通に描くと最小値が450になるので明示的に指定しています。

本当は軸名称を設定したかったのですが手元のRだと日本語が文字化けしたのでそのままで。

次にlsfit関数で回帰直線を求めて、散布図の上に重ねます。

> abline(lsfit(a,b),col=2)

colは色(color)のようです。列(column)か何かかと思いました。Rは関数などの名前が色々略されているようで、初見だと難しく感じます。それはともかく、これで以下のようなグラフが作成されます。

f:id:wata_d:20090504223325p:image

入学試験の点数が、400点、500点、600点、700点のときのそれぞれの学業成績の予測値を求める

lsfit(a,b)$coef から Y切片と傾きが得られるので:

> z <- lsfit(a, b)
> 400 * z$coef["X"] + z$coef["Intercept"]
1.429565 
> 500 * z$coef["X"] + z$coef["Intercept"]
2.236329 
> 600 * z$coef["X"] + z$coef["Intercept"]
3.043092 
> 700 * z$coef["X"] + z$coef["Intercept"]
3.849855 

で完了。

関数ひとつ使うのに調べながらやらないといけないので結構時間がかかりましたが、結果だけ見るとほんの数行でできてしまうのでお手軽な感じがしますね。仕事でも使えるかもしれないので少しは使いこなせるようになりたいです。