見出し画像

【R言語】平均と分散と標準偏差

こんにちは。プログラミング超初心者のえいこです。

自分の仕事に活かすために、R言語を勉強中。

さて、今回はR-Studioを使ってデータの平均と分散と標準偏差を算出してみたので記録しておきます。

もとになるデータは「t検定ってなんだっけ?」の記事で紹介したものなのです。

では早速やっていきます。

データをベクトルを使って入力する

今回使ったデータはこちら。

画像1

薬剤Xを投与した時のタンパク質Aの発現を"xtreat"という変数にベクトルの形で代入します。

> #X投与群のデータを入れる
> xtreat<-c(5.23,6.12,5.79)

※"#"を前に付けるとメモを挿入できることがわかりました
※このコードを打ち終わった後に「control+Enter」を打つのを忘れずに!R-Studio右側画面のEnvironmentの画面に定義された変数が表示されるので確認しましょう。

プラセボ投与群のタンパク質Aの発現を"placebo"という変数に同じように代入します。

> #プラセボ投与群のデータを入力する
> placebo<-c(4.02,3.75,3.68)

これで、データの準備は完了です。

Rで平均を計算する

平均を計算する方法は、2種類あります。

1つ目:自分で計算式を作って計算する
2つ目:関数を使って一発で計算する

今回は練習のために、2種類やってみようと思います。

まずは、X投与群から。平均の計算式は、

(データの数値の合計)/(データの個数)

合計を計算する関数は"sum"で、Excelと同じです。データの個数は"length"で算出できます。(Excelでは"COUNT"関数に当たります)length関数は「はじめての変数・ベクトル」の記事でも紹介しています。

> #平均を数式で計算する
> sum(xtreat)/length(xtreat)
[1] 5.713333

計算機を使ったときと同じ値になりなした。

では、2つ目の関数を使って一発で計算する方法を...

それは、"mean"関数を使います。Excelでは平均を出すときには"AVERAGE"なので、少し違いますね。

> #関数を使って平均を計算する
> mean(xtreat)
[1] 5.713333

自分で計算式を作った場合と、関数を使って計算した場合で答えが一緒になりました。(一安心)

プラセボ投与群についても平均を出してみます。

> #平均を計算する
> mean(placebo)
[1] 3.816667

Rで分散(不偏標本分散)を計算する

次に、データの分散を計算してみようと思います。今回は「不偏標本分散」を計算してみます。

不偏標本分散(unbiased variance)とは?
標本分散が母分散に等しくなるように補正したもの。
標本分散は標本(データ)から計算した分散で、母集団に比べて標本数が少ない時には母分散に比べて小さくなる傾向がある。それを補正したものが「不偏標本分散」。
統計の分野では不偏分散を用いられることが多い。

”平均を計算する”と同じようにまずは、計算式を自分で作って計算してみます。

> #不偏標本分散を数式を使って計算する(データの個数-1で割る)
> sum((xtreat-mean(xtreat))^2)/(length(xtreat)-1)
[1] 0.2024333

うーん...計算式を作ると複雑ですね。

これを関数を使って一発で算出します。ほいっ!

> #var関数を使って計算する
> var(xtreat)
[1] 0.2024333

不偏標本分散を計算する関数は"var()"という関数でした。(ExcelにもVAR~~関数がありました!)

こちらも手で計算したのと同じ値になって一安心。

プラセボ群も同じように計算しておきます。

> #分散を計算する
> var(placebo)
[1] 0.03223333

最後に、標準偏差も計算しておきましょう!

Rで標準偏差を計算する

標準偏差は分散の平方根で算出できます。

標準偏差も分散も「平均値・中央値からのバラツキの大きさ」なのですが、なぜ標準偏差が重要なのでしょう?

分散は計算するときに値を二乗している。(実際のデータとの比較が直感的にしにくい)
平方根で補正して、バラツキをわかりやすくしたのが標準偏差。

分散が計算できれば、標準偏差もサクッと式を使って計算できます。"var()"の平方根を取れば良いんですね!

> #標準偏差を数式を使って計算する
> sqrt(var(xtreat))
[1] 0.4499259

これも一発で計算できる関数があります。それは"sd()"。

> #sd関数を使って標準偏差を計算する
> sd(xtreat)
[1] 0.4499259

計算したのと同じ値!!

プラセボ群も計算しておきます。

> #標準偏差を計算する
> sd(placebo)
[1] 0.1795364

今日は、ここまで!


でも、ベクトルにデータをいちいち入力するのってめんどくさい...

次回はデータセットの扱いをやってみようと思います。

それでは、また!

最後までお読みいただきありがとうございます。よろしければ「スキ」していただけると嬉しいです。 いただいたサポートはNGS解析をするための個人用Macを買うのに使いたいと思います。これからもRの勉強過程やワーママ研究者目線のリアルな現実を発信していきます。