3

我有一组 2 条曲线(每条曲线都有几百到几千个数据点),我想比较它们并获得一些相似性“分数”。实际上,我有超过 100 套要比较……我熟悉 R(或至少是 bioconductor)并想使用它。

我尝试了这个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 ???

请注意,向量的大小不同,它需要以某种方式归一化......知道吗?如果您查看这两条线,它们非常相似,我认为在第一步中,测量两条曲线下的面积并减去就可以了。我查看了帖子“R 中 2 条曲线下的阴影区域”,但这并不是我所需要的。

第二个问题(可选)是对于具有相同轮廓但幅度不同的线,我想将它们打分为非常相似,即使它们下方的区域很大:

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 ??

我希望生物学家假装向程序员提出问题是可以的......

如果需要,我很乐意提供一些现实生活中的例子。

提前致谢!

4

3 回答 3

2

除非它们的长度相等,否则它们不会形成通常意义上的成对 xy 值的曲线。前三个长度相等,并且在打包成矩阵后rcorr,HMisc 包中的函数返回:

> rcorr(as.matrix(dfrm))[[1]]
    c1 c1b c1c
c1   1   1  -1
c1b  1   1  -1
c1c -1  -1   1   # as desired if you scaled them to 0-1

c1 和 c4 向量的相关性:

> cor( c(0, 0.8, 0.9, 0.9, 0.5, 0.1, 0.5),
  c(0, 0.6, 0.7, 0.7, 0.3, 0.1, 0.3) )
[1] 0.9874975
于 2011-08-19T19:49:34.633 回答
0

如果您比较的蛋白质是相当接近的直系同源物,您应该能够获得您想要为其相似性评分的每一对的比对,或者整个束的多重比对。根据应用的不同,我认为后者会更严格。然后,我将仅提取那些对齐的氨基酸的折叠分数,以便所有配置文件具有相同的长度,并计算相关性度量或配置文件的平方归一化点积作为相似性度量。平方归一化点积或斯皮尔曼等级相关性对幅度差异不太敏感,这是您似乎想要的。这将确保您正在比较合理配对的元素(在对齐合理的范围内),并让您回答以下问题:“

于 2011-08-22T08:49:34.863 回答
0

我没有一个很好的答案,但我过去确实遇到过类似的问题,可能不止一次。我的方法是回答我自己是什么让我的曲线在我主观评估它们时相似(这里的科学术语是“眼球”:)。是曲线下的面积吗?我是否将曲线的线性平移、旋转或缩放(缩放)视为导致差异的原因?如果不是,我会通过选择的归一化去除所有我不关心的因素(例如,缩放曲线以覆盖 x 和 y 的相同范围)。

我相信这个主题有一个严格的数学理论,我会搜索“亲和力”“仿射”这个词。也就是说,我的原始/幼稚方法通常足以满足我正在做的工作。

你可能想在一些数学论坛上问这个问题。

于 2011-08-19T19:07:32.183 回答