理学療法士がまとめたノート

統計学備忘録(R言語のメモ)

since2016 ときどきTEXのメモ

subset関数で層別化したデータセット

以下のようなデータセットを男女で層別したセットに変更します

id   年齢  性 身長
1  39162.6
2  39161.4
3  41174.1
4  41154.7
5  42184.7
6  43169.3
7  43163.2
8  43164.4
9  44167.8
10 44168.5
11 44154.8
12 45158.5
13 45162.9
14 45161.4
15 45165.9
16 46171.4
17 46172.6
18 47167.6
19 47171.5
20 48166.4
21 48169.2
22 48165.3
23 48167.2
24 48170.2
31 50153.6
32 50163.6
34 51156.6
35 51152.4
36 52146.8
37 52160.7

上記のデータをコピーしてRにペーストします

data <- read.table("clipboard", header=T)

男性のみのデータセット data_m、女性のみのデータセット data_f

data_m <- subset(data, data$=="男")
data_f <- subset(data, data$=="女")

男性で身長160cm台のデータセット data_m_160

mh01 <- subset( data,=="男" & 身長 >= 160 & 身長 < 170 )

男性で身長165cm以下と170cm以上の群

mh02 <- subset( data,=="男" & 身長 <= 165 | 身長 >= 170 )

男性で身長160cm台の人数
それぞれのデータセットのn(行数)を確認する

nrow(mh01);nrow(mh02)

身長の差の検定 年齢40未満 vs 年齢48より上

d45 <- subset(data,年齢<45)
d48 <- subset(data,年齢>48)
t.test(d45$身長,d48$身長)
#subset使用せずに、次のように書くことも可能
t.test(data[data[,2]<45,4],data[data[,2]>48,4])

データフレームの列を入れ替えて、欠損値のある行を除外する

忘れないうちに書いときます
欠損値のあるデータセットを用意します

x <- LETTERS[1:10]
y <- c(1,2,NA,2,4,NA,5,1,2,5)
z <- c(1,2,2,1,1,2,2,1,1,1)
xyz <- data.frame(x,y,z)

   x  y  z
1  A  1  1
2  B  2  2
3  C NA  2
4  D  2  1
5  E  4  1
6  F NA  2
7  G  5  2
8  H  1  1
9  I  2  1
10 J  5 NA

Z列とY列を入れ替えます

a <- data.frame(xyz[,1])
b <- data.frame(xyz[,2])
c <- data.frame(xyz[,3])
xzy <- data.frame(a,c,b)
colnames(xzy) <- c("x","z","y")

   x  z  y
1  A  1  1
2  B  2  2
3  C  2 NA
4  D  1  2
5  E  1  4
6  F  2 NA
7  G  2  5
8  H  1  1
9  I  1  2
10 J NA  5

欠損値を含む行を全て除外します

xzy_cc <- complete.cases(data.frame(xzy))  #欠損値を含む行にFALSEを返す関数・・・だからxzy_ccは完璧(complete)な行
dataset <- xzy[xzy_cc,]

  x z y
1 A 1 1
2 B 2 2
4 D 1 2
5 E 1 4
7 G 2 5
8 H 1 1
9 I 1 2

この処理は暗記してたがよさそうです

コピーした1行のデータをベクトルに変換

以下のようなデータをコピーしてRのベクトルに変換する方法です

10 12 14 15 18

まず以下のように入力します

x = scan()

するとコンソールに次のように表示されます

> x = scan()
1: 

この1: の横に10 12 14 15 18をペーストして、enterを2回

> x = scan()
1: 10 12 14 15 18
6: 
Read 5 items

これでベクトルに変換できました

str(x)
 num [1:5] 10 12 14 15 18

ノンパラメトリック 相関係数

     [,1] [,2] [,3]
[1,]   27   14    5
[2,]   10   17   26
[3,]    5   12   50

上記の分割表から行の順序スコアと列の順序スコアを算出してデータセットを作成します

#RANK 
xr1 <- c(rep(23.5,46),rep(73,53),rep(133,67))
xc1 <- c(rep(21.5,27),rep(64,14),rep(125,5),rep(21.5,10),rep(64,17),
         rep(125,26),rep(21.5,5),rep(64,12),rep(125,50))

データのイメージ

xr1_xc1 <- data.frame(xr1, xc1)

相関係数を求めます

cor_r_p <- cor.test(xr1,xc1,method = "pearson") #ピアソン
cor_r_s <- cor.test(xr1,xc1,method = "spearman") #スピアマン

上記の分割表から表スコアを0,1,2としてデータセットを作成します

#TABLE 
xr2 <- c(rep(0,46),rep(1,53),rep(2,67))
xc2 <- c(rep(0,27),rep(1,14),rep(2,5),rep(0,10),rep(1,17),
         rep(2,26),rep(0,5),rep(1,12),rep(2,50))

データセットにイメージ

xr2_xc2 <- data.frame(xr2, xc2)

表スコアから相関係数を求めます

cor_t_p <- cor.test(xr2,xc2,method = "pearson") #ピアソン
cor_t_s <- cor.test(xr2,xc2,method = "spearman") #スピアマン

Rstudioの小ネタ (パッケージやファイルの保存方法)

Rstudioを閉じても、PC再起動してもファイルの読み込みやインストールしたパッケージは残せます (ただしパッケージは休んでいますので、起動するときにはlibraryで起こしましょう)

データ処理する前に必ず行う作業は以下の通りです
まずRstudioを起動させた状態で・・・
FileメニュからNewProject → NewProject → NewProjectと進んでいきます
Projectの名前を適当に書いてください(例:test001)、次に場所をしてしてください(as you like).

以下のように一つのフォルダの中に「---.Rhistory」と「---.Rproj」が入ってたら OK
データファイルも同じフォルダに収納します
f:id:yoshida931:20180604094238p:plain

次回から「---.Rproj」をダブルクリックしてRstudioを起動させてください
前回までに取り込んだデータは右上に表示され、そのまま使用可能です.
また右下に同じフォルダにあるデータファイルが表示されます.ここから直接データを取り込むこともできます.
またインストールしたパッケージも記憶されていますので、library( )で起動させるだけで使用できます.
f:id:yoshida931:20180604094641p:plain