1つのデータセットにあるすべての独立変数・従属変数の組み合わせで単変量解析を実施する。



ryamadaの遺伝学・遺伝統計学メモ - Rにて変数タイプ別の単変量解析からの続き

関数名:singleVarAnalysis

引数:

1 データフレーム

2 独立変数ベクター

3 従属変数ベクター

4 変数タイプベクター

5 変数名ベクター

6 出力ファイル

1 データフレーム

ryamadaの遺伝学・遺伝統計学メモ - Rにて変数タイプ別の単変量解析における、data1。

2 独立変数ベクター

今、変数が6個あり、その1,2,3,4,5,6のうち、1,2,3が独立変数のとき、独立変数ベクター i.var<-c(1,2,3)とする。

3 従属変数ベクター

今、4,5,6が従属変数のとき、従属変数ベクター d.var<-c(4,5,6)とする。

4 変数タイプベクター

1,2,3,4,5,6個の変数のうち、1,4がboolean,2,5がcategorical,3,6がquantitativeなので、変数タイプベクター type.var<-c(1,2,3,1,2,3)とする。

5 変数名ベクター

6個の変数の名前name.var<-c("b1","c1","q1","p1","p2","p3")のようにする。

6 出力ファイル

出力ファイル名を文字列で与える。

functionの入力


singleVarAnalysis<-function(df,ind,dpn,type,name,out){

data1<-df
i.var<-ind
d.var<-dpn
type.var<-type
name.var<-name
out<-out

outfile<-file(out,"w")
string<-""
for(i in 1:length(d.var)){
for(j in 1:length(i.var)){
i.type<-i.var[j]
d.type<-d.var[i]
if(type.var[i.type]==1){
if(type.var[d.type]==1){
string<-c(string,name.var[i.type],name.var[d.type],type.var[i.type],type.var[d.type],"Fisher's Exact Test")
string<-c(string,(paste(fisher.test(table(data1[, i.type], data1[, d.type])))),"\n")
}else if(type.var[d.type]==2){
string<-c(string,name.var[i.type],name.var[d.type],type.var[i.type],type.var[d.type],"Fisher's Exact Test")
string<-c(string,(paste(fisher.test(table(data1[, i.type], data1[, d.type])))),"\n")
}else if(type.var[d.type]==3){
string<-c(string,name.var[i.type],name.var[d.type],type.var[i.type],type.var[d.type],"student't T-test")
data1[,i.type]<-factor(data1[,i.type])
string<-c(string,(paste(t.test(data1[,d.type]~data1[,i.type],data1))),"\n")
}
}else if(type.var[i.type]==2){
if(type.var[d.type]==1){
string<-c(string,name.var[i.type],name.var[d.type],type.var[i.type],type.var[d.type],"Fisher's Exact Test")
string<-c(string,(paste(fisher.test(table(data1[, i.type], data1[, d.type])))),"\n")
}else if(type.var[d.type]==2){
string<-c(string,name.var[i.type],name.var[d.type],type.var[i.type],type.var[d.type],"Fisher's Exact Test")
string<-c(string,(paste(fisher.test(table(data1[, i.type], data1[, d.type])))),"\n")
}else if(type.var[d.type]==3){
data1[,i.type]<-factor(data1[,i.type])
string<-c(string,name.var[i.type],name.var[d.type],type.var[i.type],type.var[d.type],"ANOVA")
string<-c(string,(paste(anova(lm(data1[,d.type]~data1[,i.type])))),"\n")
}
}else if(type.var[i.type]==3){
if(type.var[d.type]==1){

}else if(type.var[d.type]==2){

}else if(type.var[d.type]==3){
string<-c(string,name.var[i.type],name.var[d.type],type.var[i.type],type.var[d.type],"Pearson's correlation")
string<-c(string,(paste(cor.test(data1[,i.type],data1[,d.type]))),"\n")
}
}
}
}
writeLines( string,outfile,sep="\t")

close(outfile)

}



今、上述したdata1,i.var,d.var,type.var,name.var,"out.txt"を引数とすると、コマンドは


>singleVarAnalysis(data1,i.var,d.var,type.var,name.var,"out.txt")

となり、その結果できる"out.txt"ファイルは


b1 p1 1 1 Fisher's Exact Test 0.999999999999995 c(0.125891615335937, 7.9433407644468) 1 1 two.sided Fisher's Exact Test for Count Data table(data1[, i.type], data1[, d.type])
b1 p2 1 2 Fisher's Exact Test 0.297181147026347 two.sided Fisher's Exact Test for Count Data table(data1[, i.type], data1[, d.type])
b1 p3 1 3 student't T-test 0.220060849170450 17.9184316737887 0.828311444696038 c(-21.8091806118256, 26.9106710148256) c(56.0493448069, 53.4985996054) 0 two.sided Welch Two Sample t-test data1[, d.type] by data1[, i.type]
c1 p1 2 1 Fisher's Exact Test 0.656281798696656 two.sided Fisher's Exact Test for Count Data table(data1[, i.type], data1[, d.type])
c1 p2 2 2 Fisher's Exact Test 0.000731775963974103 two.sided Fisher's Exact Test for Count Data table(data1[, i.type], data1[, d.type])
c1 p3 2 3 ANOVA c(2, 17) c(464.511689668079, 11659.8237651475) c(232.255844834040, 685.871986185148) c(0.338628562635802, NA) c(0.717446233727001, NA)
q1 p3 3 3 Pearson's correlation 0.0317073301915088 18 0.97505438850557 0.00747328069742276 0 two.sided Pearson's product-moment correlation data1[, i.type] and data1[, d.type] c(-0.436491013034941, 0.448510800843917)

のようになる。カラムは左から、「空」「独立変数名」「従属変数名」「独立変数タイプ」「従属変数タイプ」(1:boolean,2:categorical,3:quantitative)、「解析名」、その後は、解析関数のデフォルトコンソール出力をその順番に並べただけである。

欠測値があっても、動きます。