Temi per i progetti software del corso di Linguaggi di programmazione per la bioinformatica.

	1. Filtraggio e selezione di geni correlati alla leucemia ALL ed AML
2. Diagnosi bio-molecolare di tumori con metodi di machine learning.
3. Analisi dell'affidabilita' di cluster individuati in dati di DNA microarray:
a) Diffuse Large B-Cell Lymphoma
b) Lung-tumor
c) Lung neuroendocrine tumor

Per ogni progetto dovra’ essere consegnata:
- Una breve relazione che contenga una descrizione sintetica: a) delle procedure e dei metodi adottati  b) dei risultati ottenuti, eventualmente corredato con tabelle e grafici per la presentazione dei risultati stessi.
- Il listato R degli script e delle funzioni implementate con commenti che descrivano per ogni funzione: a) Input: il significato di ogni argomento delle funzione b) Output: le caratteristiche ed il significato delle strutture dati generate dalle funzione c) una breve descrizione delle funzionalità della funzione stessa (cosa fa la funzione) d) Se la funzione e’ particolarmente complessa, descrizione sintetica dell’ algoritmo implementato (come fa la funzione ad implemetare le funzionalità di cui al punto c).
- Un dischetto con un unico file R che contenga tutte le funzioni implementate, oltre a file relativi  ai grafici, alle tabelle ed all’ output eventualmente generato dal sw.

	1. Filtraggio e selezione di geni correlati alla leucemia ALL ed AML
Si utilizzi la libreria genefilter per la selezione di geni correlati a stati funzionali specificati in 2 diversi insiemi di dati di espressione genica
1.  Analisi del data set eset (package Biobase)
1.1 Quanti sono i geni analizzati in eset? Quanti i campioni disponibili? Esistono fenotipi associati ai dati di espressione?
1.2 Si costruisca una funzione che implementi un filtro aspecifico che selezioni i geni di eset  i cui livelli di espressione siano superiori a 200 in almeno 5 campioni. 
1.3 Si costruisca una funzione generale che implementi un filtro aspecifico che selezioni i geni di eset i cui livelli di espressione siano superiori ad un valore x definibile dall’ utente in almeno n campioni. Tale funzione stampi sullo schermo le etichette associate ai geni selezionati
1.4 Si scriva una funzione filtro kUnderA che si possa utilizzare per un filtro aspecifico che selezioni i geni di eset i cui livelli di espressione siano inferiori ad un valore x definibile dall’ utente in almeno n campioni. Tale funzione stampi sullo schermo le etichette associate ai geni selezionati
1.5 Si costruisca un filtro specifico filter.t per la seconda covariata cov2 di eset basato sul test t di Student tramite la funzione filtro ttest di genefilter. La funzione filter.t deve poter permettere di scegliere un p-value arbitrario (compreso fra 0 e 1) e listare le etichette dei geni selezionati.
1.6 Si usi filter.t per individuare i geni differenzialmente espressi con p=0.1, p=0.05 e p=0.01 nel data set eset e li si salvi nei file esetp01.genes esetp005.genes esetp001.genes.
1.7. Si scriva infine una funzione filter.double che utilizzi in cascata entrambi i filtri del punto 1.3 e 1.5 e la si applichi al data set eset per diversi valori di di x, n e p-value.

2. Analisi del data set golubTrain (package golubeSets)
Tramite la funzione filter.t precedentemente implementata si individuino i geni differenzialmente espressi nel data set golubTrain rispetto alla variabile ALL.AML dello slot data frame pData dell’ oggetto phenoData contenuto in golubTrain.
Prima di applicare il filtro per la selezione dei geni si trasformino i livelli di espressione genica in modo che valori inferiori a 100 vengano portati a 100 e valori superiori a 16000 vengano portati a 16000.
Si memorizzino su file le liste  dei geni differenzialmente espressi per diversi valori del p-value (ad es: 0.1, 0.05, 0.01, 0.005, 0.001).
Per i geni la cui statistica di Student è maggiore, si stampi l’ istogramma delle intensita’ separata per ALL ed AML.

2. Diagnosi bio-molecolare di tumori con metodi di machine learning.
Si faccia riferimento lezione-vignette di Gentleman e Carey “Applications of Machine Learning to Microarray Data, SVM and friends”.
In particolare si ripetano le procedure mostrate nella sezione 1 (Preliminaries) , 4 (k nearest neighbors) e 5 (Support Vector Machines) utilizzando i package Biobase, genefilter, class, e1071 e golubEsets. 

1. Diagnosi bio-molecolare della forme ALL ed AML di leucemia tramite algoritmo kNN:
1.1 Si carichino i dati di espressione genica golubTrain e golubTest della library golubEsets e si effettui il preprocessing dei dati come desctitto nell sezione 1 di  “Applications of Machine Learning to Microarray Data, SVM and friends” di Gentleman e Carey.
1.2 Si scriva un funzione knn-test che calcoli l’ errore sul test set (utilizzando la funzione knn del package class) e stampi su schermo la confusion matrix, il numero di errori e la percentuale di errori. Tale funzione deve avere tra i suoi argomenti il parametro k per settare il numero di nearest neighbor da utilizzare per l’algoritmo.
1.3. Si applichi la funzione ai data set golubTrain e golubTest e si calcolino le matrici di confusione e gli errori per diversi valori di k.
1.4 Si calcoli poi l’ errore di leave-one-out sia sul training che sul test set per diversi valori di k, tramite una funzione che utilizzi la funzione knn.cv del package class.
1.5. Per i precedenti punti si rappresentino in modo opportuno i risultati ottenuti tramite tabelle e/o grafici.

2. Diagnosi bio-molecolare della forme ALL ed AML di leucemia tramite Support Vector Machine
2.1 Il preprocessing è identico a quello effetuato al punto 1.1
2.2 Si scriva una funzione svm-train-test che effettui il training di una SVM lineare (utilizzando la funzione svm del package e1071) e calcoli l’ errore (numero di errori, percentuale di errori e confusion matrix) sia sul training set golubTrain, sia sul test set golubTest. La funzione deve avere tra gli argomenti un parametro che consenta di scegliere il valore C corrispondente all’ argomento cost della funzione svm. 
2.3. Si applichi la funzione svm-train-test ai data set golubTrain e golubTest e si calcolino le matrici di confusione e gli errori per diversi valori di C (ad es: fra 0.001 e 1000).
2.4. Si calcoli l’ errore di leave-one-out sia sul training che sul test set per diversi valori di C, tramite una funzione che utilizzi la funzione svm del package e1071.
2.5 Per i precedenti punti si rappresentino in modo opportuno i risultati ottenuti tramite tabelle e/o grafici.

3. Analisi dell'affidabilita' di cluster individuati in dati di DNA microarray 

L' analisi dei dati di espressione genica permette di definire  sottoclassi patologiche a livello bio-molecolare, non identificabili attraverso tradizionali approcci istopatologici o immunoistochimici.
Gli algoritmi di clustering normalmente utilizzati per individuare i cluster (sottoclassi patologiche) non consentono pero' di valutare direttamente l' affidabiltà delle soluzioni ottenute.
Obiettivo del progetto è individuare clustering (insiemi di sottoclassi patologiche) affidabili tramite opportuni algoritmi di clustering e misure di affidabilità basate su proiezioni randomizzate dei dati di espressione genica. A tal fine si dovrà utilizzare la libreria R clusterv, che implementa misure di affidabilità dei cluster basate su proiezioni randomizzate.
Informazioni e tutorial sull' uso della libreria clusterv sono ottenibili dal sito web:
http://homes.dsi.unimi.it/~valenti/SW/clusterv
Utile è anche la lettura dell'articolo: 
G.Valentini “Clusterv: a tool for assessing the reliability of clusters discovered in DNA microarray data”, scaricabile da:
http://bioinformatics.oxfordjournals.org/cgi/reprint/bti817v1?ijkey=TF1uY26HNzMuWl&keytype=ref
Il file sorgente della libreria R  è scaricabile da: 
http://homes.dsi.unimi.it/~valenti/SW/clusterv-source
Il file Readme contiene informazioni relative ai file sorgente. Il tutorial ed il reference manual per l'utilizzo della libreria sono scaricabili dal sito web di clusterv.

Ogni gruppo analizzerà un diverso data set.
Per ogni data set si dovrà fornire un'analisi dell' affidabilità dei cluster ottenuti con diversi algoritmi di clustering:
a) Clustering gerarchico (usando il metodo di Ward e opzionalmente l' average linkage method)
b) c-mean
c) PAM (Prediction Around Medoids)
d) Fuzzy c-mean.
Tutti gli algoritmi di clustering sono già implementati nella libreria.

Per ogni data set e per ogni algoritmo di clustering si dovranno fornire le seguenti misure di affidabilità:
a) Overall stability index (indice S)
b) Stability index per ciascun cluster (indice s)
Si dovranno fornire tali indici per un numero di cluster k da 2 a 10 (almeno).
Per i 3 valori di k per cui si sono ottenuti i valori piu' elevati di S ed s, si dovranno fornire anche gli Assignment Confidence (AC) index relativi ad ogni singolo campione.

I risultati dovranno essere riportati in tabelle (tabelle risassuntive degli indici per ogni algoritmo e per diversi valori di k).
I clustering ottenuti dovranno essere rappresentati opprotunamente in tabelle o in dendrogrammi (altre rappresentazioni grafiche sono consentite, purchè permettano di mettere in relazione la composizione dei cluster con gli indici di stabilità ottenuti).
Si dovranno inoltre evidenziare le somiglianze e le differenze fra i cluster ottenuti con i diversi algoritmi, discutendo la affidabiltà/stabilità delle diverse soluzioni ottenute con i diversi algoritmi di clustering al variare del numero dei cluster k.

I data set dovranno essere rappresntati con opportune strutture dati (si consiglia di usare le classi del package Biobase di Bioconductor). Gli algoritmi di clustering e le misure di stabilità sono implementate nella libreria clusterv.

Gruppo a): Diffuse Large B-Cell Lymphoma
Il data set è scaricabile da:
http://homes.dsi.unimi.it/~valenti/DATA/MICROARRAY-DATA/Shipp-DLBCL-FL/
Il file Readme.Shipp-DLBCL-FL contiene informazioni sul data set.
Riferimento bibliografico relativo al data set:
Shipp, M. Et al. "Diffuse large B-cell Lymphoma outcome prediction by gene-expression profiling and supervised machine learning.", Nature Medicine vol.8(1) pp. 69-74, 2002.
   
Gruppo b): Lung-tumor
http://homes.dsi.unimi.it/~valenti/DATA/MICROARRAY-DATA/Bhattacharjee-Lung/
Il file Readme.Bhatta-Lung contiene informazioni sul data set.
Riferimento bibliografico relativo al data set:
Bhattacharjee, A. et al."Classification of human lung carcinoma by mRNA expression profiling reveals distinct adenocarcinoma subclasses", PNAS vol.98(24), pp.  13790—13795, 2001.

Gruppo c): Lung neuroendocrine tumor
Il file è scariacabile dal sito di GEO:
http://www.ncbi.nlm.nih.gov/geo
Si selezioni il data set il cui accession number è: GDS619
Conviene scaricare i file in formato SOFT (dalla finestra Data Set Record). 
Riferimento bibliografico relativo al data set:
Jones M.H.  et al. “Two prognostically significant subtypes of high-grade lung neuroendocrine tumours independent of small-cell and large-cell neuroendocrine carcinomas identified by gene expression profiles”, Lancet,  Mar 6;363(9411):775-81, 2004.