0. 先週のアンケートから: 22名

1. 欠損値を含んだデータに対する相関係数

[補足] 必要に応じてデータを読み込む。

# ディレクトリの移動。必須ではない。個々人の設定に応じて。
setwd("D:/home_sub3/R_Dir/KougiDS24")  # ディレクトリを移動
# list.files()      # ファイル・ディレクトリ一覧を表示

# データの読み込み
Student24<-read.csv("StudAll24b.csv", skip=5, header=TRUE, na.strings="")

言うまでもなく、相関係数は2つの変量間の関係を示す指標である。 欠損値をどのように扱うかで、相関係数の計算方法は2通りある。 3変量以上の変量に対する相関係数を計算する場合、 何れのか変量に欠損値を含んでいるサンプルは、 当該サンプルを除外する方法(計算方法1=完全データのみで算出、前回紹介済み)と、 対となる変量の何れかが欠損値であれば、その対を除外する方法(計算方法2=対ごとに除外) の2通りである。 以下はそれぞれの指定方法である。両者の違いを意識して使い分けてほしい。

# 相関係数
cor(Student24$Height, Student24$Weight) # 欠損値を含んでいると計算できない
## [1] NA
cor(Student24[3:5])
##        Height Weight Chest
## Height      1     NA    NA
## Weight     NA      1    NA
## Chest      NA     NA     1
# 相関係数
cor(Student24[3:5], 
      use="complete.obs")  # 1変量でも欠損値を含んでいるサンプルはサンプル自身を除外(計算方法1)
##           Height    Weight     Chest
## Height 1.0000000 0.6866926 0.3005029
## Weight 0.6866926 1.0000000 0.4546247
## Chest  0.3005029 0.4546247 1.0000000
cor(Student24[3:5], 
      use="pairwise.complete.obs")  # 欠損値を含んでいる対を除外(計算方法2)
##           Height    Weight     Chest
## Height 1.0000000 0.6514913 0.3005029
## Weight 0.6514913 1.0000000 0.4546247
## Chest  0.3005029 0.4546247 1.0000000

*散布図行列

相関係数は変数間の関係を数値的に把握する方法であった。 変数間の相関係数を視覚的に把握する方法として散布図があり、 これを相関行列と同様に行列状に並べたものを「散布図行列」と呼ぶが、 この場合は、上記の「計算方法2」と同様に対で除外して表示する。

plot(Student24[3:5])  # 散布図行列(変量ごとに欠損値を除外して描画する)

散布図行列は複数変量の関係を視覚的に把握するのに優れた手法であり、 3変量以上でも描画できる。 データ分析を開始する初期段階でまずは全体像を掴もうとするような際には 有効に機能する。

【蛇足】2021年(R3)1月に実施された、大学入学共通テスト(初年度、第1日程)の「 数学I 」、「 数学I・数学A 」には、産業構造のデータを題材に散布図行列の設問が出題されていたのだが、 残念なことに、散布図行列であると言及した解説文にはまだ出逢えていない。

plot(DNC21[3:5])  # 散布図行列(変量ごとに欠損値を除外して描画してくれる)

plot(DNC21[6:8])  # 散布図行列(変量ごとに欠損値を除外して描画してくれる)

2. 条件による一部データの抽出

2.1. 欠損値を含まないサンプルの抽出

特定の変量(例: 仕送り額)に注目して、当該変量を回答している集団を抽出することを考える。 いくつかの方法があろうが、今回は、まず、その変量が欠損値となっているサンプルを 抽出し、その後に、「欠損値となっていないサンプルだけ」を抽出する方法で 実現してみる。 その際には、少しトリッキーな表現が用いられ、 一種パズルを組み合わせていくような感覚が求められるかもしれない。

# 仕送り額を観てみよう
summary(Student24$Remittance)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0       0   20000   35523   50000  350000     154
Student24$Remittance

  [1]  10000      0  10000  50000  50000  60000  60000      0  40000     NA
 [11]     NA  20000      0  60000     NA  35000  60000  20000  45000      0
 [21] 125000      0  10000  70000  30000      0 120000      0  50000  30000
 [31]     NA   9000  30000 180000  60000  70000 100000  20000     NA      0
 [41]  35000  10000      0  30000  25000  40000  45000      0     NA      0
 [51]      0  20000  30000  50000  60000  20000      0  20000  30000     NA
 [61]  30000     NA     NA  25000      0     NA     NA  27500  30000      0
 [71]      0 100000  30000  60000      0     NA     NA   8000      0  80000
 [81]      0  30000      0  50000  50000      0 150000      0      0      0
 [91]  60000      0      0      0      0   5000  20000 150000  20000  65000
 [ reached getOption("max.print") -- omitted 692 entries ]
# 仕送り額が無回答(NA)の者を抽出
Remi_NA<-is.na(Student24$Remittance) # 仕送り額がNAの者にTRUEを返す
Remi_NA

  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
 [13] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [25] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
 [37] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [49]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
 [61] FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
 [73] FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [97] FALSE FALSE FALSE FALSE
 [ reached getOption("max.print") -- omitted 692 entries ]
Student24[Remi_NA,]   # 仕送り額が無回答(NA)の者だけを抽出

   No  Sex Height Weight Chest Residence Remittance Carrier   Fee
10 10    F  150.0   47.0    NA    自宅生         NA    <NA>    NA
11 11    F  151.0   42.0    NA    自宅生         NA    <NA>  7700
15 15    F  151.0     NA    NA    下宿生         NA    <NA>    NA
31 31    F  154.0   46.0    NA      <NA>         NA    <NA>    NA
39 39    F  155.0     NA    NA    自宅生         NA    <NA>    NA
49 49    F  156.0     NA    NA    下宿生         NA    <NA>    NA
60 60    F  157.0   51.0    NA    自宅生         NA    <NA>    NA
62 62 <NA>  157.0   55.0    NA    自宅生         NA    <NA>    NA
63 63    F  157.0   57.0    NA    自宅生         NA    <NA>    NA
66 66    F  157.8   52.0    83    自宅生         NA    <NA> 10000
67 67    F  158.0   45.5    NA    自宅生         NA  DoCoMo 10000
 [ reached 'max' / getOption("max.print") -- omitted 143 rows ]

[演習2.1-1] 上記の手順で、仕送り額を「回答していない者だけ」を抽出することができた。では、仕送り額を「回答した者だけ」を抽出するにはどのような指定をすれば良いであろうか。


Student24[!Remi_NA,]   # 欠損値を含まない(回答した者だけ)データの抽出

その上で、以下のプログラムの記述方法と、それらの実行結果に納得できるか? 一種パズル的な要素が入っていると思うので、じっくり理解してほしい。
    mean(Student24$Remittance)             # 欠損値を含む全データに対して平均値を求める
    ## [1] NA
    mean(Student24[Remi_NA,]$Remittance)   # 欠損値を含むデータに対して平均値を求める
    ## [1] NA
    mean(Student24[!Remi_NA,]$Remittance)  # 欠損値を含むデータを除外して平均値を求める
    ## [1] 35523.26
    summary(Student24$Remittance)          # Remittanceを概観
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
    ##       0       0   20000   35523   50000  350000     154

2.2. ある閾値を超えたサンプルの抽出

先週の4節に示した「演習4-2」では身長以外の変量の分析をお願いした。 その中の小遣い額(Remittance)を分析していて 皆さんの中にはやや違和感というか驚かれた方もおられるのではないか。

summary(Student24$Remittance)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0       0   20000   35523   50000  350000     154
hist(Student24$Remittance, right=FALSE, 
     breaks = seq(0,350000,25000), ylim = c(0,350),
     main="Histgram of Remittance")   # ヒストグラム
abline(h=seq(0,350,50), lty=3)

boxplot(Student24$Remittance, 
        horizontal=T, main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,350000,50000), lty=3)

Rのプログラムを作成することに一生懸命になるのは当然だと思うが、 得られた結果の吟味も重要である。

得られた結果から35万円も小遣いをもらっている者がいる。他にも25万円以上もらっている学生も複数いるではないか!! なんとリッチなことよ、と。

このようないわば「外れ値」に相当するものは、 記入ミスや入力ミスの可能性もあり個票に戻って精査する必要がある。 ひょっとすると、35万円だったのは3.5万円だったり、30万円だったのは3.0万円であったかもしれないので、もし、単なる入力ミスであればデータを修正する必要がある。

しかし、実はこの35万円と回答した学生は社会人学生であり、想像するに給与額を回答してくれたようであった。

そこで、このように「外れ値」に対して我々が取るべき手段として少なくとも2通り考えられる。

2.3. 外れ値を欠損値として扱う(外れ値に欠損値を代入する)

外れ値は集計から除外するという意味で、欠損値(NA)を割り当てることがある。 このことにより、データ自身は削除されないが当該変量だけは分析から除外されることになる。 処理前後で欠損データが増えたことを確認せよ。 ここでは25万円を越える小遣い額を示した者に欠損値を割り当てることを例に説明する。

# 仕送り額が25万円を超える者を抽出
Remi_Over25<-Student24$Remittance > 250000
Remi_Over25

  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE    NA    NA FALSE
 [13] FALSE FALSE    NA FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [25] FALSE FALSE FALSE FALSE FALSE FALSE    NA FALSE FALSE FALSE FALSE FALSE
 [37] FALSE FALSE    NA FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [49]    NA FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE    NA
 [61] FALSE    NA    NA FALSE FALSE    NA    NA FALSE FALSE FALSE FALSE FALSE
 [73] FALSE FALSE FALSE    NA    NA FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [97] FALSE FALSE FALSE FALSE
 [ reached getOption("max.print") -- omitted 692 entries ]
Student24$Remittance[Remi_Over25]       # NAか25万を超える者のリスト
##   [1]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  [11]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  [21]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  [31]     NA     NA     NA     NA     NA     NA     NA     NA     NA 300000
##  [41]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  [51]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  [61]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  [71]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
##  [81]     NA     NA     NA     NA     NA 350000     NA     NA     NA     NA
##  [91]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
## [101]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
## [111]     NA     NA     NA     NA     NA 300000     NA     NA     NA     NA
## [121]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
## [131]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
## [141]     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
## [151]     NA     NA     NA     NA     NA     NA     NA
Student24[Remi_Over25,]                 # 対象者抽出

      No  Sex Height Weight Chest Residence Remittance Carrier Fee
NA    NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.1  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.2  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.3  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.4  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.5  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.6  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.7  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.8  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.9  NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
NA.10 NA <NA>     NA     NA    NA      <NA>         NA    <NA>  NA
 [ reached 'max' / getOption("max.print") -- omitted 146 rows ]
Student24tmp<-Student24                   # 元データを壊したくないので(コピー)
Student24tmp$Remittance[Remi_Over25]<-NA  # NAを代入
Student24tmp$Remittance

  [1]  10000      0  10000  50000  50000  60000  60000      0  40000     NA
 [11]     NA  20000      0  60000     NA  35000  60000  20000  45000      0
 [21] 125000      0  10000  70000  30000      0 120000      0  50000  30000
 [31]     NA   9000  30000 180000  60000  70000 100000  20000     NA      0
 [41]  35000  10000      0  30000  25000  40000  45000      0     NA      0
 [51]      0  20000  30000  50000  60000  20000      0  20000  30000     NA
 [61]  30000     NA     NA  25000      0     NA     NA  27500  30000      0
 [71]      0 100000  30000  60000      0     NA     NA   8000      0  80000
 [81]      0  30000      0  50000  50000      0 150000      0      0      0
 [91]  60000      0      0      0      0   5000  20000 150000  20000  65000
 [ reached getOption("max.print") -- omitted 692 entries ]
summary(Student24tmp$Remittance)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0       0   20000   34195   50000  200000     157
boxplot(Student24tmp$Remittance, 
        horizontal=T, main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,350000,50000), lty=3)

この処理により、欠損値が3例増え、また、分布も最高値が20万円に抑えられたことが判る。

2.4. ある閾値以下のサンプルの抽出

もう一つの方策として、一定の条件に合致しないサンプルはデータから除外してしまい、 以後の解析に用いない方法もある。 例えば今回の例であれば、仕送り額が25万円以下の者を抽出して、 新たな変数に割り当てている。こうすることで 毎回除外の式を書かなくても良くなり、式が読み易くなる。 処理前後でヒストグラムと箱ひげ図が変化したことを確認せよ。

# 仕送り額が25万円以下の者を抽出
Remi_Less25<-Student24$Remittance <= 250000
Remi_Less25

  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE   NA   NA TRUE TRUE TRUE
 [15]   NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [29] TRUE TRUE   NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE   NA TRUE TRUE TRUE
 [43] TRUE TRUE TRUE TRUE TRUE TRUE   NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [57] TRUE TRUE TRUE   NA TRUE   NA   NA TRUE TRUE   NA   NA TRUE TRUE TRUE
 [71] TRUE TRUE TRUE TRUE TRUE   NA   NA TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [85] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
 [99] TRUE TRUE
 [ reached getOption("max.print") -- omitted 692 entries ]
Student24$Remittance[Remi_Less25]  # 条件に合致する対象者の仕送り額

  [1]  10000      0  10000  50000  50000  60000  60000      0  40000     NA
 [11]     NA  20000      0  60000     NA  35000  60000  20000  45000      0
 [21] 125000      0  10000  70000  30000      0 120000      0  50000  30000
 [31]     NA   9000  30000 180000  60000  70000 100000  20000     NA      0
 [41]  35000  10000      0  30000  25000  40000  45000      0     NA      0
 [51]      0  20000  30000  50000  60000  20000      0  20000  30000     NA
 [61]  30000     NA     NA  25000      0     NA     NA  27500  30000      0
 [71]      0 100000  30000  60000      0     NA     NA   8000      0  80000
 [81]      0  30000      0  50000  50000      0 150000      0      0      0
 [91]  60000      0      0      0      0   5000  20000 150000  20000  65000
 [ reached getOption("max.print") -- omitted 689 entries ]
Student24[Remi_Less25,]            # 条件に合致する対象者のサンプルの抽出

     No  Sex Height Weight Chest Residence Remittance  Carrier  Fee
1     1    F  145.0     38    NA    自宅生      10000     <NA>   NA
2     2    F  145.5     42    76    自宅生          0     <NA> 3700
3     3    F  146.7     41    85    自宅生      10000 Vodafone 6000
4     4    F  148.0     42    NA    自宅生      50000     <NA>   NA
5     5    F  148.0     43    80    自宅生      50000   DoCoMo 4000
6     6    F  148.9     NA    NA    自宅生      60000     <NA>   NA
7     7    F  149.0     45    NA    下宿生      60000     <NA>   NA
8     8    F  150.0     43    82    自宅生          0     <NA> 4980
9     9    F  150.0     46    86      <NA>      40000     <NA>   NA
NA   NA <NA>     NA     NA    NA      <NA>         NA     <NA>   NA
NA.1 NA <NA>     NA     NA    NA      <NA>         NA     <NA>   NA
 [ reached 'max' / getOption("max.print") -- omitted 778 rows ]
dim(Student24)                     # データ全体のデータサイズ
## [1] 792   9
dim(Student24[Remi_Less25,])       # 抽出したデータのデータサイズ
## [1] 789   9
summary(Student24$Remittance)                # 元データの概要
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0       0   20000   35523   50000  350000     154
summary(Student24$Remittance[Remi_Less25])   # 抽出したデータの概要
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##       0       0   20000   34195   50000  200000     154
hist(Student24$Remittance[Remi_Less25], right=FALSE, 
     breaks = seq(0,350000,25000), ylim = c(0,350),
     main="Histgram of Remittance")   # ヒストグラム
abline(h=seq(0,350,50), lty=3)

boxplot(Student24$Remittance[Remi_Less25], 
        horizontal=T,  main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,200000,50000), lty=3)

毎回この式を指定するのが面倒だと感じ、 加えて、以降の分析において、25万円を超えるサンプルが除外されたものを 恒久的に利用したい場合には、新しい変数に割り当てて利用する手もある。 25万円を超えるサンプルが除外された図となっていることを確認せよ。

Student24_RemiLess25 <- Student24[Remi_Less25,] # 以後恒久的に使いたいなら新しい変数に割り当てる
dim(Student24_RemiLess25)      # 新しい変数のデータサイズ
## [1] 789   9
summary(Student24_RemiLess25)  # 新しい変数の要約統計量
##        No            Sex                Height          Weight      
##  Min.   :  1.0   Length:789         Min.   :145.0   Min.   : 35.00  
##  1st Qu.:192.5   Class :character   1st Qu.:164.0   1st Qu.: 53.38  
##  Median :390.0   Mode  :character   Median :170.0   Median : 60.00  
##  Mean   :383.2                      Mean   :168.8   Mean   : 59.88  
##  3rd Qu.:566.5                      3rd Qu.:174.0   3rd Qu.: 65.00  
##  Max.   :769.0                      Max.   :187.0   Max.   :100.00  
##  NA's   :154                        NA's   :169     NA's   :217     
##      Chest         Residence           Remittance       Carrier         
##  Min.   : 30.50   Length:789         Min.   :     0   Length:789        
##  1st Qu.: 82.00   Class :character   1st Qu.:     0   Class :character  
##  Median : 87.00   Mode  :character   Median : 20000   Mode  :character  
##  Mean   : 86.17                      Mean   : 34195                     
##  3rd Qu.: 90.00                      3rd Qu.: 50000                     
##  Max.   :112.00                      Max.   :200000                     
##  NA's   :573                         NA's   :154                        
##       Fee       
##  Min.   :    0  
##  1st Qu.: 3000  
##  Median : 4500  
##  Mean   : 5434  
##  3rd Qu.: 7000  
##  Max.   :40000  
##  NA's   :420
hist(Student24_RemiLess25$Remittance, right=FALSE, 
     breaks = seq(0,350000,25000), ylim = c(0,350),
     main="Histgram of Remittance")   # ヒストグラム
abline(h=seq(0,350,50), lty=3)

boxplot(Student24_RemiLess25$Remittance, 
        horizontal=T,  main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,200000,50000), lty=3)

【思い】欠損値の取り扱いを習得してほしい。

この節を通して多少理解できたかと思うが、Rにおいては欠損値(NA)をどのように扱うかに 注意しながら操作を行う必要がある。この取り扱いを疎かにしていると、目的の分析が行えないので、心して習得してほしい。

81. 参考

このページで取り扱ったプログラムだけを抜き出して以下に列挙しておく。


## 0. 先週のアンケートから
# ディレクトリの移動。必須ではない。個々人の設定に応じて。
setwd("D:/home_sub3/R_Dir")  # ホームディレクトリに移動(Set Working Directory)
getwd()             # 現在のディレクトリ位置を表示
list.files()        # ファイル・ディレクトリ一覧を表示
setwd("KougiDS24")  # ディレクトリを移動
list.files()        # ファイル・ディレクトリ一覧を表示

# ディレクトリの移動。必須ではない。個々人の設定に応じて。
setwd("D:/home_sub3/R_Dir/KougiDS24")  # ディレクトリを移動
# list.files()      # ファイル・ディレクトリ一覧を表示

# データの読み込み
Student24<-read.csv("StudAll24b.csv", skip=5, header=TRUE, na.strings="")

dim(Student24)
colnames(Student24)
Student24[1:5,]

## 1. 欠損値を含んだデータに対する相関係数
# 相関係数
cor(Student24$Height, Student24$Weight)  # 欠損値を含んでいると計算できない

# 相関係数
cor(Student24[3:5], 
      use="complete.obs")  # 1変量でも欠損値を含んでいるサンプルはサンプル自身を除外(計算方法1)

cor(Student24$Height, Student24$Weight, 
      use="pairwise.complete.obs")  # 欠損値を含んでいる対を除外(計算方法2、変数の指定方法1)

cor(Student24[3:5], 
      use="pairwise.complete.obs")  # 欠損値を含んでいる対を除外(計算方法2、変数の指定方法2)

plot(Student24[3:5]) # 散布図行列(変量ごとに欠損値を除外して描画する)

## 2.1. 欠損値を含まないサンプルの抽出
# 仕送り額を観てみよう
summary(Student24$Remittance)
Student24$Remittance

# 仕送り額が無回答(NA)の者を抽出
Remi_NA<-is.na(Student24$Remittance) # 仕送り額がNAの者にTRUEを返す
Remi_NA

Student24[Remi_NA,]   # 仕送り額が無回答(NA)の者だけを抽出

## [演習2.1-1] 
Student24[!Remi_NA,]   # 欠損値を含まない(回答した者だけ)データの抽出
mean(Student24$Remittance)             # 欠損値を含む全データに対して平均値を求める
mean(Student24[Remi_NA,]$Remittance)   # 欠損値を含むデータに対して平均値を求める
mean(Student24[!Remi_NA,]$Remittance)  # 欠損値を含むデータを除外して平均値を求める
summary(Student24$Remittance)          # Remittanceを概観

## 2.2. ある閾値を超えたサンプルの抽出
summary(Student24$Remittance)
hist(Student24$Remittance, right=FALSE, 
     breaks = seq(0,350000,25000), ylim = c(0,350),
     main="Histgram of Remittance")   # ヒストグラム
abline(h=seq(0,350,50), lty=3)

boxplot(Student24$Remittance, 
        horizontal=T, main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,350000,50000), lty=3)

## 2.3. 外れ値を欠損値として扱う(外れ値に欠損値を代入する)
# 仕送り額が25万円を超える者を抽出
Remi_Over25<-Student24$Remittance > 250000
Remi_Over25

Student24$Remittance[Remi_Over25]        # NAか25万を超える者のリスト

Student24[Remi_Over25,]                  # 対象者抽出

Student24tmp<-Student24                    # 元データを壊したくないので
Student24tmp$Remittance[Remi_Over25]<-NA   # NAを代入
Student24tmp$Remittance

summary(Student24tmp$Remittance)

boxplot(Student24tmp$Remittance, 
        horizontal=T, main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,350000,50000), lty=3)

## 2.4. ある閾値以下のサンプルの抽出
# 仕送り額が25万円以下の者を抽出
Remi_Less25<-Student24$Remittance <= 250000
Remi_Less25

Student24$Remittance[Remi_Less25]  # 条件に合致する対象者の仕送り額
Student24[Remi_Less25,]            # 条件に合致する対象者のサンプルの抽出

dim(Student24)                # データ全体のデータサイズ
dim(Student24[Remi_Less25,])  # 抽出したデータのデータサイズ

summary(Student24$Remittance)                # 元データの概要
summary(Student24$Remittance[Remi_Less25])   # 抽出したデータの概要

hist(Student24$Remittance[Remi_Less25], right=FALSE, 
     breaks = seq(0,350000,25000), ylim = c(0,350),
     main="Histgram of Remittance")   # ヒストグラム
abline(h=seq(0,350,50), lty=3)

boxplot(Student24$Remittance[Remi_Less25], 
        horizontal=T,  main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,200000,50000), lty=3)

Student24_RemiLess25 <- Student24[Remi_Less25,] # 以後恒久的に使いたいなら新しい変数に割り当てる
dim(Student24_RemiLess25)        # 新しい変数のデータサイズ
summary(Student24_RemiLess25)    # 新しい変数の要約統計量

hist(Student24_RemiLess25$Remittance, right=FALSE, 
     breaks = seq(0,350000,25000), ylim = c(0,350),
     main="Histgram of Remittance")   # ヒストグラム
abline(h=seq(0,350,50), lty=3)

boxplot(Student24_RemiLess25$Remittance, 
        horizontal=T,  main="boxplot of Remittance")   # 箱ひげ図
abline(v=seq(0,200000,50000), lty=3)