Class: Saulabs::Gauss::TruncatedCorrection
- Inherits:
-
Object
- Object
- Saulabs::Gauss::TruncatedCorrection
- Defined in:
- lib/saulabs/gauss/truncated_correction.rb
Class Method Summary collapse
- .exceeds_margin(perf_diff, draw_margin) ⇒ Object
- .v_exceeds_margin(perf_diff, draw_margin) ⇒ Object
- .v_within_margin(perf_diff, draw_margin) ⇒ Object
- .w_exceeds_margin(perf_diff, draw_margin) ⇒ Object
- .w_within_margin(perf_diff, draw_margin) ⇒ Object
Class Method Details
.exceeds_margin(perf_diff, draw_margin) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/saulabs/gauss/truncated_correction.rb', line 46 def exceeds_margin(perf_diff, draw_margin) abs_diff = perf_diff.abs denom = Distribution.cdf(draw_margin - abs_diff) - Distribution.cdf(-draw_margin - abs_diff) if denom < 2.2e-162 return 1.0 else v = v_exceeds_margin(abs_diff, draw_margin) return v**2 + ((draw_margin - abs_diff) * Gauss::Distribution.standard.value_at(draw_margin - abs_diff) - (-draw_margin - abs_diff) * Gauss::Distribution.standard.value_at(-draw_margin - abs_diff)) / denom end end |
.v_exceeds_margin(perf_diff, draw_margin) ⇒ Object
41 42 43 44 |
# File 'lib/saulabs/gauss/truncated_correction.rb', line 41 def v_exceeds_margin(perf_diff, draw_margin) denom = Distribution.cdf(perf_diff - draw_margin) denom < 2.2e-162 ? -perf_diff + draw_margin : Gauss::Distribution.standard.value_at(perf_diff - draw_margin)/denom end |
.v_within_margin(perf_diff, draw_margin) ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/saulabs/gauss/truncated_correction.rb', line 20 def v_within_margin(perf_diff, draw_margin) abs_diff = perf_diff.abs denom = Distribution.cdf(draw_margin - abs_diff) - Distribution.cdf(-draw_margin - abs_diff) if denom < 2.2e-162 return perf_diff < 0 ? -perf_diff - draw_margin : -perf_diff + draw_margin end num = Gauss::Distribution.standard.value_at(-draw_margin - abs_diff) - Gauss::Distribution.standard.value_at(draw_margin - abs_diff) perf_diff < 0 ? -num/denom : num/denom end |
.w_exceeds_margin(perf_diff, draw_margin) ⇒ Object
31 32 33 34 35 36 37 38 39 |
# File 'lib/saulabs/gauss/truncated_correction.rb', line 31 def w_exceeds_margin(perf_diff, draw_margin) denom = Distribution.cdf(perf_diff - draw_margin) if denom < 2.2e-162 return perf_diff < 0.0 ? 1.0 : 0.0 else v = v_exceeds_margin(perf_diff, draw_margin) return v * (v + perf_diff - draw_margin) end end |
.w_within_margin(perf_diff, draw_margin) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/saulabs/gauss/truncated_correction.rb', line 7 def w_within_margin(perf_diff, draw_margin) abs_diff = perf_diff.abs denom = Distribution.cdf(draw_margin - abs_diff) - Distribution.cdf(-draw_margin - abs_diff) return 1.0 if denom < 2.2e-162 vt = v_within_margin(abs_diff, draw_margin) return vt**2 + ( (draw_margin - abs_diff) * Gauss::Distribution.standard.value_at(draw_margin - abs_diff) - (-draw_margin - abs_diff) * Gauss::Distribution.standard.value_at(-draw_margin - abs_diff) ) / denom end |