Skip to content

Commit 17f3033

Browse files
committed
Updated analysis script
1 parent b712d4b commit 17f3033

File tree

1 file changed

+34
-16
lines changed

1 file changed

+34
-16
lines changed

tests/IVIMmodels/unit_tests/analyze.r

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
1+
#!/usr/bin/env Rscript
2+
3+
#Run like this:
4+
#Rscript --vanilla tests/IVIMmodels/unit_tests/analyze.r test_output_priors.csv test_duration_priors.csv
5+
args = commandArgs(trailingOnly=TRUE)
6+
output_name = "test_output.csv"
7+
duration_name = "test_duration.csv"
8+
runPrediction = FALSE
9+
if (length(args)>=1) {
10+
output_name = args[1]
11+
}
12+
if (length(args)>=2) {
13+
duration_name = args[2]
14+
}
15+
print(output_name)
16+
print(duration_name)
17+
118
library(plyr) # order matters, we need dplyr to come later for grouping
219
library(dplyr)
320
library(tidyverse)
21+
library(data.table)
422

523

624
plot_ivim <- function(data, fileExtension) {
@@ -15,33 +33,33 @@ plot_ivim <- function(data, fileExtension) {
1533
ggsave(paste("Dp", fileExtension, sep=""), plot=Dp_plot, width = 50, height = 50, units = "cm")
1634
}
1735

18-
data <- read.csv("test_output.csv")
36+
data <- read.csv(output_name)
1937
data <- data %>% mutate_if(is.character, as.factor)
2038
plot_ivim(data, ".pdf")
2139

2240
data_restricted <- data[data$Region %in% c("Liver", "spleen", "Right kydney cortex", "right kidney medulla"),]
2341
plot_ivim(data_restricted, "_limited.pdf")
2442

25-
data_duration <- read.csv("test_duration.csv")
43+
data_duration <- read.csv(duration_name)
2644
data_duration <- data_duration %>% mutate_if(is.character, as.factor)
2745
data_duration$ms <- data_duration$Duration..us./data_duration$Count/1000
2846
ggplot(data_duration, aes(x=Algorithm, y=ms)) + geom_boxplot() + scale_x_discrete(guide = guide_axis(angle = 90)) + ggtitle("Fit Duration") + ylab("Time (ms)")
2947
ggsave("durations.pdf", width = 20, height = 20, units = "cm")
3048

3149

32-
# some kind of black voodoo magic to number unique groups
33-
# data_new <- data %>% group_by(Algorithm, Region, SNR) %>% mutate(index = row_number()) %>% ungroup()
34-
# Then this widens it so we can lm()
35-
data_wide <- data %>% pivot_wider(names_from=Algorithm, values_from=c(f_fitted, Dp_fitted, D_fitted), id_cols=c(Region, SNR, index, f, D, Dp))
36-
# linear fit for f
37-
f_model <- lm(f ~ f_fitted_IAR_LU_biexp + f_fitted_IAR_LU_modified_mix + f_fitted_IAR_LU_modified_topopro + f_fitted_IAR_LU_segmented_2step + f_fitted_IAR_LU_segmented_3step + f_fitted_IAR_LU_subtracted, data=data_wide)
38-
#f_model <- lm(f ~ f_fitted_ETP_SRI_LinearFitting + f_fitted_IAR_LU_biexp + f_fitted_IAR_LU_modified_mix + f_fitted_IAR_LU_modified_topopro + f_fitted_IAR_LU_segmented_2step + f_fitted_IAR_LU_segmented_3step + f_fitted_IAR_LU_subtracted, data=data_new_wide)
39-
D_model <- lm(D ~ D_fitted_ETP_SRI_LinearFitting + D_fitted_IAR_LU_biexp + D_fitted_IAR_LU_modified_topopro + D_fitted_IAR_LU_segmented_2step + D_fitted_IAR_LU_segmented_3step + D_fitted_IAR_LU_subtracted, data=data_wide)
40-
# D_model <- lm(D ~ D_fitted_ETP_SRI_LinearFitting + D_fitted_IAR_LU_biexp + D_fitted_IAR_LU_modified_mix + D_fitted_IAR_LU_modified_topopro + D_fitted_IAR_LU_segmented_2step + D_fitted_IAR_LU_segmented_3step + D_fitted_IAR_LU_subtracted, data=data_new_wide)
41-
Dp_model <- lm(Dp ~ Dp_fitted_IAR_LU_biexp + Dp_fitted_IAR_LU_modified_mix + Dp_fitted_IAR_LU_modified_topopro + Dp_fitted_IAR_LU_segmented_2step + Dp_fitted_IAR_LU_segmented_3step + Dp_fitted_IAR_LU_subtracted, data=data_wide)
42-
# Dp_model <- lm(Dp ~ Dp_fitted_ETP_SRI_LinearFitting + Dp_fitted_IAR_LU_biexp + Dp_fitted_IAR_LU_modified_mix + Dp_fitted_IAR_LU_modified_topopro + Dp_fitted_IAR_LU_segmented_2step + Dp_fitted_IAR_LU_segmented_3step + Dp_fitted_IAR_LU_subtracted, data=data_new_wide)
43-
# predict new data from existing model
44-
predict(object = f_model, newdata = data_wide)
50+
if (runPrediction) {
51+
# Then this widens it so we can lm()
52+
data_wide <- data %>% pivot_wider(names_from=Algorithm, values_from=c(f_fitted, Dp_fitted, D_fitted), id_cols=c(Region, SNR, index, f, D, Dp))
53+
# linear fit for f
54+
f_model <- lm(f ~ f_fitted_IAR_LU_biexp + f_fitted_IAR_LU_modified_mix + f_fitted_IAR_LU_modified_topopro + f_fitted_IAR_LU_segmented_2step + f_fitted_IAR_LU_segmented_3step + f_fitted_IAR_LU_subtracted, data=data_wide)
55+
#f_model <- lm(f ~ f_fitted_ETP_SRI_LinearFitting + f_fitted_IAR_LU_biexp + f_fitted_IAR_LU_modified_mix + f_fitted_IAR_LU_modified_topopro + f_fitted_IAR_LU_segmented_2step + f_fitted_IAR_LU_segmented_3step + f_fitted_IAR_LU_subtracted, data=data_new_wide)
56+
D_model <- lm(D ~ D_fitted_ETP_SRI_LinearFitting + D_fitted_IAR_LU_biexp + D_fitted_IAR_LU_modified_topopro + D_fitted_IAR_LU_segmented_2step + D_fitted_IAR_LU_segmented_3step + D_fitted_IAR_LU_subtracted, data=data_wide)
57+
# D_model <- lm(D ~ D_fitted_ETP_SRI_LinearFitting + D_fitted_IAR_LU_biexp + D_fitted_IAR_LU_modified_mix + D_fitted_IAR_LU_modified_topopro + D_fitted_IAR_LU_segmented_2step + D_fitted_IAR_LU_segmented_3step + D_fitted_IAR_LU_subtracted, data=data_new_wide)
58+
Dp_model <- lm(Dp ~ Dp_fitted_IAR_LU_biexp + Dp_fitted_IAR_LU_modified_mix + Dp_fitted_IAR_LU_modified_topopro + Dp_fitted_IAR_LU_segmented_2step + Dp_fitted_IAR_LU_segmented_3step + Dp_fitted_IAR_LU_subtracted, data=data_wide)
59+
# Dp_model <- lm(Dp ~ Dp_fitted_ETP_SRI_LinearFitting + Dp_fitted_IAR_LU_biexp + Dp_fitted_IAR_LU_modified_mix + Dp_fitted_IAR_LU_modified_topopro + Dp_fitted_IAR_LU_segmented_2step + Dp_fitted_IAR_LU_segmented_3step + Dp_fitted_IAR_LU_subtracted, data=data_new_wide)
60+
# predict new data from existing model
61+
predict(object = f_model, newdata = data_wide)
62+
}
4563

4664

4765
ivim_decay <- function(f, D, Dp, bvalues) {
@@ -63,4 +81,4 @@ curves_restricted <- generate_curves(data_restricted, bvalues, "")
6381
data_curves_restricted <- cbind(curves_restricted, signal_fitted=curves_restricted_fitted$signal_fitted)
6482
curve_plot <- ggplot(data_curves_restricted, aes(x=bvalue)) + facet_grid(Region ~ SNR) + geom_line(alpha=0.2, aes(y=signal_fitted, group=interaction(Algorithm, index), color=Algorithm)) + geom_line(aes(y=signal)) + ylim(0, 1) + ylab("Signal (a.u.)")
6583
print(curve_plot)
66-
ggsave("curve_plot.pdf", plot=curve_plot, width = 30, height = 30, units = "cm")
84+
ggsave("curve_plot.pdf", plot=curve_plot, width = 30, height = 30, units = "cm")

0 commit comments

Comments
 (0)