@@ -38,7 +38,12 @@ def test_coloc(mock_study_locus_overlap: StudyLocusOverlap) -> None:
38
38
"rightStudyType" : "eqtl" ,
39
39
"chromosome" : "1" ,
40
40
"tagVariantId" : "snp" ,
41
- "statistics" : {"left_logBF" : 10.3 , "right_logBF" : 10.5 },
41
+ "statistics" : {
42
+ "left_logBF" : 10.3 ,
43
+ "right_logBF" : 10.5 ,
44
+ "left_beta" : 0.1 ,
45
+ "right_beta" : 0.2 ,
46
+ },
42
47
},
43
48
],
44
49
# expected coloc
@@ -62,15 +67,25 @@ def test_coloc(mock_study_locus_overlap: StudyLocusOverlap) -> None:
62
67
"rightStudyType" : "eqtl" ,
63
68
"chromosome" : "1" ,
64
69
"tagVariantId" : "snp1" ,
65
- "statistics" : {"left_logBF" : 10.3 , "right_logBF" : 10.5 },
70
+ "statistics" : {
71
+ "left_logBF" : 10.3 ,
72
+ "right_logBF" : 10.5 ,
73
+ "left_beta" : 0.1 ,
74
+ "right_beta" : 0.2 ,
75
+ },
66
76
},
67
77
{
68
78
"leftStudyLocusId" : "1" ,
69
79
"rightStudyLocusId" : "2" ,
70
80
"rightStudyType" : "eqtl" ,
71
81
"chromosome" : "1" ,
72
82
"tagVariantId" : "snp2" ,
73
- "statistics" : {"left_logBF" : 10.3 , "right_logBF" : 10.5 },
83
+ "statistics" : {
84
+ "left_logBF" : 10.3 ,
85
+ "right_logBF" : 10.5 ,
86
+ "left_beta" : 0.3 ,
87
+ "right_beta" : 0.5 ,
88
+ },
74
89
},
75
90
],
76
91
# expected coloc
@@ -134,6 +149,8 @@ def test_coloc_no_logbf(
134
149
"statistics" : {
135
150
"left_logBF" : None ,
136
151
"right_logBF" : None ,
152
+ "left_beta" : 0.1 ,
153
+ "right_beta" : 0.2 ,
137
154
"left_posteriorProbability" : None ,
138
155
"right_posteriorProbability" : None ,
139
156
}, # irrelevant for COLOC
@@ -152,6 +169,8 @@ def test_coloc_no_logbf(
152
169
[
153
170
StructField ("left_logBF" , DoubleType (), True ),
154
171
StructField ("right_logBF" , DoubleType (), True ),
172
+ StructField ("left_beta" , DoubleType (), False ),
173
+ StructField ("right_beta" , DoubleType (), False ),
155
174
StructField (
156
175
"left_posteriorProbability" , DoubleType (), True
157
176
),
@@ -176,6 +195,67 @@ def test_coloc_no_logbf(
176
195
), "COLOC should return a low h4 (traits are associated) when the input data has irrelevant logBF."
177
196
178
197
198
+ def test_coloc_no_betas (spark : SparkSession ) -> None :
199
+ """Test COLOC output when the input data has no betas."""
200
+ observed_overlap = StudyLocusOverlap (
201
+ (
202
+ spark .createDataFrame (
203
+ [
204
+ {
205
+ "leftStudyLocusId" : "1" ,
206
+ "rightStudyLocusId" : "2" ,
207
+ "rightStudyType" : "eqtl" ,
208
+ "chromosome" : "1" ,
209
+ "tagVariantId" : "snp" ,
210
+ "statistics" : {
211
+ "left_logBF" : 10.5 ,
212
+ "right_logBF" : 10.3 ,
213
+ "left_beta" : None ,
214
+ "right_beta" : None ,
215
+ "left_posteriorProbability" : None ,
216
+ "right_posteriorProbability" : None ,
217
+ }, # irrelevant for COLOC
218
+ }
219
+ ],
220
+ schema = StructType (
221
+ [
222
+ StructField ("leftStudyLocusId" , StringType (), False ),
223
+ StructField ("rightStudyLocusId" , StringType (), False ),
224
+ StructField ("rightStudyType" , StringType (), False ),
225
+ StructField ("chromosome" , StringType (), False ),
226
+ StructField ("tagVariantId" , StringType (), False ),
227
+ StructField (
228
+ "statistics" ,
229
+ StructType (
230
+ [
231
+ StructField ("left_logBF" , DoubleType (), False ),
232
+ StructField ("right_logBF" , DoubleType (), False ),
233
+ StructField ("left_beta" , DoubleType (), True ),
234
+ StructField ("right_beta" , DoubleType (), True ),
235
+ StructField (
236
+ "left_posteriorProbability" , DoubleType (), True
237
+ ),
238
+ StructField (
239
+ "right_posteriorProbability" , DoubleType (), True
240
+ ),
241
+ ]
242
+ ),
243
+ ),
244
+ ]
245
+ ),
246
+ )
247
+ ),
248
+ StudyLocusOverlap .get_schema (),
249
+ )
250
+ observed_coloc_df = Coloc .colocalise (observed_overlap ).df
251
+ assert (
252
+ observed_coloc_df .select ("betaRatioSignAverage" ).collect ()[0 ][
253
+ "betaRatioSignAverage"
254
+ ]
255
+ is None
256
+ ), "No betas results in None type."
257
+
258
+
179
259
def test_ecaviar (mock_study_locus_overlap : StudyLocusOverlap ) -> None :
180
260
"""Test eCAVIAR."""
181
261
assert isinstance (ECaviar .colocalise (mock_study_locus_overlap ), Colocalisation )
0 commit comments