Skip to content

Commit 29e7226

Browse files
fix and add tests (#173)
1 parent 95051a3 commit 29e7226

File tree

3 files changed

+92
-7
lines changed

3 files changed

+92
-7
lines changed

src/sieve_plateau.jl

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ function build_work_list(prefix, grm_ids; pval=0.05)
5757
end
5858
end
5959
end
60-
return reduce(vcat, transpose(influence_curves)), n_obs, file_tmlereport_pairs
60+
influence_curves = length(influence_curves) > 0 ? reduce(vcat, transpose(influence_curves)) : influence_curves
61+
return influence_curves, n_obs, file_tmlereport_pairs
6162
end
6263

6364

@@ -152,6 +153,15 @@ function save_results(outfilename, τs, variances, std_errors, file_queryreport_
152153
end
153154
end
154155

156+
function save_empty_results(outfilename, τs, file_queryreport_pairs)
157+
jldopen(outfilename, "w") do io
158+
io["TAUS"] = τs
159+
io["VARIANCES"] = []
160+
io["SOURCEFILE_REPORTID_PAIRS"] = file_queryreport_pairs
161+
io["STDERRORS"] = []
162+
end
163+
end
164+
155165

156166
corrected_stderrors(variances, n_obs) =
157167
sqrt.(view(maximum(variances, dims=1), 1, :) ./ n_obs)
@@ -166,10 +176,13 @@ function sieve_variance_plateau(parsed_args)
166176
grm, grm_ids = readGRM(parsed_args["grm-prefix"])
167177

168178
influence_curves, n_obs, file_queryreport_pairs = build_work_list(prefix, grm_ids; pval=pval)
169-
variances = compute_variances(influence_curves, grm, τs, n_obs)
170-
std_errors = corrected_stderrors(variances, n_obs)
171-
172-
save_results(outfilename, τs, variances, std_errors, file_queryreport_pairs)
179+
# If the work list is not empty
180+
if length(influence_curves) > 0
181+
variances = compute_variances(influence_curves, grm, τs, n_obs)
182+
std_errors = corrected_stderrors(variances, n_obs)
183+
save_results(outfilename, τs, variances, std_errors, file_queryreport_pairs)
184+
# Otherwise save empty structure
185+
else
186+
save_empty_results(outfilename, τs, file_queryreport_pairs)
187+
end
173188
end
174-
175-

test/sieve_plateau.jl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,4 +211,34 @@ end
211211
clean_hdf5estimates_files(prefix)
212212
end
213213

214+
@testset "Test sieve_variance_plateau empty work list" begin
215+
# In this case no p-value will make the threshold
216+
grm_ids = TMLEEpistasis.GRMIDs("data/grm/test.grm.id")
217+
prefix = "rs12_rs45"
218+
nb_estimators = 10
219+
build_results_files(grm_ids, prefix)
220+
outfilename = "rs12_rs45_sieve_variance.hdf5"
221+
parsed_args = Dict(
222+
"prefix" => prefix,
223+
"pval" => -1,
224+
"grm-prefix" => "data/grm/test.grm",
225+
"out" => outfilename,
226+
"nb-estimators" => nb_estimators,
227+
"max-tau" => 0.75
228+
)
229+
230+
sieve_variance_plateau(parsed_args)
231+
232+
results_file = jldopen(outfilename)
233+
@test size(results_file["TAUS"]) == (nb_estimators,)
234+
@test size(results_file["VARIANCES"]) == (0,)
235+
@test results_file["SOURCEFILE_REPORTID_PAIRS"] == []
236+
@test size(results_file["STDERRORS"]) == (0,)
237+
238+
close(results_file)
239+
240+
rm(outfilename)
241+
clean_hdf5estimates_files(prefix)
242+
end
243+
214244
end

test/summary.jl

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,48 @@ end
8484
end
8585

8686

87+
@testset "Test build_summary with empty sieve" begin
88+
grm_ids = TMLEEpistasis.GRMIDs("data/grm/test.grm.id")
89+
prefix = "rs12_rs45"
90+
summaryfilename = summary_filename(prefix)
91+
build_results_files(grm_ids, prefix)
92+
93+
TMLEEpistasis.save_empty_results(sieve_filename(prefix), [], [])
94+
parsed_args = Dict(
95+
"prefix" => prefix,
96+
"out" => summary_filename(prefix),
97+
"sieve" => true
98+
)
99+
100+
build_summary(parsed_args)
101+
102+
summary = CSV.read(summaryfilename, DataFrame)
103+
104+
@test summary.PHENOTYPE == ["cancer", "cancer", "height", "height", "bmi", "bmi"]
105+
@test summary.PHENOTYPE_TYPE == ["BINARY", "BINARY", "CONTINUOUS", "CONTINUOUS", "CONTINUOUS", "CONTINUOUS"]
106+
@test summary.QUERYNAME == ["QUERY_1", "QUERY_2", "QUERY_1", "QUERY_2", "QUERY_1", "QUERY_2"]
107+
@test summary.FILENAME_ORIGIN == ["rs12_rs45_batch_1_Bool.hdf5",
108+
"rs12_rs45_batch_1_Bool.hdf5",
109+
"rs12_rs45_batch_1_Real.hdf5",
110+
"rs12_rs45_batch_1_Real.hdf5",
111+
"rs12_rs45_batch_1_Real.hdf5",
112+
"rs12_rs45_batch_1_Real.hdf5"]
113+
@test summary.REPORT_KEY == ["1_1", "1_2", "1_1", "1_2", "2_1", "2_2"]
114+
@test eltype(summary.INITIAL_ESTIMATE) == Float64
115+
@test eltype(summary.ESTIMATE) == Float64
116+
@test eltype(summary.PVAL) == Float64
117+
@test eltype(summary.LWB) == Float64
118+
@test eltype(summary.UPB) == Float64
119+
for col in (:SIEVE_STDERR, :SIEVE_PVAL, :SIEVE_LWB, :SIEVE_UPB)
120+
@test eltype(summary[!, col]) == Missing
121+
end
122+
123+
clean_hdf5estimates_files(prefix)
124+
rm(sieve_filename(prefix))
125+
rm(summaryfilename)
126+
127+
end
128+
87129
end
88130

89131
true

0 commit comments

Comments
 (0)