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<-outoutfile<-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)、「解析名」、その後は、解析関数のデフォルトコンソール出力をその順番に並べただけである。
欠測値があっても、動きます。