"""D9C3 scoring function
Based on original source code from Mette Peters found at
https://www.synapse.org/#!Synapse:syn4308980
"""
from dreamtools.core.challenge import Challenge
import pandas as pd
[docs]class D9C3(Challenge):
"""A class dedicated to D9C3 challenge
::
from dreamtools import D9C3
s = D9C3()
filename = s.download_template()
s.score(filename)
Data and templates are downloaded from Synapse. You must have a login.
"""
def __init__(self, verbose=True, download=True, **kargs):
""".. rubric:: constructor
"""
super(D9C3, self).__init__('D9C3', verbose, download, **kargs)
#self._init()
self.sub_challenges = ['sc1', 'sc2', 'sc3']
print("GS is not released. Challenge not available.")
def _init(self):
if self._standalone is True:
return
# should download files from synapse if required.
self._download_data('q1.final.example.txt', 'syn2703452')
self._download_data('q1.example_submission.txt', 'syn2509073')
self._download_data('q2.final.example.txt', 'syn2703453')
self._download_data('q2.example_submission.txt', 'syn2509074')
self._download_data('q3.final.example.txt', 'syn2703454')
[docs] def score(self, filename, subname=None):
self._check_subname(subname)
if subname == 'sc1':
return self._score_q1(filename)
elif subname == 'sc2':
return self._score_q2(filename)
elif subname == 'sc3':
return self._score_q3(filename)
def _score_q1(self, filename):
self.prediction = pd.read_csv(filename, sep='\t')
self.goldstandard = self.prediction.copy()
#merge
#calculate correlation
#pearson on clin
#pearson on clin_gen
#spearman on clin
#spearman on clin_gen
# Question 2 - Discordance ------------------------------------------------
def _score_q2(self, filename):
#
# brier metric
pass
def _score_q3(self, filename):
#Question 3 - Predict change in MMSE from image features
# -----------------
"""wer case sample IDs ex: "sample8" which should be "Sample8"
predicted$ID <- gsub("sample", "Sample", predicted$ID)
combined = merge(predicted, observed, by.x='ID', by.y='Sample.ID')
if (nrow(combined) != nrow(observed)) {
stop("Sample IDs don't match up")
}
## predicted colnames = "ID", "MMSE", "Diagnosis"
## observed colnames = "Sample.ID", ..., "MMSE_Total", ..., "V1.Conclusion.Disease_Status", ...
## compute two statistics on the MMSE
pearson_mmse = cor(combined$MMSE, combined$MMSE_Total, method="pearson")
ccc_mmse = epi.ccc(combined$MMSE, combined$MMSE_Total, ci="z-transform", conf.level=0.95)
percent_correct_diagnosis = sum(combined$Diagnosis==combined$V1.Conclusion.Disease_Status) / nrow(combined) * 100.0
list(pearson_mmse=pearson_mmse,
ccc_mmse=ccc_mmse$rho.c$est,
percent_correct_diagnosis=percent_correct_diagnosis)
"""
pass
[docs] def download_template(self, subname=None):
# should return full path to a template file
raise NotImplementedError
if subname == 'sc1':
filename = self.getpath_template('q1.final.example.txt')
elif subname == 'sc2':
filename = self.getpath_template('q2.final.example.txt')
elif subname == 'sc3':
filename = self.getpath_template('q3.final.example.txt')
return filename
[docs] def download_goldstandard(self, subname=None):
# should return full path to a gold standard file
# GS is not released!
raise NotImplementedError