簡體   English   中英

計算R中兩條密度曲線的交點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM