2015-08-01 3 views
0

Я работаю над сравнением моделей метаболизма бактерий. Каждая модель имеет набор метаболитов и их концентрацию в течение 200 временных точек. Я в процессе сравнения моделей, чтобы сгруппировать их на основе их сходства. Один из методов, которым я следовал, - это то, что я сделал пару мудрых сравнений для каждой из пар метаболитов в двух моделях с использованием евклидова расстояния. Ниже приведены мои данные. Это sample data file.R: Сравнение различий между метаболическими моделями с дискретным преобразованием вейвлета

enter image description here

Я вычислен попарного евклидово расстояние для MET1 от модели А и MET1 от модели B. Аналогично вычисляются расстояния для всех общих метаболитов между 2 моделями (Met4 в модели А и Met4 в модели B) и суммировали расстояния, чтобы получить расстояние (несходство) между двумя моделями. Аналогично, я вычислил матрицу различий для всех моделей, и я использовал иерархическую кластеризацию для их кластеризации.

Теперь я хочу вычислить несходство моделей с использованием дискретной трансформации вейвэйля в качестве моей дистанционной меры. Однако я не смог найти метод в определении пакета о том, как сравнивать два временных ряда. Я хотел бы знать, как использовать Discrete Wavelet Transformation для вычисления расстояния несходства между 2 временными рядами и, следовательно, для моих моделей.

+1

Вы посмотрели [эту страницу] (http://dtw.r-forge.r-project.org/)? Я нашел его в Googling «динамическое изменение времени в r». – ulfelder

+0

Прошу прощения, я хотел знать о Дискретном преобразовании Вейвлет. Не динамическое деформирование времени. Я редактировал вопрос – SriniShine

ответ

0

Взгляните на пакет TSclust. Вот как вы примените его к вашим образцам данных.

require(TSclust) 

#read in the data 
model_a <- read.csv("~/Desktop/Model A.csv", header = TRUE, stringsAsFactors = FALSE) 
model_b <- read.csv("~/Desktop/Model B.csv", header = TRUE, stringsAsFactors = FALSE) 

#data must be in rows rather than columns 
model_a <- as.data.frame(t(model_a)) 

model_b <- as.data.frame(t(model_b)) 

#calculate dissimlarities between metabolites in models 1 and 2 
met1_DWT.diss <- as.numeric(diss.DWT(rbind(model_a['Met1', ], model_b['Met1', ]))) 
met1_DWT.diss 
[1] 90.80332 

met2_DWT.diss <- as.numeric(diss.DWT(rbind(model_a['Met2', ], model_b['Met2', ]))) 
met2_DWT.diss 
[1] 1.499241