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
+
1
18
library(plyr ) # order matters, we need dplyr to come later for grouping
2
19
library(dplyr )
3
20
library(tidyverse )
21
+ library(data.table )
4
22
5
23
6
24
plot_ivim <- function (data , fileExtension ) {
@@ -15,33 +33,33 @@ plot_ivim <- function(data, fileExtension) {
15
33
ggsave(paste(" Dp" , fileExtension , sep = " " ), plot = Dp_plot , width = 50 , height = 50 , units = " cm" )
16
34
}
17
35
18
- data <- read.csv(" test_output.csv " )
36
+ data <- read.csv(output_name )
19
37
data <- data %> % mutate_if(is.character , as.factor )
20
38
plot_ivim(data , " .pdf" )
21
39
22
40
data_restricted <- data [data $ Region %in% c(" Liver" , " spleen" , " Right kydney cortex" , " right kidney medulla" ),]
23
41
plot_ivim(data_restricted , " _limited.pdf" )
24
42
25
- data_duration <- read.csv(" test_duration.csv " )
43
+ data_duration <- read.csv(duration_name )
26
44
data_duration <- data_duration %> % mutate_if(is.character , as.factor )
27
45
data_duration $ ms <- data_duration $ Duration..us. / data_duration $ Count / 1000
28
46
ggplot(data_duration , aes(x = Algorithm , y = ms )) + geom_boxplot() + scale_x_discrete(guide = guide_axis(angle = 90 )) + ggtitle(" Fit Duration" ) + ylab(" Time (ms)" )
29
47
ggsave(" durations.pdf" , width = 20 , height = 20 , units = " cm" )
30
48
31
49
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
+ }
45
63
46
64
47
65
ivim_decay <- function (f , D , Dp , bvalues ) {
@@ -63,4 +81,4 @@ curves_restricted <- generate_curves(data_restricted, bvalues, "")
63
81
data_curves_restricted <- cbind(curves_restricted , signal_fitted = curves_restricted_fitted $ signal_fitted )
64
82
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.)" )
65
83
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