feldtruby 0.3.12 → 0.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/feldtruby/statistics.rb +61 -37
- data/lib/feldtruby/version.rb +1 -1
- data/test/test_statistics.rb +6 -5
- metadata +1 -2
- data/Rplots.pdf +0 -0
data/lib/feldtruby/statistics.rb
CHANGED
@@ -13,7 +13,11 @@ class RCommunicator
|
|
13
13
|
# Will stay open until closed or the ruby interpreter exits.
|
14
14
|
# echo = false and interactive = false
|
15
15
|
@r = RinRuby.new(false, false)
|
16
|
+
|
17
|
+
@installed_libraries = []
|
18
|
+
|
16
19
|
setup_r()
|
20
|
+
|
17
21
|
end
|
18
22
|
|
19
23
|
# Include necessary libraries.
|
@@ -23,7 +27,13 @@ class RCommunicator
|
|
23
27
|
|
24
28
|
# Include a library after ensuring it has been installed
|
25
29
|
def include_library(lib)
|
30
|
+
|
31
|
+
return if @installed_libraries.include?(lib)
|
32
|
+
|
33
|
+
@installed_libraries << lib
|
34
|
+
|
26
35
|
@r.eval "if(!library(#{lib}, logical.return=TRUE)) {install.packages(\"#{lib}\"); library(#{lib});}"
|
36
|
+
|
27
37
|
end
|
28
38
|
|
29
39
|
# Load R scripts in the feldtruby/R directory.
|
@@ -197,12 +207,6 @@ end
|
|
197
207
|
# Plotting data sets in R with ggplot2 and save them to files.
|
198
208
|
module FeldtRuby::Statistics::Plotting
|
199
209
|
|
200
|
-
GfxFormatToGfxParams = {
|
201
|
-
"pdf" => {:width => 7, :height => 5, :paper => 'special'},
|
202
|
-
"png" => {:units => "cm", :width => 12, :height => 8},
|
203
|
-
"tiff" => {:units => "cm", :width => 12, :height => 8},
|
204
|
-
}
|
205
|
-
|
206
210
|
def gfx_device(format, width = nil, height = nil)
|
207
211
|
|
208
212
|
format = format.to_s # If given as a symbol instead of a string
|
@@ -228,19 +232,6 @@ module FeldtRuby::Statistics::Plotting
|
|
228
232
|
|
229
233
|
end
|
230
234
|
|
231
|
-
def set_file_ending(filepath, newEnding)
|
232
|
-
|
233
|
-
dirname = File.dirname(filepath)
|
234
|
-
|
235
|
-
current_ending = filepath.split(".").last
|
236
|
-
|
237
|
-
# Works even if there is no current file ending:
|
238
|
-
basename = File.basename(filepath, "." + current_ending)
|
239
|
-
|
240
|
-
File.join dirname, basename
|
241
|
-
|
242
|
-
end
|
243
|
-
|
244
235
|
def plot_2dims(csvFilePath, graphFilePath, xName, yName, title = "scatterplot", format = "pdf", width = nil, height = nil)
|
245
236
|
|
246
237
|
include_library("ggplot2")
|
@@ -286,38 +277,71 @@ module FeldtRuby::Statistics::Plotting
|
|
286
277
|
}
|
287
278
|
end
|
288
279
|
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
280
|
+
GfxFormatToGfxParams = {
|
281
|
+
"pdf" => {:width => 7, :height => 5, :paper => 'special'},
|
282
|
+
"png" => {:units => "cm", :width => 12, :height => 8},
|
283
|
+
"tiff" => {:units => "cm", :width => 12, :height => 8},
|
284
|
+
}
|
285
|
+
|
286
|
+
# Wrap a sve_graph call around a block that draws a diagram and this will
|
287
|
+
# save the diagram to a file. The filetype is given by the file ending of
|
288
|
+
# the file name.
|
289
|
+
def save_graph(filename, width = nil, height = nil)
|
290
|
+
|
291
|
+
file_ending = filename.split(".").last
|
292
|
+
|
293
|
+
raise "Don't now about graphics format #{file_ending}" unless GfxFormatToGfxParams.has_key?(file_ending)
|
294
|
+
|
295
|
+
params = GfxFormatToGfxParams[file_ending].clone
|
296
|
+
|
297
|
+
params[:width] = width if width
|
298
|
+
params[:height] = height if height
|
299
|
+
|
300
|
+
RC.eval("#{file_ending}(#{filename.inspect}, #{hash_to_R_params(params)})")
|
301
|
+
|
293
302
|
yield() # Just be sure not to nest these save_graph calls within each other...
|
303
|
+
|
294
304
|
RC.eval("dev.off()")
|
305
|
+
|
295
306
|
end
|
296
307
|
|
297
308
|
# Overlaid density graph of the observations (sampled distributions) in data1
|
298
|
-
# and data2.
|
299
|
-
|
309
|
+
# and data2. The _dataMap_ maps the name of each data series to an array with
|
310
|
+
# its observations.
|
311
|
+
def overlaid_densities(dataMap, title = "Densities of distributions", datasetsName = "distribution", xlabel = "values", ylabel = "density")
|
312
|
+
|
300
313
|
include_library("ggplot2")
|
314
|
+
include_library("reshape2")
|
315
|
+
|
316
|
+
cardinalities = dataMap.values.map {|vs| vs.length}.uniq
|
301
317
|
|
302
|
-
|
318
|
+
unless cardinalities.length == 1
|
319
|
+
|
320
|
+
raise ArgumentError.new("Must have same cardinality")
|
321
|
+
|
322
|
+
end
|
303
323
|
|
304
324
|
script = <<-EOS
|
305
|
-
df <- data.frame(
|
306
|
-
|
307
|
-
|
308
|
-
f <-
|
309
|
-
f <- f +
|
310
|
-
f <- f +
|
311
|
-
|
312
|
-
|
313
|
-
|
325
|
+
df <- data.frame(index = (1:#{cardinalities.first}), #{hash_to_R_params(dataMap)})
|
326
|
+
df.m <- melt(df, id = "index")
|
327
|
+
names(df.m)[2] <- _datasetsName_
|
328
|
+
f <- ggplot(df.m, aes(value, fill=#{datasetsName}))
|
329
|
+
f <- f + geom_density(alpha = 0.2, size = 0.5) + scale_color_brewer()
|
330
|
+
f <- f + ggtitle(_title_) + xlab(_xlabel_) + ylab(_ylabel_)
|
331
|
+
f <- f + theme_bw()
|
332
|
+
f <- f + theme(
|
333
|
+
plot.title = element_text(face="bold", size=12),
|
334
|
+
axis.title.x = element_text(face="bold", size=10),
|
335
|
+
axis.title.y = element_text(face="bold", size=10)
|
336
|
+
)
|
314
337
|
f
|
315
|
-
#dev.off()
|
316
338
|
EOS
|
317
|
-
|
339
|
+
|
340
|
+
subst_eval script, {:title => title, :datasetsName => datasetsName,
|
318
341
|
:xlabel => xlabel, :ylabel => ylabel}
|
319
342
|
|
320
343
|
end
|
344
|
+
|
321
345
|
end
|
322
346
|
|
323
347
|
class FeldtRuby::RCommunicator
|
data/lib/feldtruby/version.rb
CHANGED
data/test/test_statistics.rb
CHANGED
@@ -170,19 +170,20 @@ describe "Plotting" do
|
|
170
170
|
#
|
171
171
|
# end
|
172
172
|
|
173
|
-
it "can do overlaid density plot" do
|
173
|
+
it "can do overlaid density plot of three arrays" do
|
174
174
|
|
175
175
|
d1 = Array.new(100) {rand(10)}
|
176
|
-
d2 = Array.new(100) {2 + rand(
|
176
|
+
d2 = Array.new(100) {2 + rand(6)}
|
177
|
+
g = Array.new(100) {1 + rand(12)}
|
177
178
|
|
178
|
-
out = "
|
179
|
+
out = "tmp2.pdf"
|
179
180
|
|
180
181
|
RC.save_graph(out) do
|
181
|
-
RC.overlaid_densities(d1, d2)
|
182
|
+
RC.overlaid_densities({:ind1 => d1, :ind2 => d2, :goal => g})
|
182
183
|
end
|
183
184
|
|
184
185
|
File.exist?(out).must_equal true
|
185
186
|
File.delete out
|
186
|
-
|
187
|
+
|
187
188
|
end
|
188
189
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: feldtruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.13
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -73,7 +73,6 @@ files:
|
|
73
73
|
- R/diffusion_kde.R
|
74
74
|
- README.md
|
75
75
|
- Rakefile
|
76
|
-
- Rplots.pdf
|
77
76
|
- TODO
|
78
77
|
- feldtruby.gemspec
|
79
78
|
- lib/feldtruby.rb
|
data/Rplots.pdf
DELETED
Binary file
|