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

1. Preprocessing e normalizzazione di dati di cDNA microarray.
2. Filtraggio e selezione di geni correlati alla leucemia ALL ed AML
3. Diagnosi bio-molecolare di tumori con metodi K-nearest neighbour e Support Vector Machine.

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 delle funzioni implementate con commenti che descrivano il significato di ogni funzione, dei suoi argomenti e dei valori ritornati dalla funzione stessa.
- Un dischetto con un unico file R che contenga tutte le funzioni implementate ed i grafici, le tabelle ed i file eventualmente generati dal sw.

1. Preprocessing e normalizzazione di dati di cDNA microarray.
Si consideri il data set swirl che raggruppa un batch di esperimenti di espressione genica per lo studio dello sviluppo nei vertebrati.
Si effettuino le seguenti procedure di controllo di qualità, pre-processing e normalizzazione dei dati, utilizzando i package marray di bioconductor e scrivendo le corrispondenti funzioni R:

1. Visualizzazione dei dati raw per ognuno dei 4 esperimenti:
- Visualizzazione della matrice dei livelli di intensita’ di background per Cy3 e per Cy5
- Visualizzazione della matrice dei livelli di intensita’ di foreground per Cy3 e per Cy5
- Memorizzazione delle relative immagini in file jpeg e postscript

2. Preprocessing e normalizzazione.
- Normalizzazione globale rispetto alla mediana
- Normalizzazione within print tip tramite la funzione di regressione locale loess
- Normalizzazione di scala MAD (senza location normalization tramite loess)

3. Visualizzazione degli array normalizzati.
- Visualizzazione tramite boxplot:
- Visualizzazione tramite scatterplot

4. Ripetere i punti 1, 2 e 3, ma considerando solo la prima meta’ dei geni localizzata nelle prime 2 righe e 4 colonne della grid matrix dei cDNA microarray
5. Visualizzare tramite la funzione image solo il 5% degli spot piu’ intensi ed il 5% degli spot meno intensi per le intensita’ di foreground per ognuno dei 4 esperimenti  

2. 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.

3. Diagnosi bio-molecolare di tumori con metodi K-nearest neighbour e Support Vector Machine.
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.