3
$\begingroup$

I have a dataset of around 100 different subjects

Some of them have a disease, some do not (roughly 60:40 disease:no disease)

They are subjected to a battery of 15 tests, to see if they are outside "normal" ranges.

Just plotting the values for the different tests for disease vs. non-disease as different colours (using matplot() in R), I can see that the different groups follow distinct patterns across the different features.

I then cluster the different groups (using hclust() in R) and if I cut the tree to make two clusters, the two groups separate fairly well into different clusters.

My aim is to devise a set of rules from these tests, so if we test a new patient, we can decide whether or not they have a disease.

So I need a classifier, to decide these rules, i.e. to work out which features to use, and what score cutoffs. What do people recommend?

$\endgroup$
6
  • $\begingroup$ It seems you want to use some kind of a supervised algorithm (where class membership is known in advance) as opposed to unsupervised methods (like clustering). Can you confirm that what you are after is simply devising a 'scoring rule' (Prob(individual i has disease)) from all 15 features? $\endgroup$
    – chl
    Commented Mar 26, 2012 at 17:43
  • $\begingroup$ Exactly. I did the clustering to look for "structure" in the data, i.e. if I could see difference in patterns of scores between dis vs. non-disease. However my aim is to devise a (ideally simple and intuitive) scoring rule $\endgroup$
    – Jim Bo
    Commented Mar 26, 2012 at 17:46
  • $\begingroup$ Not necessarily from all features.. it would also be great if we could find a sub-set that is as good as using all 15. $\endgroup$
    – Jim Bo
    Commented Mar 26, 2012 at 17:49
  • 1
    $\begingroup$ Were any of the 15 tests used to establish your current disease diagnoses, or was there a separate (and hopefully great) standard test that determined them? $\endgroup$ Commented Mar 26, 2012 at 18:21
  • 1
    $\begingroup$ Actually yes, currently the diagnosis is a composite score, along with biopsies & other measures. However I intend to build the classifier without using the tests and just using the biopsy/other measures to determine the class label, to avoid circularity $\endgroup$
    – Jim Bo
    Commented Mar 27, 2012 at 7:49

2 Answers 2

1
$\begingroup$

I just started taking the free probabilistic graphical models (PGM) course at www.coursera.org ( Stanford). I highly recommend watching Daphne Koller's lecture on Medical diagnosis, which is part of her week one lectures. She specifically discusses David Heckerman's (et. al) work on rule-based versus Bayes network approaches to medical diagnosis. In particular she discusses the ease of implementation and diagnosis accuracy improvement using a Bayes network when compared with their trying to use a rules-based approach.

$\endgroup$
2
  • $\begingroup$ Thanks! Alas, enrolment finished on the 25th, hopefully I will be able to re-enrol soon (I will keep looking for another way to view the lectures) $\endgroup$
    – Jim Bo
    Commented Mar 27, 2012 at 8:40
  • $\begingroup$ ...of course, if anyone knew of a link to the lectures that would be very useful... $\endgroup$
    – Jim Bo
    Commented Mar 28, 2012 at 8:39
0
$\begingroup$

Like chl suggested, you need a supervised classifier. I'd suggest either linear SVM, or a decision tree such as C4.5. Both have libraries with a lot of documentation. Linear SVM would give you a "score-like" classifier, something like "2 points if test1 is positive", and "3 points if test2 is positive". The disease is present if overall score is above some threshold. A decision tree would give you a series of decisions, such as "if test1 is positive, do test2, otherwise do test4".

As for feature selection, there are lots of different methods, but not too many standard ones. If you use a tree, then it's likely that not all features will be used along any given path. So if you do the tests sequentially, you will need fewer than 15 for most patients. If you go with SVM, each test will get a score; you can dump features with smallest (in absolute value) scores and try to re-do the SVM with fewer features. Yet another feature selection method is by using mutual information, but that would depend on individual features having good mutual information with the class label.

$\endgroup$
2
  • $\begingroup$ Thanks, I like the idea of using an SVM to make a points based score, I am investigating using e1071 R package. I suspect there is some redundancy/dependency in the data (i.e. I see some correlation between some of the test scores), I suppose I could take just one of the set of correlated features, and see how it affect performance $\endgroup$
    – Jim Bo
    Commented Mar 27, 2012 at 9:03
  • $\begingroup$ Hmm, I'm still a little stuck on how to go from the SVM result, to knowing what scores to give the different tests (I need to find the weights of the different features right?) Is e1701 suitable for this? If not do you know of any other R packages that R, and any documentation? $\endgroup$
    – Jim Bo
    Commented Mar 29, 2012 at 16:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.