研究テーマ
- 8. 実験方法・VARモデルの改良点
pair_VAR<-function(all_mat,target,separate){
library(vars)##read_library
cur_dir<-getwd()
dir.create("pair_VAR")
setwd("pair_VAR")
all_mat<-as.matrix(all_mat)
target<-as.integer(target)
separate<-as.integer(separate)
time_data<-all_mat[,1]##sample_name
select_ta<-all_mat[,2:(target+1)]##target_microbiome
fluc_data<-all_mat[,-1:-(target+1)]##target_metabolite
for(k in 1:length(select_ta[1,])){
result_1<-matrix(NA,separate,length(fluc_data[1,]))##result_1_place
result_2<-matrix(NA,separate+3,length(fluc_data[1,]))##result_2_place
for(i in 1:length(fluc_data[1,])){
var_1<-cbind(select_ta[,k],fluc_data[,i])
colnames(var_1)<-c(colnames(select_ta)[k],colnames(fluc_data)[i])
var_ts<-as.matrix(ts(var_1))
mode(var_ts)<-"numeric"
var_selected<-VARselect(var_ts,type="both")
var_res<-VAR(var_ts,p=var_selected$selection[1])
var_res_part<-var_res$varresult##res
predict_value<-var_res_part[[1]]$fitted.values##predict_value
measured_value<-var_res_part[[1]]$model$y##measured_value
RMSE<-sqrt(sum((predict_value-measured_value)^2)/length(predict_value))##RMSE
result_frag_1<-c(predict_value,RMSE)##predict_value&RMSE
result_1[,i]<-result_frag_1
var_res_fevd<-fevd(var_res,n.ahead=separate)
cont_val<-var_res_fevd[[1]][,2]##contribution_value
cont_val_sum<-sum(cont_val)##total
cont_val_mean<-mean(cont_val)##average
cont_val_sd<-sd(cont_val)##sdev
result_frag_2<-c(cont_val,cont_val_sum,cont_val_mean,cont_val_sd)
result_2[,i]<-result_frag_2
}
colnames(result_1)<-colnames(fluc_data)
colnames(result_2)<-colnames(fluc_data)
result_1<-cbind(c(seq(1,length(time_data)-1,length=length(time_data)-1),"RMSE"),result_1)
result_2<-cbind(c(time_data,"total","average","sd"),result_2)
write.table(result_1,paste(colnames(select_ta)[k],"_var_model.csv",sep=""),col.names=T,row.names=F,sep=",")##wr
ite_result_1
write.table(result_2,paste(colnames(select_ta)[k],"_FEVD.csv",sep=""),col.names=T,row.names=F,sep=",")##write_r
esult_2
}
setwd(cur_dir)
}
1:1のVARmodel + 1:1の分散分解
RMSEと分解分散の合計値を算出
自動化
プログラミング