[英]Calculate intersection point of two density curves in R
我有兩個包含 1000 個值(a 和 b)的向量,我從中創建了密度圖和直方圖。 我想檢索兩個圖交叉的坐標(或只是 y 值)(它是否檢測到幾個交叉點並不重要,我可以在之后區分它們)。 請在以下鏈接中找到數據。 樣本數據
xlim = c(min(c(a,b)), max(c(a,b)))
hist(a, breaks = 100,
freq = F,
xlim = xlim,
xlab = 'Test Subject',
main = 'Difference plots',
col = rgb(0.443137, 0.776471, 0.443137, 0.5),
border = rgb(0.443137, 0.776471, 0.443137, 0.5))
lines(density(a))
hist(b, breaks = 100,
freq = F,
col = rgb(0.529412, 0.807843, 0.921569, 0.5),
border = rgb(0.529412, 0.807843, 0.921569, 0.5),
add = T)
lines(density(b))
使用locate()不是最佳的,因為我需要從幾個圖中檢索它(但如果沒有其他可行的方法,將使用該方法)。 謝謝你的幫助。
我們計算兩個系列的密度曲線,注意使用相同的范圍。 然后,我們比較在每個 x 值處a
的 y 值是否大於b
。 當這種比較的結果翻轉時,我們知道界限已經交叉了。
df <- merge(
as.data.frame(density(a, from = xlim[1], to = xlim[2])[c("x", "y")]),
as.data.frame(density(b, from = xlim[1], to = xlim[2])[c("x", "y")]),
by = "x", suffixes = c(".a", ".b")
)
df$comp <- as.numeric(df$y.a > df$y.b)
df$cross <- c(NA, diff(df$comp))
points(df[which(df$cross != 0), c("x", "y.a")])
這給了你
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.