Mercurial > repos > greg > ks_distribution
comparison ks_distribution.R @ 7:22cae2172406 draft
Uploaded
author | greg |
---|---|
date | Tue, 06 Jun 2017 09:02:08 -0400 |
parents | a91bd45aa8b1 |
children | 214e2710c51e |
comparison
equal
deleted
inserted
replaced
6:9831319a19fb | 7:22cae2172406 |
---|---|
62 } | 62 } |
63 results = c(pi, mu, var) | 63 results = c(pi, mu, var) |
64 return(results) | 64 return(results) |
65 } | 65 } |
66 | 66 |
67 plot_ks<-function(kaks_input, output, pi, mu, var, max_ks) | 67 plot_ks<-function(kaks_input, output, pi, mu, var) |
68 { | 68 { |
69 # Start PDF device driver to save charts to output. | 69 # Start PDF device driver to save charts to output. |
70 pdf(file=output, bg="white") | 70 pdf(file=output, bg="white") |
71 kaks <- read.table(file=kaks_input, header=T) | 71 kaks <- read.table(file=kaks_input, header=T) |
72 max_ks <- max(kaks$Ks, na.rm=TRUE) | 72 max_ks <- max(kaks$Ks, na.rm=TRUE) |
73 # Change bin width | 73 # Change bin width |
74 max_bin_range <- as.integer(max_ks / 0.05) | 74 max_bin_range <- as.integer(max_ks / 0.05) |
75 bin <- 0.05 * seq(0, max_bin_range) | 75 bin <- 0.05 * seq(0, (max_bin_range + 1 )) |
76 kaks <- kaks[kaks$Ks<max_ks,]; | 76 kaks <- kaks[kaks$Ks<max_ks,] |
77 h.kst <- hist(kaks$Ks, breaks=bin, plot=F) | 77 h.kst <- hist(kaks$Ks, breaks=bin, plot=F) |
78 nc <- h.kst$counts | 78 nc <- h.kst$counts |
79 vx <- h.kst$mids | 79 vx <- h.kst$mids |
80 ntot <- sum(nc) | 80 ntot <- sum(nc) |
81 # Set margin for plot bottom, left top, right. | 81 # Set margin for plot bottom, left top, right. |
82 par(mai=c(0.5, 0.5, 0, 0)) | 82 par(mai=c(0.5, 0.5, 0, 0)) |
83 # Plot dimension in inches. | 83 # Plot dimension in inches. |
84 par(pin=c(2.5, 2.5)) | 84 par(pin=c(3.0, 3.0)) |
85 g <- calculate_fitted_density(pi, mu, var) | 85 g <- calculate_fitted_density(pi, mu, var, max_ks) |
86 h <- ntot * 2.5 / sum(g) | 86 h <- ntot * 1.5 / sum(g) |
87 vx <- seq(1, 100) * 0.02 | 87 vx <- seq(1, 100) * (max_ks / 100) |
88 ymax <- max(nc) + 5 | 88 ymax <- max(nc) |
89 barplot(nc, space=0.25, offset=0, width=0.04, xlim=c(0, max_ks), ylim=c(0, ymax), col="lightpink1", border="lightpink3") | 89 barplot(nc, space=0.25, offset=0, width=0.04, xlim=c(0, max_ks), ylim=c(0, ymax), col="lightpink1", border="lightpink3") |
90 # Add x-axis. | 90 # Add x-axis. |
91 axis(1) | 91 axis(1) |
92 color <- c('red', 'yellow','green','black','blue', 'darkorange' ) | 92 color <- c('red', 'yellow','green','black','blue', 'darkorange' ) |
93 for (i in 1:length(mu)) | 93 for (i in 1:length(mu)) |
94 { | 94 { |
95 lines(vx, g[,i] * h, lwd=2, col=color[i]) | 95 lines(vx, g[,i] * h, lwd=2, col=color[i]) |
96 } | 96 } |
97 } | 97 } |
98 | 98 |
99 calculate_fitted_density <- function(pi, mu, var) | 99 calculate_fitted_density <- function(pi, mu, var, max_ks) |
100 { | 100 { |
101 comp <- length(pi) | 101 comp <- length(pi) |
102 var <- var/mu^2 | 102 var <- var/mu^2 |
103 mu <- log(mu) | 103 mu <- log(mu) |
104 # Calculate lognormal density. | 104 # Calculate lognormal density. |
105 vx <- seq(1, 100) * 0.02 | 105 vx <- seq(1, 100) * (max_ks / 100) |
106 fx <- matrix(0, 100, comp) | 106 fx <- matrix(0, 100, comp) |
107 for (i in 1:100) | 107 for (i in 1:100) |
108 { | 108 { |
109 for (j in 1:comp) | 109 for (j in 1:comp) |
110 { | 110 { |
120 # Get the number of components. | 120 # Get the number of components. |
121 num_components <- get_num_components(components_data) | 121 num_components <- get_num_components(components_data) |
122 | 122 |
123 # Set pi, mu, var. | 123 # Set pi, mu, var. |
124 items <- get_pi_mu_var(components_data, num_components) | 124 items <- get_pi_mu_var(components_data, num_components) |
125 pi <- items[1:3] | 125 if (num_components == 1) |
126 mu <- items[4:6] | 126 { |
127 var <- items[7:9] | 127 pi <- items[1] |
128 mu <- items[2] | |
129 var <- items[3] | |
130 } | |
131 if (num_components == 2) | |
132 { | |
133 pi <- items[1:2] | |
134 mu <- items[3:4] | |
135 var <- items[5:6] | |
136 } | |
137 if (num_components == 3) | |
138 { | |
139 pi <- items[1:3] | |
140 mu <- items[4:6] | |
141 var <- items[7:9] | |
142 } | |
143 if (num_components == 4) | |
144 { | |
145 pi <- items[1:4] | |
146 mu <- items[5:8] | |
147 var <- items[9:12] | |
148 } | |
149 if (num_components == 5) | |
150 { | |
151 pi <- items[1:5] | |
152 mu <- items[6:10] | |
153 var <- items[11:15] | |
154 } | |
155 if (num_components == 6) | |
156 { | |
157 pi <- items[1:6] | |
158 mu <- items[7:12] | |
159 var <- items[13:18] | |
160 } | |
128 | 161 |
129 # Plot the output. | 162 # Plot the output. |
130 plot_ks(opt$kaks_input, opt$output, pi, mu, var, max_ks) | 163 plot_ks(opt$kaks_input, opt$output, pi, mu, var) |