У меня есть набор из 2 кривых (каждая с точками данных от нескольких сотен до пары тысяч), которые я хочу сравнить и получить «оценку» сходства.На самом деле, у меня есть> 100 из этих наборов для сравнения ... Я знаком с R (или, по крайней мере, биокондуктором) и хотел бы использовать его.
Я пробовал функцию ccf()
, но я неслишком рад этому.
Например, если я сравниваю c1 со следующими кривыми:
c1 <- c(0, 0.8, 0.9, 0.9, 0.5, 0.1, 0.5)
c1b <- c(0, 0.8, 0.9, 0.9, 0.5, 0.1, 0.5) # perfect match! ideally score of 1
c1c <- c(1, 0.2, 0.1, 0.1, 0.5, 0.9, 0.5) # total opposite, ideally score of -1? (what would 0 be though?)
c2 <- c(0, 0.9, 0.9, 0.9, 0, 0.3, 0.3, 0.9) #pretty good, score of ???
Обратите внимание, что векторы не имеют одинаковый размер, и его необходимо нормализовать,как-то ... Есть идеи?Если вы посмотрите на эти 2 линии, они довольно похожи, и я думаю, что на первом этапе можно измерить площадь под 2 кривыми и вычесть.Я смотрю на пост «Затененная область под 2 кривыми в R», но это не совсем то, что мне нужно.
Второй вопрос (необязательный) заключается в том, что для линий, имеющих одинаковый профиль, но разную амплитуду, я быхотелось бы, чтобы они были очень похожими, хотя область под ними была бы большой:
c1 <- c(0, 0.8, 0.9, 0.9, 0.5, 0.1, 0.5)
c4 <- c(0, 0.6, 0.7, 0.7, 0.3, 0.1, 0.3) # very good, score of ??
Я надеюсь, что биолог, претендующий на постановку задачи программисту, в порядке ...
I 'Буду рад предоставить некоторые примеры из реальной жизни, если это необходимо.
Заранее спасибо!