Skip to content

Commit 18f34fd

Browse files
author
PharmCat
committed
stable RNG
1 parent e63bcbc commit 18f34fd

File tree

4 files changed

+28
-27
lines changed

4 files changed

+28
-27
lines changed

.github/workflows/Documenter.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- uses: actions/checkout@v2
2525
- uses: julia-actions/setup-julia@latest
2626
with:
27-
version: '1.6'
27+
version: '1.5'
2828
- name: Install dependencies
2929
run: julia --project=docs/ -e 'using Pkg; Pkg.develop(PackageSpec(path=pwd())); Pkg.instantiate()'
3030
- name: Build and deploy

src/sim.jl

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
Bioequivalence power simulation.
66
77
"""
8-
function besim(t::CTask{P, D, Bioequivalence, Power}; nsim::Int = 100, rsabe::Bool = false, rsabeconst = 0.760, seed = 0) where P where D
9-
if seed != 0 Random.seed!(seed) end
8+
function besim(t::CTask{P, D, Bioequivalence, Power}; nsim::Int = 100, rsabe::Bool = false, rsabeconst = 0.760, seed = 0, rng = MersenneTwister()) where P where D
9+
if seed != 0 Random.seed!(rng, seed) end
1010
df = t.design.df(t.objective.val)
1111
sef = sediv(t.design, t.objective.val)
1212
CHSQ = Chisq(df)
1313
tval = quantile(TDist(df), 1 - t.hyp.alpha)
1414
σ̵ₓ = sef * t.param.a.sd
1515
pow = 0
1616
for i = 1:nsim
17-
smean = rand(ZDIST) * σ̵ₓ + (t.param.a.m - t.param.b.m)
18-
σ² = rand(CHSQ) * t.param.a.sd ^ 2 / df
17+
smean = rand(rng, ZDIST) * σ̵ₓ + (t.param.a.m - t.param.b.m)
18+
σ² = rand(rng, CHSQ) * t.param.a.sd ^ 2 / df
1919
σ = sqrt(σ²)
2020
hw = tval * σ * sef
2121
θ₁ = smean - hw
@@ -41,16 +41,16 @@ end
4141
Proportion difference power simulation.
4242
4343
"""
44-
function ctsim(t::CTask{DiffProportion{P1, P2}, D, H, Power}; nsim = 100, seed=0, method = :default, dropout = 0.0) where P1 <: Proportion where P2 <: Proportion where D where H <: AbstractHypothesis
45-
if seed != 0 Random.seed!(seed) end
44+
function ctsim(t::CTask{DiffProportion{P1, P2}, D, H, Power}; nsim = 100, method = :default, dropout = 0.0, seed = 0, rng = MersenneTwister()) where P1 <: Proportion where P2 <: Proportion where D where H <: AbstractHypothesis
45+
if seed != 0 Random.seed!(rng, seed) end
4646
n₁ = getval(t.objective)
4747
n₂ = Int(ceil(getval(t.objective) / t.k))
4848
pow = 0
4949
D₁ = Binomial(n₁, getval(t.param.a))
5050
D₂ = Binomial(n₂, getval(t.param.b))
5151
for i = 1:nsim
52-
xn₁ = rand(D₁)
53-
xn₂ = rand(D₂)
52+
xn₁ = rand(rng, D₁)
53+
xn₂ = rand(rng, D₂)
5454
if checkhyp(t.hyp, DiffProportion(Proportion(xn₁, n₁), Proportion(xn₂, n₂)); method = method) pow += 1 end
5555
end
5656
return pow/nsim
@@ -122,15 +122,15 @@ end
122122
Means power simulation.
123123
124124
"""
125-
function ctsim(t::CTask{P, D, H, Power}; nsim = 100, seed = 0, method = :default, dropout = 0.0) where P <: DiffMean where D where H
126-
if seed != 0 Random.seed!(seed) end
125+
function ctsim(t::CTask{P, D, H, Power}; nsim = 100, method = :default, dropout = 0.0, seed = 0, rng = MersenneTwister()) where P <: DiffMean where D where H
126+
if seed != 0 Random.seed!(rng, seed) end
127127
n₁ = getval(t.objective)
128128
n₂ = Int(ceil(getval(t.objective) / t.k))
129129
pow = 0
130130

131131
for i = 1:nsim
132-
n1 = rand(ZDIST, n₁) .* t.param.a.sd .+ getval(t.param.a)
133-
n2 = rand(ZDIST, n₂) .* t.param.b.sd .+ getval(t.param.b)
132+
n1 = rand(rng, ZDIST, n₁) .* t.param.a.sd .+ getval(t.param.a)
133+
n2 = rand(rng, ZDIST, n₂) .* t.param.b.sd .+ getval(t.param.b)
134134
if checkhyp(t.hyp, DiffMean(Mean(n1), Mean(n2)); method = method) pow += 1 end
135135
end
136136
return pow/nsim

test/citest.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ println(" ---------------------------------- ")
169169
@test ci.upper Inf
170170
@test ci.estimate Inf
171171

172+
172173
#-- cli
173174

174175
ci = ClinicalTrialUtilities.rrpropci(30, 100, 40, 90; alpha=0.05, method=:cli)

test/sim.jl

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ println(" ---------------------------------- ")
22
@testset "#14 Simulations " begin
33

44
t = ClinicalTrialUtilities.bepower(cv=0.2, n=20).task
5-
result = ClinicalTrialUtilities.besim(t; nsim = 100, seed = 1234)
6-
@test result == 0.83
5+
result = ClinicalTrialUtilities.besim(t; nsim = 100, seed = 1234, rng = StableRNG(0))
6+
@test result == 0.82
77
Base.show(io, t)
88

99
t = ClinicalTrialUtilities.ctask(param=:mean, hyp=:ns, group=:two, alpha=0.05, n = 108, sd=10, diff=5, a=7, b=0, k=1)
10-
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234)
11-
@test result == 0.431
10+
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234, rng = StableRNG(0))
11+
@test result == 0.439
1212
Base.show(io, t)
1313
#=
1414
julia> ClinicalTrialUtilities.ctpower(t)
@@ -28,8 +28,8 @@ Power: 0.431398
2828
=#
2929

3030
t = ClinicalTrialUtilities.ctask(param=:mean, hyp=:ea, group=:two, alpha=0.05, n = 108, sd=5, diff=0, a=5, b=6, k=1)
31-
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234)
32-
@test result == 0.315
31+
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234, rng = StableRNG(0))
32+
@test result == 0.323
3333
Base.show(io, t)
3434

3535
#=
@@ -50,8 +50,8 @@ Power: 0.312274
5050
=#
5151

5252
t = ClinicalTrialUtilities.ctask(param=:mean, hyp=:ei, group=:two, alpha=0.05, n = 108, sd=10, diff=5, a=5, b=4, k=1)
53-
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234)
54-
@test result == 0.885
53+
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234, rng = StableRNG(0))
54+
@test result == 0.884
5555
Base.show(io, t)
5656
#=
5757
julia> ClinicalTrialUtilities.ctpower(t)
@@ -77,8 +77,8 @@ ClinicalTrialUtilities.DiffProportion(ClinicalTrialUtilities.Proportion(30, 100)
7777
ClinicalTrialUtilities.Parallel(),
7878
ClinicalTrialUtilities.Superiority(-0.15, -0.15, 0.05),
7979
ClinicalTrialUtilities.Power(100), 1.0)
80-
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, method = :nhs, seed = 1234)
81-
@test result == 0.169
80+
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, method = :nhs, seed = 1234, rng = StableRNG(0))
81+
@test result == 0.214
8282
Base.show(io, t)
8383

8484
#=
@@ -103,8 +103,8 @@ ClinicalTrialUtilities.DiffProportion(ClinicalTrialUtilities.Proportion(75, 100)
103103
ClinicalTrialUtilities.Parallel(),
104104
ClinicalTrialUtilities.Equivalence(-0.2, 0.2, 0.05),
105105
ClinicalTrialUtilities.Power(132), 1.0)
106-
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234)
107-
@test result == 0.894
106+
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, seed = 1234, rng = StableRNG(0))
107+
@test result == 0.897
108108
Base.show(io, t)
109109

110110
#=
@@ -129,8 +129,8 @@ ClinicalTrialUtilities.DiffProportion(ClinicalTrialUtilities.Proportion(30, 100)
129129
ClinicalTrialUtilities.Parallel(),
130130
ClinicalTrialUtilities.Equality(0, 0.05),
131131
ClinicalTrialUtilities.Power(100), 1.0)
132-
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, method = :mn, seed = 1234)
133-
@test result == 0.343
132+
result = ClinicalTrialUtilities.ctsim(t; nsim = 1000, method = :mn, seed = 1234, rng = StableRNG(0))
133+
@test result == 0.315
134134
Base.show(io, t)
135135

136136
#=

0 commit comments

Comments
 (0)