我正在开展一个项目,我需要识别具有相同形状的线条,例如:
yrefer = c(0.2900,0.3189,0.4097,0.3609,0.3762,0.5849,0.7144)
例如,看看下面的图,我希望R将这两条红线识别为例如拟合形状,如果有一点偏差(比如参考线0.05(蓝色))。
所以我想编写一个代码,根据ycoördinates列表进行检查,如果这些ycoördinates符合yrefer线,则允许偏差为0.05。
我不确定这是否可能在R中,但如果我知道这里有人可以帮助我。
通知:我的意思是偏差为0.05:
假设我们有一条线:
1.2900 1.3189 1.4097 1.3609 1.3762 1.5849 1.7144
这将是完全相同的线,但然后比yrefer线高1,但是偏差为0.05我的意思是如果某些ycoördinates与你期望它们的差异0.05,所以在这个例子中我应该期待他们是永远高于1的yRefercoördinate,但如果他们中的一个高出0.98,我仍然会接受这个作为“拟合”线,因为它的偏差是< 0.05
。
为了澄清我画了一些可能性(当然还有更多的东西!)应该被接受为第一个y值正确:
我希望很清楚,如果不让我知道!
答案 0 :(得分:1)
只考虑不同的y均值。
newline<- c(1.25, 1.3189, 1.4097, 1.4609, 1.3762, 1.5249, 1.7144)
newline2<-newline+mean(yrefer)-mean(newline)
sd(newline2-yrefer) #Can use var or whatever you want here.
这些都可以打包成像。
这样的函数lindev<- function(x){
newline2<-x+mean(yrefer)-mean(x)
return(sd(newline2-yrefer))}
lindev(c(1.25, 1.3189, 1.4097, 1.4609, 1.3762, 1.5249, 1.7144))
请注意,这仅适用于x坐标相同的情况。
答案 1 :(得分:1)
我不认为约翰内斯&#39;回答概括,例如:
y_ref = c(0, 0, 0)
y_test = c(.03,.03, -.06) #then test_line fails even though, let:
y_test = y_test +.011
abs(y_test - y_ref) #never outside the .05 range
test_line(y_test) #failed
我想你想要这样的东西:
n = length(y_test)
d1 = y_test[-1] - y_test[-n]
d2 = y_ref[-1] - y_ref[-n]
max(cumsum(d2 - d1)) - min(cumsum(d2 - d1)) #shouldn't be >= .1
答案 2 :(得分:0)
y_ref <- c(0.2900,0.3189,0.4097,0.3609,0.3762,0.5849,0.7144)
y_test_1 <- c(1.2900, 1.3187, 1.4097, 1.3609, 1.3762, 1.5849, 1.7144)
y_test_2 <- c(1.2900, 1.2189, 1.4097, 1.3609, 1.3762, 1.5849, 1.7144)
test_line <- function(y_test) {
overall_deviation <- mean(y_test - y_ref)
residuals <- y_test - y_ref - overall_deviation
if (any(abs(residuals) > 0.05)) message("Failed")
else message("Passed")
}
test_line(y_test_1)
test_line(y_test_2)