################################################ #南風原(2002)第2章 ################################################ #Step1:中央値 p.19-20 ################################################ ##(a) 数値例の作成 ## 「x」という入れ物(オブジェクト)に5つの数字を入れる x <- c(4,9,14,16,15) ##(b) オブジェクトの確認 x ##(c) t(代表値の候補)=10の場合のT1 x-10 #それぞれの数字を10で引く abs(x-10) #abs()関数で絶対値を取る sum(abs(x-10)) #sum()関数で,それぞれの数値を足し合わせる ##(d) t(代表値の候補)=14(中央値)の場合のT1 median(x) #median()関数で,中央値を一応確認 x-14 #それぞれの数字を10で引く abs(x-14) #abs()関数で絶対値を取る sum(abs(x-14)) #sum()関数で,それぞれの数値を足し合わせる ################################################ #Step2:平均 p.20-23 ################################################ ##(a) 平均値の算出 ## sum()関数で,それぞれの数値を足し合わせて,標本サイズで割るか ## mean()関数で,平均値を算出してもよい 1/5*sum(x) mean(x) ##(b) t(代表値の候補)=11.6の場合のT2 x-11.6 #それぞれの数字を11.6で引く (x-11.6)^2 #^2で2乗する sum((x-11.6)^2) #sum()関数で足し合わせる ################################################ #Step3:逸脱行動データの代表値 p.24 ################################################ ##(a)作業フォルダを指定 setwd("C:/data/haebara/chap02") ##(b)データをcsvから読み込み,data1という名前をつける ##ラベルはcsvに書き込まれているので,header=Tと指定 data1 <- read.csv("http://blue.zero.jp/yokumura/R/haebara/chap1.csv",header=T) ##(c)読み込んだデータを確認 data1 ##(d)男性だけのデータ,女性だけのデータを作成 逸脱男 <- subset(data1,性別=="男",select=c(小6,中2,変化量)) 逸脱女 <- subset(data1,性別=="女",select=c(小6,中2,変化量)) 逸脱全体 <- subset(data1,select=c(小6,中2,変化量)) ##(e)apply(dataset,c(1=行,2=列),関数) ##を使って,平均と中央値を算出 apply(逸脱男, 2, mean) apply(逸脱男, 2, median) apply(逸脱女, 2, mean) apply(逸脱女, 2, median) apply(逸脱全体, 2, mean) apply(逸脱全体, 2, median) ##(f)by(dataset,質的変数,関数) ##を使えば,一発で求まる by(data1, data1$性別, summary) ################################################ #Step4:合成変数の平均 p.25 ################################################ ##(a)attachで,「逸脱男」の中の変数を指定できるようにする attach(逸脱男) ##(b)変化量の中央値 != (中2のときの中央値) - (小6のときの中央値) median(中2) median(小6) median(中2)- median(小6) median(変化量) ##(c)変化量の平均 = (中2のときの平均) - (小6のときの平均) mean(中2) mean(小6) mean(中2)-mean(小6) mean(変化量) ##(d)作業が終了したら,attachしたデータに対しdetachする detach(逸脱男) ################################################ #Step5:合併した集団における平均 p.26 ################################################ ##(a)全体の平均 = ( (男子の平均) + (女子の平均) )/ 2 mean(逸脱男$変化量) mean(逸脱女$変化量) (mean(逸脱男$変化量)+mean(逸脱女$変化量))/2 mean(逸脱全体$変化量) ##(b)全体の中央値 = ( (男子の中央値) + (女子の中央値) )/ 2 median(逸脱男$変化量) median(逸脱女$変化量) (median(逸脱男$変化量)+median(逸脱女$変化量))/2 median(逸脱全体$変化量) ################################################ #Step6:平均偏差 ################################################ ##(a) 数値例の作成 ## 「x」という入れ物(オブジェクト)に5つの数字を入れる x <- c(4,9,14,16,15) ##(b)2.8 式 x #xの確認 median(x) #xの中央値 x-median(x) #x-(xの中央値) abs(x-median(x)) #絶対値(x-(xの中央値)) sum(abs(x-median(x))) #2.8式 ##(c)2.9 式 中央値からの平均偏差 length(x) #データの総数 sum(abs(x-median(x)))/length(x) #2.9式 ##(d)2.10式 平均からの平均偏差 sum(abs(x-mean(x)))/length(x) #2.10式 ################################################ #Step7:分散と標準偏差 ################################################ ##(a)2.11 式 x #xの確認 x-mean(x) #x-(xの平均) (x-mean(x))^2 #(x-(xの平均))の2乗 sum((x-mean(x))^2) #2.11式 ##(b)2.12 式 分散 1/length(x)*sum((x-mean(x))^2) #2.12式 ##(c)2.13 式 標準偏差 sqrt(1/length(x)*sum((x-mean(x))^2)) #2.13式 ################################################ #Step8:逸脱行動データの散布度 ################################################ ##(a)中央値からの平均偏差関数の定義(md1と命名) md1 <- function(x){ #BeginFnc sum(abs(x-median(x)))/length(x) } #EndFnc ##(b)平均からの平均偏差関数の定義(md2と命名) md2 <- function(x){ #BeginFnc sum(abs(x-mean(x)))/length(x) } #EndFnc ##(c)分散関数の定義(svarと命名) svar <- function(x){ #BeginFnc 1/length(x)*sum((x-mean(x))^2) } #EndFnc ##(d)標準偏差関数の定義(ssd)と命名 ssd <- function(x){ #BeginFnc sqrt(1/length(x)*sum((x-mean(x))^2)) } #EndFnc ##(e)逸脱男の散布度 apply(逸脱男,2,md1) apply(逸脱男,2,md2) apply(逸脱男,2,svar) apply(逸脱男,2,var) apply(逸脱男,2,ssd) apply(逸脱男,2,sd) ##(f)逸脱女の散布度 apply(逸脱女,2,md1) apply(逸脱女,2,md2) apply(逸脱女,2,svar) apply(逸脱女,2,var) apply(逸脱女,2,ssd) apply(逸脱女,2,sd) ##(g)逸脱全体の散布度 apply(逸脱全体,2,md1) apply(逸脱全体,2,md2) apply(逸脱全体,2,svar) apply(逸脱全体,2,var) apply(逸脱全体,2,ssd) apply(逸脱全体,2,sd) ################################################ #Step9:合成変数の分散 ################################################ ##(a)逸脱全体の中の変数を指定できるように,attach関数を使う attach(逸脱全体) ##(b)合成変数の分散と共分散 svar(変化量) #変化量の分散 svar(小6)+svar(中2) #2時点での分散の和 ((svar(小6)+svar(中2))-svar(変化量))/2 #共分散 ##(c)作業が終了したら,attachしたデータに対しdetachする detach(逸脱全体) ################################################ #Step10:合併した集団における分散 ################################################ ##(a)2.19式を実行 (length(逸脱男$小6)*svar(逸脱男$小6) + length(逸脱女$小6)*svar(逸脱女$小6))/ (length(逸脱男$小6)+length(逸脱女$小6)) + (length(逸脱男$小6)*length(逸脱女$小6)*(mean(逸脱男$小6)-mean(逸脱女$小6))^2)/ (length(逸脱男$小6)+length(逸脱女$小6))^2 ##(b)svarで数値が一致することを確認 svar(逸脱全体$小6) ##(c)各群の分散の重み付き平均 1/2*(svar(逸脱男$小6)+svar(逸脱女$小6)) ################################################ #Step11:標準偏差の解釈 ################################################ ##(a)逸脱全体の中の変数を指定できるように,attach関数を使う attach(逸脱全体) ##(b)変化量の平均と標準偏差 ssd(変化量) mean(変化量) ##(c)平均 +- 標準偏差 ##と 平均 +- 2*標準偏差を作成 Lo1 <- mean(変化量)-ssd(変化量) Hi1 <- mean(変化量)+ssd(変化量) Lo2 <- mean(変化量)-2*ssd(変化量) Hi2 <- mean(変化量)+2*ssd(変化量) ##(d)人数の確認 subset(変化量,(Hi1 >=変化量 & 変化量 >= Lo1)) ##平均+-標準偏差のデータを抽出 length(subset(変化量,(Hi1 >=変化量 & 変化量 >= Lo1))) ##標本サイズを数える length(subset(変化量,(Hi1 >=変化量 & 変化量 >= Lo1)))/length(変化量)*100 subset(変化量,Hi2 >= 変化量 & 変化量 >= Lo2) length(subset(変化量,Hi2 >= 変化量 & 変化量 >= Lo2))/length(変化量)*100 ##(e)作業が終了したら,attachしたデータに対しdetachする detach(逸脱全体)