@@ -60,13 +60,22 @@ function estimands_from_variants(
60
60
estimand_constructor,
61
61
outcomes,
62
62
confounders;
63
+ extra_treatments= [],
63
64
outcome_extra_covariates= [],
64
65
positivity_constraint= 0. ,
65
66
verbosity= 1
66
67
)
67
68
estimands = []
68
69
for variant in variants
69
- treatments = treatments_from_variant (variant, dataset)
70
+
71
+ if isempty (extra_treatments)
72
+ treatments = treatments_from_variant (variant, dataset)
73
+ elseif length (extra_treatments) == 1
74
+ treatments = Dict (treatments_from_variant (variant, dataset)... , treatments_from_variant (string (extra_treatments[1 ]), dataset)... )
75
+ else
76
+ error (" GWIS mode only supports pairwise interaction with one extra treatment." )
77
+ end
78
+
70
79
local Ψ
71
80
try
72
81
Ψ = factorialEstimands (
@@ -171,13 +180,15 @@ function treatments_from_variant(variant::String, dataset::DataFrame)
171
180
end
172
181
173
182
function estimands_from_gwas (dataset, variants, outcomes, confounders;
183
+ extra_treatments= extra_treatments,
174
184
outcome_extra_covariates = [],
175
185
positivity_constraint= 0. ,
176
186
verbosity= 0
177
187
)
178
188
variants_groups = Iterators. partition (variants, length (variants) ÷ Threads. nthreads ())
179
189
estimands_tasks = map (variants_groups) do variants
180
190
Threads. @spawn estimands_from_variants (variants, dataset, ATE, outcomes, confounders;
191
+ extra_treatments= extra_treatments,
181
192
outcome_extra_covariates= outcome_extra_covariates,
182
193
positivity_constraint= positivity_constraint,
183
194
verbosity= verbosity
@@ -187,6 +198,24 @@ function estimands_from_gwas(dataset, variants, outcomes, confounders;
187
198
return vcat (estimands_partitions... )
188
199
end
189
200
201
+ function estimands_from_gwis (dataset, variants, outcomes, confounders;
202
+ extra_treatments= extra_treatments,
203
+ outcome_extra_covariates = [],
204
+ positivity_constraint= 0. ,
205
+ verbosity= 0
206
+ )
207
+ variants_groups = Iterators. partition (variants, length (variants) ÷ Threads. nthreads ())
208
+ estimands_tasks = map (variants_groups) do variants
209
+ Threads. @spawn estimands_from_variants (variants, dataset, AIE, outcomes, confounders;
210
+ extra_treatments= extra_treatments,
211
+ outcome_extra_covariates= outcome_extra_covariates,
212
+ positivity_constraint= positivity_constraint,
213
+ verbosity= verbosity
214
+ )
215
+ end
216
+ estimands_partitions = fetch .(estimands_tasks)
217
+ return vcat (estimands_partitions... )
218
+ end
190
219
191
220
get_only_file_with_suffix (files, suffix) = files[only (findall (x -> endswith (x, suffix), files))]
192
221
@@ -210,7 +239,7 @@ function get_genotypes_from_beds(bedprefix)
210
239
end
211
240
212
241
function make_genotypes (genotype_prefix, config, call_threshold)
213
- genotypes = if config[" type" ] == " gwas"
242
+ genotypes = if config[" type" ] == " gwas" || config[ " type " ] == " gwis "
214
243
get_genotypes_from_beds (genotype_prefix)
215
244
else
216
245
variants_set = Set (retrieve_variants_list (config[" variants" ]))
@@ -263,10 +292,19 @@ function inputs_from_config(config_file, genotypes_prefix, traits_file, pcs_file
263
292
elseif config_type == " gwas"
264
293
variants = filter (!= (" SAMPLE_ID" ), names (genotypes))
265
294
estimands_from_gwas (dataset, variants, outcomes, confounders;
295
+ extra_treatments= extra_treatments,
266
296
outcome_extra_covariates= outcome_extra_covariates,
267
297
positivity_constraint= positivity_constraint,
268
298
verbosity= verbosity
269
299
)
300
+ elseif config_type == " gwis"
301
+ variants = filter (!= (" SAMPLE_ID" ), names (genotypes))
302
+ estimands_from_gwis (dataset, variants, outcomes, confounders;
303
+ extra_treatments= extra_treatments,
304
+ outcome_extra_covariates= outcome_extra_covariates,
305
+ positivity_constraint= positivity_constraint,
306
+ verbosity= verbosity
307
+ )
270
308
else
271
309
throw (ArgumentError (string (" Unknown extraction type: " , config_type, " , use any of: (flat, groups, gwas)" )))
272
310
end
0 commit comments