かすみこめも

@Kasu_mikoがやったこととか

Rで正規分布曲線を描く

実験で詰まったのでメモ

僕は貧乏学生なのでMSOfficeとかいう富裕層向けのソフトを持っていなくて,普段実験のデータ処理はNumbersとかLibreのCalcとか使ってやってるんだけど,今回それじゃどうにもならなそうな課題が出てきた.

【課題】

得られたデータを区間ごとに区切ってヒストグラムを書いて,平均と標準偏差を求めて正規分布曲線を書け

CalcにもNumbersにも関数を入力してグラフを出力するって機能がない(見つけられないだけかもしれない)ので曲線上の点を無数に取って繋げてグラフを書こうとしたけど,ヒストグラムと重ねようとするとx軸がうまく合わせられずにダメだった.

他の学科の友だちに聞いたらRでやれよって言われたのでRでやることにした.

まず適当にデータをcsvで出力する.(data.csv)
このとき,一行目にきちんとラベルを入れておく.
今回は"count"とした.

まずはRを起動してcsvを読み込む.

$ R
> data <- read.csv("data.csv")

dataオブジェクトに数値が入っていることを確認して,数値を呼び出しやすくする.

> data #これでcsvの中身が表示される.
> attach(data) #dataオブジェクトから数値を持ってくる準備
> count 
  #先ほどのattachによってdata中のcountをこれだけで呼び出せるようになった.

今調べたいデータがcountに入ったので,これを用いて統計を行っていく.
平均と標準偏差を求める.

> countm <- mean(count) #平均
> countsd <- sd(count) #標準偏差

データの準備ができたので正規分布曲線を描いていく.

今回はcountを横軸に,countの確率密度を縦軸に置いたグラフを描きたい.
組み込み関数dnormを用いて確率密度を表すとdnorm(count,countm,countsd)
これを線プロット(type = "l")していく.

> plot(count,dnorm(count,countm,countsd),type = "l")

すると以下のようなグラフが得られた.
f:id:Kasu_miko:20150127024308p:plain
なるほど,今回は無作為に得られたデータを線で繋げという命令をしたのでこうなるのは当たり前だった.
countは昇順にソートし直す必要がある.

> scount <- sort(count)
> plot(scount,dnorm(scount,countm,countsd),type = "l")

そして次の曲線を得た.
f:id:Kasu_miko:20150127024234p:plain
とりあえず正規分布曲線を描くという目的は終えた.



ブログ書いてて思い出したんだけどグラフの出力

> png("hoge.png") #描画モードをpngに
> plot(scount,dnorm(scount,countm,countsd),type = "l")
> dev.off() #描画モードを標準に戻す

ざっとこんな感じ