r - 比较两条用户定义的曲线并对它们的相似性进行评分

标签 r geometry computational-geometry curve

我有一组 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 ???

请注意,向量的大小不同,需要以某种方式对其进行归一化……有什么想法吗? 如果你看一下那两条线,它们非常相似,我认为在第一步中,测量两条曲线下的面积并相减就可以了。我查看了帖子“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 ??

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

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

提前致谢!

最佳答案

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

> 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

关于r - 比较两条用户定义的曲线并对它们的相似性进行评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7126123/

相关文章:

r - 如何使用R从需要cookie的SSL页面下载压缩文件

image-processing - 从图像处理计算物体位置

arrays - 在数组中找到具有最小差异的一对的有效方法

python - 高效重复 numpy.where

R:加权 Joyplot/Ridgeplot/Density Plot?

r - 在 Web 访问 session 中查找请求的页面对的时间差

c++ - 用于快速射线相交的线段容器? (二维)

ios - 使用 objective-c 在iOS中制作一个没有图像的圆形按钮

computational-geometry - 找到两个多边形的公共(public)内点

r - 在 R 中创建大型矩阵