303 lines
13 KiB
R
303 lines
13 KiB
R
library(xtable)
|
|
library(dplyr)
|
|
library(tidyverse)
|
|
if (interactive()){
|
|
print("Interactive Session, using home directories")
|
|
data_dir = "~/git/"
|
|
} else {
|
|
data_dir = "/srv/shiny-server/git/"
|
|
}
|
|
|
|
latex_outdir = "~/git/Writing/thesis/tex/appendices/"
|
|
thing = read.csv(paste0(data_dir, "Data/ml_combined/genes/pnca_70_30_actual.csv"))
|
|
|
|
# list of splits
|
|
split_type = c(
|
|
# "cd_7030",
|
|
# "cd_8020",
|
|
"cd_sl"
|
|
# "none"
|
|
)
|
|
split_choicenames=c(
|
|
# "70:30",
|
|
# "80:20",
|
|
"Scaling law"
|
|
# "CV thresholds"
|
|
)
|
|
split_file = c(
|
|
# "_70_30_complete",
|
|
# "_80_20_complete",
|
|
"_sl_complete"
|
|
# "_none_complete"
|
|
)
|
|
|
|
split_file_FS = c(
|
|
# "_70_30_complete",
|
|
# "_80_20_complete",
|
|
"_sl_complete"
|
|
)
|
|
|
|
# necessary because the names will be wrong otherwise
|
|
split_map = data.frame(
|
|
files=c(
|
|
# "_70_30_complete",
|
|
# "_80_20_complete",
|
|
"_sl_complete"
|
|
# "_none_complete"
|
|
),
|
|
splits=c(
|
|
# "cd_7030",
|
|
# "cd_8020",
|
|
"cd_sl"
|
|
# "none"
|
|
)
|
|
)
|
|
|
|
metadata_cols = c("n_training_size", "n_test_size", "n_trainingY_ratio", "n_testY_ratio", "resampling", "n_features")
|
|
|
|
# hardcoded list of drugs
|
|
drug = c("ethambutol", "isoniazid", "pyrazinamide", "rifampicin", "streptomycin")
|
|
|
|
drug_choicenames = c("EmbB-ethambutol", "KatG-isoniazid", "PncA-pyrazinamide", "RpoB-rifampicin", "GidB-streptomycin")
|
|
|
|
gene = c("embb", "katg", "pnca", "rpob", "gid")
|
|
combo = data.frame(drug, gene)
|
|
|
|
score_cols = c(
|
|
'MCC',
|
|
'F1',
|
|
'Accuracy',
|
|
'JCC',
|
|
'Recall',
|
|
'Precision',
|
|
'source_data',
|
|
'Model_name'
|
|
)
|
|
|
|
|
|
# Loader for per-gene CSVs
|
|
#"/home/sethp/git/Data/ml_combined/genes/pnca_70_30_complete.csv"
|
|
loaded_files=list()
|
|
for (x in gene) {
|
|
#x=tolower(x)
|
|
for (split in split_file){
|
|
filedata = paste0(x, split)
|
|
filename = paste0(data_dir,'LSHTM_ML/output/genes/',x,split,'.csv')
|
|
|
|
#print(c(filename))
|
|
#load_name=paste0(combo[gene==x,"drug"],'_',split_map['splits'][split_map['files']==split])
|
|
load_name=paste0(x,'_baselineC_',split_map['splits'][split_map['files']==split])
|
|
print(load_name)
|
|
# try() on its own is fine here because we don't need to do anything if it fails
|
|
try({loaded_files[[load_name]] = read.csv(filename)})
|
|
}
|
|
}
|
|
# Loader for per-gene Feature Selection CSVs
|
|
for (x in gene) {
|
|
#x=tolower(x)
|
|
for (split in split_file_FS){
|
|
filedata = paste0(x, split)
|
|
filename = paste0(data_dir,'LSHTM_ML/output/genes/',x,split,'_FS.csv')
|
|
|
|
#print(c(filename))
|
|
#load_name=paste0(combo[gene==x,"drug"],'_',split_map['splits'][split_map['files']==split])
|
|
load_name=paste0(x,'_baselineC_',split_map['splits'][split_map['files']==split], '_FS')
|
|
print(load_name)
|
|
# try() on its own is fine here because we don't need to do anything if it fails
|
|
try({loaded_files[[load_name]] = read.csv(filename)})
|
|
}
|
|
}
|
|
|
|
|
|
# Funky loader for combined data
|
|
for (x in gene) {
|
|
for (ac in c('_complete', '_FS')){
|
|
for (gene_count in c(1:5)){
|
|
load_name=paste0(gene_count, "genes_logo_skf_BT_", x, ac)
|
|
filename = paste0(data_dir,'LSHTM_ML/output/combined/',load_name, ".csv")
|
|
store_name=paste0(gene_count, "genes_logo_skf_BT_", x, ac)
|
|
# tryCatch is necessary here rather than try() because we need to do more
|
|
# manipulation afterwards (throwing away the column after loading)
|
|
load_successful=TRUE
|
|
tryCatch({temp_df = read.csv(filename)},error=function(e){load_successful<<-FALSE})
|
|
if (load_successful){
|
|
temp_df=temp_df[, 2:ncol(temp_df)] # throw away first column
|
|
loaded_files[[store_name]] = temp_df
|
|
print(paste0("loaded file: ", filename, "into var: ", store_name))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
loaded_files$embb_baselineC_cd_sl = loaded_files$embb_baselineC_cd_sl[loaded_files$embb_baselineC_cd_sl$resampling=='none',score_cols]
|
|
loaded_files$katg_baselineC_cd_sl = loaded_files$katg_baselineC_cd_sl[loaded_files$katg_baselineC_cd_sl$resampling=='none',score_cols]
|
|
loaded_files$pnca_baselineC_cd_sl = loaded_files$pnca_baselineC_cd_sl[loaded_files$pnca_baselineC_cd_sl$resampling=='none',score_cols]
|
|
loaded_files$rpob_baselineC_cd_sl = loaded_files$rpob_baselineC_cd_sl[loaded_files$rpob_baselineC_cd_sl$resampling=='none',score_cols]
|
|
loaded_files$gid_baselineC_cd_sl = loaded_files$gid_baselineC_cd_sl[loaded_files$gid_baselineC_cd_sl$resampling=='none',score_cols]
|
|
|
|
loaded_files$embb_baselineC_cd_sl_FS = loaded_files$embb_baselineC_cd_sl_FS[loaded_files$embb_baselineC_cd_sl_FS$resampling=='none',score_cols]
|
|
loaded_files$katg_baselineC_cd_sl_FS = loaded_files$katg_baselineC_cd_sl_FS[loaded_files$katg_baselineC_cd_sl_FS$resampling=='none',score_cols]
|
|
loaded_files$pnca_baselineC_cd_sl_FS = loaded_files$pnca_baselineC_cd_sl_FS[loaded_files$pnca_baselineC_cd_sl_FS$resampling=='none',score_cols]
|
|
loaded_files$rpob_baselineC_cd_sl_FS = loaded_files$rpob_baselineC_cd_sl_FS[loaded_files$rpob_baselineC_cd_sl_FS$resampling=='none',score_cols]
|
|
loaded_files$gid_baselineC_cd_sl_FS = loaded_files$gid_baselineC_cd_sl_FS[loaded_files$gid_baselineC_cd_sl_FS$resampling=='none',score_cols]
|
|
|
|
loaded_files$`5genes_logo_skf_BT_embb_complete` = loaded_files$`5genes_logo_skf_BT_embb_complete`[loaded_files$`5genes_logo_skf_BT_embb_complete`$resampling=='none',score_cols]
|
|
loaded_files$`5genes_logo_skf_BT_katg_complete` = loaded_files$`5genes_logo_skf_BT_katg_complete`[loaded_files$`5genes_logo_skf_BT_katg_complete`$resampling=='none',score_cols]
|
|
loaded_files$`5genes_logo_skf_BT_pnca_complete` = loaded_files$`5genes_logo_skf_BT_pnca_complete`[loaded_files$`5genes_logo_skf_BT_pnca_complete`$resampling=='none',score_cols]
|
|
loaded_files$`5genes_logo_skf_BT_rpob_complete` = loaded_files$`5genes_logo_skf_BT_rpob_complete`[loaded_files$`5genes_logo_skf_BT_rpob_complete`$resampling=='none',score_cols]
|
|
loaded_files$`5genes_logo_skf_BT_gid_complete` = loaded_files$`5genes_logo_skf_BT_gid_complete`[loaded_files$`5genes_logo_skf_BT_gid_complete`$resampling=='none',score_cols]
|
|
|
|
loaded_files$`5genes_logo_skf_BT_embb_complete`[loaded_files$`5genes_logo_skf_BT_embb_complete`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`5genes_logo_skf_BT_katg_complete`[loaded_files$`5genes_logo_skf_BT_katg_complete`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`5genes_logo_skf_BT_pnca_complete`[loaded_files$`5genes_logo_skf_BT_pnca_complete`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`5genes_logo_skf_BT_rpob_complete`[loaded_files$`5genes_logo_skf_BT_rpob_complete`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`5genes_logo_skf_BT_gid_complete`[loaded_files$`5genes_logo_skf_BT_gid_complete`$source_data=="Train","source_data"]="0Train"
|
|
|
|
loaded_files$`1genes_logo_skf_BT_embb_FS` = loaded_files$`1genes_logo_skf_BT_embb_FS`[loaded_files$`1genes_logo_skf_BT_embb_FS`$resampling=='none',score_cols]
|
|
loaded_files$`1genes_logo_skf_BT_katg_FS` = loaded_files$`1genes_logo_skf_BT_katg_FS`[loaded_files$`1genes_logo_skf_BT_katg_FS`$resampling=='none',score_cols]
|
|
loaded_files$`1genes_logo_skf_BT_pnca_FS` = loaded_files$`1genes_logo_skf_BT_pnca_FS`[loaded_files$`1genes_logo_skf_BT_pnca_FS`$resampling=='none',score_cols]
|
|
loaded_files$`1genes_logo_skf_BT_rpob_FS` = loaded_files$`1genes_logo_skf_BT_rpob_FS`[loaded_files$`1genes_logo_skf_BT_rpob_FS`$resampling=='none',score_cols]
|
|
loaded_files$`1genes_logo_skf_BT_gid_FS` = loaded_files$`1genes_logo_skf_BT_gid_FS`[loaded_files$`1genes_logo_skf_BT_gid_FS`$resampling=='none',score_cols]
|
|
|
|
loaded_files$`1genes_logo_skf_BT_embb_FS`[loaded_files$`1genes_logo_skf_BT_embb_FS`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`1genes_logo_skf_BT_katg_FS`[loaded_files$`1genes_logo_skf_BT_katg_FS`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`1genes_logo_skf_BT_pnca_FS`[loaded_files$`1genes_logo_skf_BT_pnca_FS`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`1genes_logo_skf_BT_rpob_FS`[loaded_files$`1genes_logo_skf_BT_rpob_FS`$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$`1genes_logo_skf_BT_gid_FS`[loaded_files$`1genes_logo_skf_BT_gid_FS`$source_data=="Train","source_data"]="0Train"
|
|
|
|
# Rewrite CV/BT to Train/Test and ensure that Train gets presented first
|
|
loaded_files$embb_baselineC_cd_sl_FS[loaded_files$embb_baselineC_cd_sl_FS$source_data=="CV","source_data"]="0Train"
|
|
loaded_files$katg_baselineC_cd_sl_FS[loaded_files$katg_baselineC_cd_sl_FS$source_data=="CV","source_data"]="0Train"
|
|
loaded_files$pnca_baselineC_cd_sl_FS[loaded_files$pnca_baselineC_cd_sl_FS$source_data=="CV","source_data"]="0Train"
|
|
loaded_files$rpob_baselineC_cd_sl_FS[loaded_files$rpob_baselineC_cd_sl_FS$source_data=="CV","source_data"]="0Train"
|
|
loaded_files$gid_baselineC_cd_sl_FS[loaded_files$gid_baselineC_cd_sl_FS$source_data=="CV","source_data"]="0Train"
|
|
loaded_files$embb_baselineC_cd_sl_FS[loaded_files$embb_baselineC_cd_sl_FS$source_data=="BT","source_data"]="Test"
|
|
loaded_files$katg_baselineC_cd_sl_FS[loaded_files$katg_baselineC_cd_sl_FS$source_data=="BT","source_data"]="Test"
|
|
loaded_files$pnca_baselineC_cd_sl_FS[loaded_files$pnca_baselineC_cd_sl_FS$source_data=="BT","source_data"]="Test"
|
|
loaded_files$rpob_baselineC_cd_sl_FS[loaded_files$rpob_baselineC_cd_sl_FS$source_data=="BT","source_data"]="Test"
|
|
loaded_files$gid_baselineC_cd_sl_FS[loaded_files$gid_baselineC_cd_sl_FS$source_data=="BT","source_data"]="Test"
|
|
|
|
loaded_files$embb_baselineC_cd_sl[loaded_files$embb_baselineC_cd_sl$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$katg_baselineC_cd_sl[loaded_files$katg_baselineC_cd_sl$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$pnca_baselineC_cd_sl[loaded_files$pnca_baselineC_cd_sl$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$rpob_baselineC_cd_sl[loaded_files$rpob_baselineC_cd_sl$source_data=="Train","source_data"]="0Train"
|
|
loaded_files$gid_baselineC_cd_sl[loaded_files$gid_baselineC_cd_sl$source_data=="Train","source_data"]="0Train"
|
|
|
|
# Normal tables
|
|
for (x in gene) {
|
|
out_tex=paste0(latex_outdir,"ml_table-", x, ".tex")
|
|
df_name=paste0(x,"_baselineC_cd_sl")
|
|
processed_df = loaded_files[[df_name]] %>% pivotf_wider(names_from=source_data, values_from=c(
|
|
'MCC',
|
|
'F1',
|
|
'Accuracy',
|
|
'Recall',
|
|
'Precision',
|
|
'JCC'
|
|
),
|
|
names_sep = " ",
|
|
names_sort = TRUE
|
|
)
|
|
processed_df=as.data.frame(processed_df)
|
|
|
|
colnames(processed_df)=gsub('0Train','Train',colnames(processed_df))
|
|
rownames(processed_df)=processed_df$Model_name
|
|
#colnames(processed_df)=gsub('Model_name','Model name',colnames(processed_df))
|
|
processed_df=subset(processed_df, select=-Model_name)
|
|
assign(paste0(x,"_out"),processed_df)
|
|
print(out_tex)
|
|
print.xtable(xtable(
|
|
processed_df, type="latex"),
|
|
file=out_tex
|
|
)
|
|
}
|
|
|
|
quick_latex(huxtable(processed_df), file="/tmp/foo.tex", open=FALSE)
|
|
|
|
|
|
# Feature Selection tables
|
|
for (x in gene) {
|
|
out_tex=paste0(latex_outdir,"ml_table_FS-", x, ".tex")
|
|
df_name=paste0(x,"_baselineC_cd_sl_FS")
|
|
processed_df = loaded_files[[df_name]] %>% pivot_wider(names_from=source_data, values_from=c(
|
|
'MCC',
|
|
'F1',
|
|
'Accuracy',
|
|
'Recall',
|
|
'Precision',
|
|
'JCC'
|
|
),
|
|
names_sep = " ",
|
|
names_sort = TRUE
|
|
)
|
|
processed_df=as.data.frame(processed_df)
|
|
|
|
colnames(processed_df)=gsub('0Train','Train',colnames(processed_df))
|
|
rownames(processed_df)=processed_df$Model_name
|
|
#colnames(processed_df)=gsub('Model_name','Model name',colnames(processed_df))
|
|
processed_df=subset(processed_df, select=-Model_name)
|
|
assign(paste0(x,"_out"),processed_df)
|
|
print(out_tex)
|
|
print.xtable(xtable(
|
|
processed_df, type="latex"),
|
|
file=out_tex
|
|
)
|
|
}
|
|
|
|
# Combined Normal
|
|
for (x in gene) {
|
|
out_tex=paste0(latex_outdir,"ml_table_combined-", x, ".tex")
|
|
df_name=paste0("5genes_logo_skf_BT_",x,"_complete")
|
|
processed_df = loaded_files[[df_name]] %>% pivot_wider(names_from=source_data, values_from=c(
|
|
'MCC',
|
|
'F1',
|
|
'Accuracy',
|
|
'Recall',
|
|
'Precision',
|
|
'JCC'
|
|
),
|
|
names_sep = " ",
|
|
names_sort = TRUE
|
|
)
|
|
processed_df=as.data.frame(processed_df)
|
|
|
|
colnames(processed_df)=gsub('0Train','Train',colnames(processed_df))
|
|
rownames(processed_df)=processed_df$Model_name
|
|
#colnames(processed_df)=gsub('Model_name','Model name',colnames(processed_df))
|
|
processed_df=subset(processed_df, select=-Model_name)
|
|
assign(paste0(x,"_out"),processed_df)
|
|
print.xtable(xtable(
|
|
processed_df, type="latex"),
|
|
file=out_tex
|
|
)
|
|
}
|
|
|
|
# Combined Feature Selection
|
|
for (x in gene) {
|
|
out_tex=paste0(latex_outdir,"ml_table_combined-FS-", x, ".tex")
|
|
df_name=paste0("1genes_logo_skf_BT_",x,"_FS")
|
|
processed_df = loaded_files[[df_name]] %>% pivot_wider(names_from=source_data, values_from=c(
|
|
'MCC',
|
|
'F1',
|
|
'Accuracy',
|
|
'Recall',
|
|
'Precision',
|
|
'JCC'
|
|
),
|
|
names_sep = " ",
|
|
names_sort = TRUE
|
|
)
|
|
processed_df=as.data.frame(processed_df)
|
|
|
|
colnames(processed_df)=gsub('0Train','Train',colnames(processed_df))
|
|
rownames(processed_df)=processed_df$Model_name
|
|
#colnames(processed_df)=gsub('Model_name','Model name',colnames(processed_df))
|
|
processed_df=subset(processed_df, select=-Model_name)
|
|
assign(paste0(x,"_out"),processed_df)
|
|
print(out_tex)
|
|
print.xtable(xtable(
|
|
processed_df, type="latex"),
|
|
file=out_tex
|
|
)
|
|
}
|
|
|