• 記述統計学
    • 平均値
    • 中央値
    • 最頻値
    • 分散
    • 母分散と不偏分散
    • Assignment
    • ・統計学は記述統計学 (descriptive statistics) と推測統計学 (inferential statistics) の二つに分類できる。
      ・記述統計学では、平均や分散(データの散らばり)などを使って、データの特徴を整理したり記述する。
      ・推測統計学では、母集団 (population) から標本 (sample) を無作為に抽出し、その標本によって得られた標本平均や不偏分散などの統計量を使って、母集団の母数(母平均や母分散)を検定し推定する
      ・推測統計学の基本的な考えは、母集団からランダムに抽出した標本を増やし、無限に試行を繰り返せば、全体の一部である標本から、巨大で未知の母集団を推測できる、ということ。
      ・推測統計学では、分析対象が確率分布すると考える。
      ・ここでは記述統計学との基礎とデータの上手な表し方である Data Visualization のスキルを習得する。  

      記述統計学

      ・集めたデータの平均、分散、標準偏差などを計算してその分布を明らかにすることで、データ傾向や性質をつかむための統計手法。
      ・まず、記述統計を表示するために、データを R に読み込む事が必要。
      ・Rを使ってデータ分析する上で重要なのは working directory を確かめること。
      ・次のコマンドで確かめることができる。

      getwd()
      [1] "/Users/asanomasahiko/Dropbox/statistics/class_materials/R"

      ・working directory にはデータ分析に必要なデータや script を保存するので、常に確認しておくことが大切。
      ・working directory を別の場所(例えば R というフォルダー)に変更したいときには setwd の後に指定したいパスを入力。

      setwd("/Users/asanomasahiko/Dropbox/R")

      ・RStudio を使う場合には分析テーマごとに新たなプロジェクトを作成すると working directry をチェックしなくても簡単にデータを読み込むことができるので大変便利。
      File から New Project を選び、指示に従って作成すると、RProject は project folder を自動的に working directory だと認識する。
      ・RStudio 右画面下部画面にあ るFile をクリックすると、作成した RProject フォルダー内にあるファイルが表示される。
      income.csv をダウンロードし、RProjctフォルダーに保存。
      ・RProject フォルダー内に income.csvファイルがあることを確認してから、次のコマンドを入力し、csv ファイルを読み込むために必要な readr package をインストールし、income.csv に income というデータフレーム名を付ける。

      library("readr")                           # readr をロードする
      income <- read_csv("income.csv")  # 読み込んだデータセットに income と名前をつける

      ・読み込んだデータセットの最初 (head) の 6 行と最後 (tail) の 6 行を表示する。

      head(income)
      # A tibble: 6 x 7
        id    sex      age height weight income generation
        <chr> <chr>  <int>  <dbl>  <dbl>  <dbl> <chr>     
      1 AU    male      70   160.   58.3   201. elder     
      2 AY    female    70   156.   44.0   487. elder     
      3 AB    male      69   173.   75.7   424. elder     
      4 AM    male      67   166.   69.3  1735. elder     
      5 M     male      66   171.   76.5   929. elder     
      6 CM    female    66   164.   67.3   397. elder     
      tail(income)
      # A tibble: 6 x 7
        id    sex      age height weight income generation
        <chr> <chr>  <int>  <dbl>  <dbl>  <dbl> <chr>     
      1 C     male      22   175.   82.6   163. young     
      2 AK    male      22   156.   67.5   199. young     
      3 X     male      21   167.   71.1   147. young     
      4 Z     male      21   172.   71.5    69. young     
      5 CQ    female    21   165.   56.3   134. young     
      6 CI    female    20   157.   55.6   211. young     

      ・次に income に含まれる変数名を全て表示させて変数を確認。

      names(income)
      [1] "id"         "sex"        "age"        "height"     "weight"    
      [6] "income"     "generation"

      ・観測数と変数の数を確認。

      dim(income)
      [1] 100   7

      ・観測数は 100 で、変数が 7 つあることがわかる。
      ・RStudio の右上にある environment タブをクリックしてもこれらの情報は確認できる。
      ・income の structure(構造)を表示させる。

      str(income)
      Classes 'tbl_df', 'tbl' and 'data.frame':   100 obs. of  7 variables:
       $ id        : chr  "AU" "AY" "AB" "AM" ...
       $ sex       : chr  "male" "female" "male" "male" ...
       $ age       : int  70 70 69 67 66 66 65 65 65 64 ...
       $ height    : num  160 156 173 166 171 ...
       $ weight    : num  58.3 44 75.7 69.3 76.5 67.3 41.5 53.5 46.8 52.7 ...
       $ income    : num  201 487 424 1735 929 ...
       $ generation: chr  "elder" "elder" "elder" "elder" ...
       - attr(*, "spec")=List of 2
        ..$ cols   :List of 7
        .. ..$ id        : list()
        .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
        .. ..$ sex       : list()
        .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
        .. ..$ age       : list()
        .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
        .. ..$ height    : list()
        .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
        .. ..$ weight    : list()
        .. .. ..- attr(*, "class")= chr  "collector_double" "collector"
        .. ..$ income    : list()
        .. .. ..- attr(*, "class")= chr  "collector_number" "collector"
        .. ..$ generation: list()
        .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
        ..$ default: list()
        .. ..- attr(*, "class")= chr  "collector_guess" "collector"
        ..- attr(*, "class")= chr "col_spec"

      ・このデータの構造は data.frame であり、7つの変数それぞれが整数 (integer) なのかファクター (factor) なのか、数字 (numeric) なのかがわかる。
      ・このデータの統計量のサマリーを表示させる。

      summary(income)
            id                sex                 age            height     
       Length:100         Length:100         Min.   :20.00   Min.   :148.0  
       Class :character   Class :character   1st Qu.:36.00   1st Qu.:158.1  
       Mode  :character   Mode  :character   Median :45.00   Median :162.9  
                                             Mean   :45.96   Mean   :163.7  
                                             3rd Qu.:57.25   3rd Qu.:170.2  
                                             Max.   :70.00   Max.   :180.5  
           weight          income        generation       
       Min.   :28.30   Min.   :  24.0   Length:100        
       1st Qu.:48.95   1st Qu.: 134.8   Class :character  
       Median :59.95   Median : 298.5   Mode  :character  
       Mean   :59.18   Mean   : 434.4                     
       3rd Qu.:67.33   3rd Qu.: 607.2                     
       Max.   :85.60   Max.   :2351.0                     

      ・ここでは変数ごとに次の情報が表示されている。

      • Min : Minmun value
      • 1st Qu. : 1st Quantile (25%)
      • Median : 中央値 (50%)
      • Mean : 平均値
      • 3rd Qu. : 3rd Quantile (75%)
      • Max : Maximum value

      ・データの分布の中心位置を示し、データを代表する代表値には平均値 (mean)中央値 (median)最頻値 (mode) がある。

      平均値

      変数 \(x\) の平均 \(\bar{x}\) は次の式で求めることができる: \[ \bar{x} = \frac{\sum_{i=1}^n x_i}{n}.\]

      ・早稲田大学政経学部の学生 10 人の TOEFL (iBT) の平均点が得られたとする。

      # c は combine の略。10個のデータを結合させて toefl という名前を付ける。
      toefl <- c(60, 80, 90, 80, 85, 60, 80, 90, 85, 100)

      ・作成したデータセットを表示させると、

      toefl
       [1]  60  80  90  80  85  60  80  90  85 100

      ・R を使って平均点を計算する方法① 最も手間の掛かる方法

      (60+80+90+80+85+60+80+90+85+100)/10
      [1] 81

      ・R を使って平均点を計算する方法② sum( ) を使う

      sum(toefl)
      [1] 810
      sum(toefl)/10
      [1] 81

      ・R を使って平均点を計算する方法③  mean( ) を使う

      mean(toefl)
      [1] 81

      hist( ) を使ってヒストグラムで表示すると、

      hist(toefl)

      ・「ヒストグラム」とは点数の度数がいくつかるか、柱と柱の隙間をあけずに図にしたもの。

      中央値

      ・中央値 (median)とはデータを大きさ順に並べた時、真ん中に位置する値のこと。
      ・例えば、データ数が 3 つ(奇数)で 1, 2, 3 なら真ん中の 2 が中央値。
      table( ) を利用して toefl のデータを大きさ順に並べた度数を調べると、

      table(toefl)
      toefl
       60  80  85  90 100 
        2   3   2   2   1 

      ・ケース数が 10 個の偶数なので、真ん中に位置する数字がない。 ・この場合は、真ん中の二つの値 (80 と 85) の平均値 (82.5) を中央値とする。
      ・中央値は median( ) を使っても求めることができる。

      median(toefl)
      [1] 82.5

      最頻値

      ・R には最頻値を求める関数がない。
      table( ) を利用して最頻値を求める。
      ・toefl データの場合の最頻値は 80 で平均値は 81。
      ・現実のデータでは、平均値、中央値、最頻値の三つが一致することはまれ。
      ・一般的には、データの代表値としては平均値を用いる。
      ・データに外れ値がある場合、平均値は外れ値の影響を受けやすい。
      ・データに極端な外れ値がある場合(個人の給料や貯金額など)には平均値ではなく最頻値を用いるのが適切。

      分散

      ・分散は次の式で求められる。

      \[分散 = \frac{\sum_{i=1}^N (個々のデータ - 平均)^2}{N}\]

      ・早稲田大学政経学部の学生 10 人の TOEFL(iBT) の平均点データである toefl の分散を求めてみる。
      ・toefl のデータは次の通りである。

      toefl
       [1]  60  80  90  80  85  60  80  90  85 100

      ・データ toefl の平均値を求めて toefl_mean と名前を付ける。

      toefl_mean <- mean(toefl)
      toefl_mean
      [1] 81

      ・平均からの偏差(個々のデータ - 平均)を求めて x と名前を付ける。

      x <- toefl - toefl_mean
      x
       [1] -21  -1   9  -1   4 -21  -1   9   4  19

      ・[1] の右隣にある数値 (-21) は個々のデータの先頭 (60) から平均値 (81) を引いた値だとわかる。
      ・次に、上で求めた「平均からの偏差」を二乗して x2 と名付ける。

      x2 <- x^2
      x2
       [1] 441   1  81   1  16 441   1  81  16 361

      ・「平均からの偏差」の二乗和を求め sum_x2 と名付ける。

      sum_x2 <- sum(x2)
      sum_x2
      [1] 1440

      ・これで分散を求める式の分子は完成。
      ・分母の数 (N) をデータ数として指定。

      N <- length(toefl)
      N
      [1] 10

      ・従って、分散は、 \[分散 = \frac{\sum_{i=1}^N (個々のデータ - 平均)^2}{N}\]

      \[= \frac{1440}{10}.\] \[= 144\]

      ・これがデータ toefl の分散である。 

      ・R 上では次のコマンドで分散を求めることができる。

      bunsan_toefl <- var(toefl) * (length(toefl) - 1) / length(toefl)
      bunsan_toefl
      [1] 144

      ・分散と標準偏差には次のような関係がある。  

      \[標準偏差 = \sqrt{分散}.\]

      ・従って、データ toefl の標準偏差は、分散の平方根をとって、

      sqrt(bunsan_toefl)
      [1] 12

      母分散と不偏分散

      ・母分散と不偏分散は使い分ける必要がある。
      母分散を使う場合:
      母集団全てのデータが手元にあり、そのデータ自体がどの程度散らばっているか知りたい時。
      不偏分散を使う場合:
      母集団データの一部だけが手元にあり、入手したデータの背後にある母集団データの散らばりを知りたい場合。

      【母分散】

      ・仮に、\(x\) が標本ではなく、母集団だとしよう。
      ・母集団の分散 \(\sigma^2\) (シグマ)は次の式で求められる。

      \[\sigma^2 = \frac{\sum_{i=1}^N (x_i - \mu)^2}{N}.\]

      \(μ\)(ミュー):母平均
      ・ここでvar()というコマンドを使うと、\(\sigma^2\)ではなく、不偏分散 \(u_x^2\) の値が出力されてしまう。
      R には母集団の分散 \(\sigma^2\) を求める機能がないため、\(\sigma^2\) は次の式を作って計算しなければならない。

      var(x) * (length(x) - 1) / length(x)
      [1] 144

      ・もしくは次の様に自分で関数を定義して、求めることも可能である。

      pop_var <- function(population) {
          return(sum((population - mean(population))^2) / length(population))
      }
      pop_var(x)
      [1] 144

      【不偏分散】
      \(x\) の不偏分散 \(u_x^2\) は次の式で計算できる:

      \[u_x^2 = \frac{\sum_{i=1}^n (x_i - \bar{x})^2}{N-1}.\]\(\bar{x}\) : 標本平均

      \(x\) の不偏分散を計算式を作って求めると

      sum((x - mean(x))^2) / (length(x) - 1) # var(x) で代替できる
      [1] 160

      ・標準偏差は分散の平方根なので、\(x\) の不偏標準偏差 \(u_x\) は次のコマンドで得られる。

      sqrt(var(x)) # sd(x) で代替できる
      [1] 12.64911

      ・ここで得られた不偏分散 \(var (x)\) と母分散 \(\sigma^2\) (シグマ)の値と比較してみると、

      # 不偏分散
      var(x)
      [1] 160
      # 母分散
      var(x) * (length(x) - 1) / length(x)
      [1] 144

      母集団の分散 \(\sigma^2\) の値より、不偏分散 \(u_x^2\) の値が大きい
      ・母集団の分散 \(\sigma^2\) を求める式では分母が N なのに、不偏分散 \(u_x^2\) を求める式では分母が N - 1 だから。

      Assignment

      faculty.salaries.csv からデータをダウンロードする。 

      Source: http://mo161.soci.ous.ac.jp/@d/DoDStat/facultys/facultys_dataJ.xml.
    1. 教授、准教授、助教授の給料における最小値、中央値、平均値、最大値を求めなさい。(10点)

    2. 変数 full が母集団だとして、母分散から標準偏差を求めなさい。(10点)

    3. 変数 associate が母集団だとして、母分散から標準偏差を求めなさい。 (10点)

    4. Q2 と Q3 からどのようなことがいえるか簡単に説明しなさい。(10点)

    5. 変数 full と associate がサンプルだとして、それぞれの不偏標準偏差を求めなさい。 (10点)
    6. 教授、准教授、助教授の平均給料を箱ひげ図を使って表示しなさい。(50点)



    References



    Back to Class Materials