Mercurial > repos > greg > ks_distribution
comparison ks_distribution.R @ 44:69ac2edffdde draft
Uploaded
| author | greg |
|---|---|
| date | Mon, 26 Jun 2017 13:58:37 -0400 |
| parents | 5074cb26597a |
| children | f8b303b9f455 |
comparison
equal
deleted
inserted
replaced
| 43:5074cb26597a | 44:69ac2edffdde |
|---|---|
| 5 option_list <- list( | 5 option_list <- list( |
| 6 make_option(c("-c", "--components_input"), action="store", dest="components_input", help="Ks significant components input dataset"), | 6 make_option(c("-c", "--components_input"), action="store", dest="components_input", help="Ks significant components input dataset"), |
| 7 make_option(c("-k", "--kaks_input"), action="store", dest="kaks_input", help="KaKs analysis input dataset"), | 7 make_option(c("-k", "--kaks_input"), action="store", dest="kaks_input", help="KaKs analysis input dataset"), |
| 8 make_option(c("-n", "--number_comp"), action="store", dest="number_comp", type="integer", help="Number of significant components in the Ks distribution"), | 8 make_option(c("-n", "--number_comp"), action="store", dest="number_comp", type="integer", help="Number of significant components in the Ks distribution"), |
| 9 make_option(c("-o", "--output"), action="store", dest="output", help="Output dataset"), | 9 make_option(c("-o", "--output"), action="store", dest="output", help="Output dataset"), |
| 10 make_option(c("-r", "--colors"), action="store", default="", help="List of component colors") | 10 make_option(c("-r", "--colors"), action="store", default=NA, help="List of component colors") |
| 11 ) | 11 ) |
| 12 | 12 |
| 13 parser <- OptionParser(usage="%prog [options] file", option_list=option_list) | 13 parser <- OptionParser(usage="%prog [options] file", option_list=option_list) |
| 14 args <- parse_args(parser, positional_arguments=TRUE) | 14 args <- parse_args(parser, positional_arguments=TRUE) |
| 15 opt <- args$options | 15 opt <- args$options |
| 16 | 16 |
| 17 set_component_colors = function(colors, number_comp) | 17 set_component_colors = function(colors, number_comp) |
| 18 { | 18 { |
| 19 # Handle colors for components. | 19 # Handle colors for components. |
| 20 if (nchar(colors) == 0) | 20 if (is.na(colors) == 0) { |
| 21 { | |
| 22 # Randomly specify colors for components. | 21 # Randomly specify colors for components. |
| 23 specified_colors <- c('red', 'yellow', 'green', 'black', 'blue', 'darkorange') | 22 specified_colors <- c('red', 'yellow', 'green', 'black', 'blue', 'darkorange') |
| 24 } | 23 } else { |
| 25 else | |
| 26 { | |
| 27 # Handle selected colors for components. | 24 # Handle selected colors for components. |
| 28 specified_colors <- c() | 25 specified_colors <- c() |
| 29 items <- strsplit(colors, ",") | 26 items <- strsplit(colors, ",") |
| 30 for (item in items) | 27 for (item in items) { |
| 31 { | |
| 32 specified_colors <- c(specified_colors, item) | 28 specified_colors <- c(specified_colors, item) |
| 33 } | 29 } |
| 34 num_colors_specified <- length(specified_colors) | 30 num_colors_specified <- length(specified_colors) |
| 35 if (num_colors_specified < number_comp) | 31 if (num_colors_specified < number_comp) { |
| 36 { | 32 for (i in num_colors_specified:number_comp) { |
| 37 for (i in num_colors_specified:number_comp) | 33 if (!any(specified_colors == 'red')) { |
| 38 { | |
| 39 if (!any(specified_colors == 'red')) | |
| 40 { | |
| 41 specified_colors <- c(specified_colors, 'red') | 34 specified_colors <- c(specified_colors, 'red') |
| 42 } | 35 } else if (!any(specified_colors == 'yellow')) { |
| 43 else if (!any(specified_colors == 'yellow')) | |
| 44 { | |
| 45 specified_colors <- c(specified_colors, 'yellow') | 36 specified_colors <- c(specified_colors, 'yellow') |
| 46 } | 37 } else if (!any(specified_colors == 'green')) { |
| 47 else if (!any(specified_colors == 'green')) | |
| 48 { | |
| 49 specified_colors <- c(specified_colors, 'green') | 38 specified_colors <- c(specified_colors, 'green') |
| 50 } | 39 } else if (!any(specified_colors == 'black')) { |
| 51 else if (!any(specified_colors == 'black')) | |
| 52 { | |
| 53 specified_colors <- c(specified_colors, 'black') | 40 specified_colors <- c(specified_colors, 'black') |
| 54 } | 41 } else if (!any(specified_colors == 'blue')) { |
| 55 else if (!any(specified_colors == 'blue')) | |
| 56 { | |
| 57 specified_colors <- c(specified_colors, 'blue') | 42 specified_colors <- c(specified_colors, 'blue') |
| 58 } | 43 } else { |
| 59 else | |
| 60 { | |
| 61 specified_colors <- c(specified_colors, 'darkorange') | 44 specified_colors <- c(specified_colors, 'darkorange') |
| 62 } | 45 } |
| 63 } | 46 } |
| 64 } | 47 } |
| 65 } | 48 } |
| 67 } | 50 } |
| 68 | 51 |
| 69 get_pi_mu_var = function(components_data, number_comp) | 52 get_pi_mu_var = function(components_data, number_comp) |
| 70 { | 53 { |
| 71 # FixMe: enhance this to generically handle any integer value for number_comp. | 54 # FixMe: enhance this to generically handle any integer value for number_comp. |
| 72 if (number_comp == 1) | 55 if (number_comp == 1) { |
| 73 { | |
| 74 pi <- c(components_data[1, 9]) | 56 pi <- c(components_data[1, 9]) |
| 75 mu <- c(components_data[1, 7]) | 57 mu <- c(components_data[1, 7]) |
| 76 var <- c(components_data[1, 8]) | 58 var <- c(components_data[1, 8]) |
| 77 } | 59 } else if (number_comp == 2) { |
| 78 else if (number_comp == 2) | |
| 79 { | |
| 80 pi <- c(components_data[2, 9], components_data[3, 9]) | 60 pi <- c(components_data[2, 9], components_data[3, 9]) |
| 81 mu <- c(components_data[2, 7], components_data[3, 7]) | 61 mu <- c(components_data[2, 7], components_data[3, 7]) |
| 82 var <- c(components_data[2, 8], components_data[3, 8]) | 62 var <- c(components_data[2, 8], components_data[3, 8]) |
| 83 } | 63 } else if (number_comp == 3) { |
| 84 else if (number_comp == 3) | |
| 85 { | |
| 86 pi <- c(components_data[4, 9], components_data[5, 9], components_data[6, 9]) | 64 pi <- c(components_data[4, 9], components_data[5, 9], components_data[6, 9]) |
| 87 mu <- c(components_data[4, 7], components_data[5, 7], components_data[6, 7]) | 65 mu <- c(components_data[4, 7], components_data[5, 7], components_data[6, 7]) |
| 88 var <- c(components_data[4, 8], components_data[5, 8], components_data[6, 8]) | 66 var <- c(components_data[4, 8], components_data[5, 8], components_data[6, 8]) |
| 89 } | 67 } else if (number_comp == 4) { |
| 90 else if (number_comp == 4) | |
| 91 { | |
| 92 pi <- c(components_data[7, 9], components_data[8, 9], components_data[9, 9], components_data[10, 9]) | 68 pi <- c(components_data[7, 9], components_data[8, 9], components_data[9, 9], components_data[10, 9]) |
| 93 mu <- c(components_data[7, 7], components_data[8, 7], components_data[9, 7], components_data[10, 7]) | 69 mu <- c(components_data[7, 7], components_data[8, 7], components_data[9, 7], components_data[10, 7]) |
| 94 var <- c(components_data[7, 8], components_data[8, 8], components_data[9, 8], components_data[10, 8]) | 70 var <- c(components_data[7, 8], components_data[8, 8], components_data[9, 8], components_data[10, 8]) |
| 95 } | 71 } else if (number_comp == 5) { |
| 96 else if (number_comp == 5) | |
| 97 { | |
| 98 pi <- c(components_data[11, 9], components_data[12, 9], components_data[13, 9], components_data[14, 9], components_data[15, 9]) | 72 pi <- c(components_data[11, 9], components_data[12, 9], components_data[13, 9], components_data[14, 9], components_data[15, 9]) |
| 99 mu <- c(components_data[11, 7], components_data[12, 7], components_data[13, 7], components_data[14, 7], components_data[15, 7]) | 73 mu <- c(components_data[11, 7], components_data[12, 7], components_data[13, 7], components_data[14, 7], components_data[15, 7]) |
| 100 var <- c(components_data[11, 8], components_data[12, 8], components_data[13, 8], components_data[14, 8], components_data[15, 8]) | 74 var <- c(components_data[11, 8], components_data[12, 8], components_data[13, 8], components_data[14, 8], components_data[15, 8]) |
| 101 } | 75 } else if (number_comp == 6) { |
| 102 else if (number_comp == 6) | |
| 103 { | |
| 104 pi <- c(components_data[16, 9], components_data[17, 9], components_data[18, 9], components_data[19, 9], components_data[20, 9], components_data[21, 9]) | 76 pi <- c(components_data[16, 9], components_data[17, 9], components_data[18, 9], components_data[19, 9], components_data[20, 9], components_data[21, 9]) |
| 105 mu <- c(components_data[16, 7], components_data[17, 7], components_data[18, 7], components_data[19, 7], components_data[20, 7], components_data[21, 7]) | 77 mu <- c(components_data[16, 7], components_data[17, 7], components_data[18, 7], components_data[19, 7], components_data[20, 7], components_data[21, 7]) |
| 106 var <- c(components_data[16, 8], components_data[17, 8], components_data[18, 8], components_data[19, 8], components_data[20, 8], components_data[21, 8]) | 78 var <- c(components_data[16, 8], components_data[17, 8], components_data[18, 8], components_data[19, 8], components_data[20, 8], components_data[21, 8]) |
| 107 } | 79 } |
| 108 results = c(pi, mu, var) | 80 results = c(pi, mu, var) |
| 132 vx <- seq(1, 100) * (max_ks / 100) | 104 vx <- seq(1, 100) * (max_ks / 100) |
| 133 ymax <- max(nc) | 105 ymax <- max(nc) |
| 134 barplot(nc, space=0.25, offset=0, width=0.04, xlim=c(0, max_ks), ylim=c(0, ymax), col="lightpink1", border="lightpink3") | 106 barplot(nc, space=0.25, offset=0, width=0.04, xlim=c(0, max_ks), ylim=c(0, ymax), col="lightpink1", border="lightpink3") |
| 135 # Add x-axis. | 107 # Add x-axis. |
| 136 axis(1) | 108 axis(1) |
| 137 for (i in 1:length(mu)) | 109 for (i in 1:length(mu)) { |
| 138 { | |
| 139 lines(vx, g[,i] * h, lwd=2, col=specified_colors[i]) | 110 lines(vx, g[,i] * h, lwd=2, col=specified_colors[i]) |
| 140 } | 111 } |
| 141 } | 112 } |
| 142 | 113 |
| 143 calculate_fitted_density <- function(pi, mu, var, max_ks) | 114 calculate_fitted_density <- function(pi, mu, var, max_ks) |
| 146 var <- var/mu^2 | 117 var <- var/mu^2 |
| 147 mu <- log(mu) | 118 mu <- log(mu) |
| 148 # Calculate lognormal density. | 119 # Calculate lognormal density. |
| 149 vx <- seq(1, 100) * (max_ks / 100) | 120 vx <- seq(1, 100) * (max_ks / 100) |
| 150 fx <- matrix(0, 100, comp) | 121 fx <- matrix(0, 100, comp) |
| 151 for (i in 1:100) | 122 for (i in 1:100) { |
| 152 { | 123 for (j in 1:comp) { |
| 153 for (j in 1:comp) | |
| 154 { | |
| 155 fx[i, j] <- pi[j] * dlnorm(vx[i], meanlog=mu[j], sdlog=(sqrt(var[j]))) | 124 fx[i, j] <- pi[j] * dlnorm(vx[i], meanlog=mu[j], sdlog=(sqrt(var[j]))) |
| 156 if (is.nan(fx[i,j])) | 125 if (is.nan(fx[i,j])) { |
| 157 { | |
| 158 fx[i,j]<-0 | 126 fx[i,j]<-0 |
| 159 } | 127 } |
| 160 } | 128 } |
| 161 } | 129 } |
| 162 return(fx) | 130 return(fx) |
| 169 # Set component colors. | 137 # Set component colors. |
| 170 specified_colors <- set_component_colors(opt$colors, number_comp) | 138 specified_colors <- set_component_colors(opt$colors, number_comp) |
| 171 | 139 |
| 172 # Set pi, mu, var. | 140 # Set pi, mu, var. |
| 173 items <- get_pi_mu_var(components_data, number_comp) | 141 items <- get_pi_mu_var(components_data, number_comp) |
| 174 if (number_comp == 1) | 142 if (number_comp == 1) { |
| 175 { | |
| 176 pi <- items[1] | 143 pi <- items[1] |
| 177 mu <- items[2] | 144 mu <- items[2] |
| 178 var <- items[3] | 145 var <- items[3] |
| 179 } | 146 } else if (number_comp == 2) { |
| 180 else if (number_comp == 2) | |
| 181 { | |
| 182 pi <- items[1:2] | 147 pi <- items[1:2] |
| 183 mu <- items[3:4] | 148 mu <- items[3:4] |
| 184 var <- items[5:6] | 149 var <- items[5:6] |
| 185 } | 150 } else if (number_comp == 3) { |
| 186 else if (number_comp == 3) | |
| 187 { | |
| 188 pi <- items[1:3] | 151 pi <- items[1:3] |
| 189 mu <- items[4:6] | 152 mu <- items[4:6] |
| 190 var <- items[7:9] | 153 var <- items[7:9] |
| 191 } | 154 } else if (number_comp == 4) { |
| 192 else if (number_comp == 4) | |
| 193 { | |
| 194 pi <- items[1:4] | 155 pi <- items[1:4] |
| 195 mu <- items[5:8] | 156 mu <- items[5:8] |
| 196 var <- items[9:12] | 157 var <- items[9:12] |
| 197 } | 158 } else if (number_comp == 5) { |
| 198 else if (number_comp == 5) | |
| 199 { | |
| 200 pi <- items[1:5] | 159 pi <- items[1:5] |
| 201 mu <- items[6:10] | 160 mu <- items[6:10] |
| 202 var <- items[11:15] | 161 var <- items[11:15] |
| 203 } | 162 } else if (number_comp == 6) { |
| 204 else if (number_comp == 6) | |
| 205 { | |
| 206 pi <- items[1:6] | 163 pi <- items[1:6] |
| 207 mu <- items[7:12] | 164 mu <- items[7:12] |
| 208 var <- items[13:18] | 165 var <- items[13:18] |
| 209 } | 166 } |
| 210 | 167 |
