R言語 平均値、中央値、標準偏差などの求め方

R言語で、平均値や中央値の求め方を調べてみました。

プログラムの結果が正しいか確認するため、
「Excelで学ぶ多変量解析入門」の内容を参考にさせていただきました。



元データ



使用するデータです。
data.txtという名前で保存しておきました。


# 社員名と給料(万円)の表
name salary
大竹 21
武宮 24
石田 26
坂田 26
加藤 30
藤沢 32
林 34
小林 37
依田 40
山下 130






標本数(nrow)



標本数nを求めてみます。
nrowを使用して、データフレームの行数を数えました。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 標本数
  4. print(nrow(t))




# Rscript sample.R
[1] 10






合計(sum)



合計値Tを求めてみます。
sumにデータフレームのsalary列を渡します。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 合計
  4. print(sum(t$salary))




# Rscript sample.R
[1] 400






平均(mean)



平均値は、meanで求められます。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 平均
  4. print(mean(t$salary))




# Rscript sample.R
[1] 40






中央値(median)



中央値mdはmedianで求められます。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 中央値
  4. print(median(t$salary))




# Rscript sample.R
[1] 31





最大値、最小値(max,min)



最大値、最小値は各々maxとminで求められます。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 最大値
  4. print(max(t$salary))
  5. # 最小値
  6. print(min(t$salary))




# Rscript sample.R
[1] 130
[1] 21







範囲(range)



範囲はrangeで求められます。
最小値と最大値の2値がベクトルデータで取得できるので、
その差を取れば良さそうです。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 範囲
  4. r <- range(t$salary)
  5. print(r)
  6. print(r[2] - r[1])




# Rscript sample.R
[1] 21 130
[1] 109







分散(var)



分散Vはvarで求められます。

ここで求められる結果は不偏分散です。
(不偏分散の私の理解は、標本から求められる分散)

例えば、100人の社員のうち10名のデータを抽出して標本調査を行った場合、
分散はn-1(この場合は9)で割ります。

しかし、10名の社員全てからデータを取得している場合には
10で割ります。

varは標本調査を前提にしているので、全件調査した場合には
n-1/nをかけて狙っているデータに戻してやります。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 分散
  4. print(var(t$salary))
  5. # 全数調査時における分散
  6. variance <- function(x) var(x)*(length(x)-1)/length(x)
  7. print(variance(t$salary))




# Rscript sample.R
[1] 1035.333
[1] 931.8






標準偏差(sd)



標準偏差はsdで求められます。
分散varと同様、不偏標準偏差なので標本標準偏差を求めるには
分散から計算してやります。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 不偏標準偏差
  4. print(sd(t$salary))
  5. # 全数調査時における分散
  6. variance <- function(x) var(x)*(length(x)-1)/length(x)
  7. # 標本標準偏差
  8. sqrt(variance(t$salary))




# Rscript sample.R
[1] 32.1766
[1] 30.5254








変動係数



変動係数は標準偏差を平均で割った値です。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 変動係数 = 標準偏差 / 平均
  4. print(sd(t$salary) / mean(t$salary))





# Rscript sample.R
[1] 0.8044149



変動係数が大きいほどデータに偏りがあると言えます。
大まかな指標は以下の通り。

変動係数の範囲データのばらつき
0〜0.2ほとんどない
0.2〜0.5ややあり
0.5〜1.0ある
1.0以上かなりある



山下さんが高給取りなので、40万に変更して標準偏差と変動係数を求めてみます。


  1. # テキストを読み込み、データフレームを作成
  2. t <- read.table('data.txt', header=T)
  3. # 山下さんの給与額を変更
  4. # t[[10, 'salary']] <- 40
  5. t[t$name=='山下',]$salary <- 40
  6. # 不偏標準偏差
  7. print(sd(t$salary))
  8. # 変動係数 = 標準偏差 / 平均
  9. print(sd(t$salary) / mean(t$salary))





# Rscript sample.R
[1] 6.733003
[1] 0.2171937




R言語 掲載記事のまとめ
関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ