Tôi có một khối dữ liệu lỗ (10.000 - 50.000 giá trị cho mỗi chuỗi phép đo) và tôi muốn tự động xác định maxima/minima cục bộ trong ước lượng mật độ của phân phối của các giá trị này. Trong thực tế, tôi giả định rằng thường có hai đỉnh, cách nhau bởi một hố, và tôi muốn tìm hố đó tách hai đỉnh từ nhau để tách dữ liệu thành hai phần để xử lý tiếp. Nếu có thể, tôi cũng muốn biết vị trí của các đỉnh.Tìm cực đại/cực tiểu cục bộ trong R
Khi ước lượng mật độ có thể chứa những thay đổi cục bộ rất nhỏ, tôi muốn có khả năng điều chỉnh "độ nhạy". Điều tốt nhất tôi có thể tìm thấy cho đến nay là giải pháp này của @Tommy: https://stackoverflow.com/a/6836924/1003358 Dưới đây là một ví dụ:
library(ggplot2)
d <- density(faithful$eruptions, bw = "sj")
loc.max <- d$x[localMaxima(d$y)]
ggplot(faithful, aes(eruptions)) + geom_density(adjust=1/2) +
geom_vline(x=loc.max, col="red") +
xlab("Measured values")
Bây giờ, dữ liệu của tôi là ồn ào hơn nhiều:
d <- density(my.df$Values, bw = "sj")
loc.max <- d$x[localMaxima(d$y)]
ggplot(my.df, aes(Values)) + geom_density(adjust=1/2) +
geom_vline(x=loc.max, col="red") +
xlab("Measured values")
Cố gắng điều chỉnh các thông số (lưu ý rằng hai đỉnh "không mong muốn" ở đuôi đã được tìm thấy):
d <- density(my.df$Values, bw="nrd", adjust=1.2)
loc.max <- d$x[localMaxima(d$y)]
ggplot(my.df, aes(Values)) + geom_density(adjust=1/2) +
geom_vline(x=loc.max, col="red") +
xlab("Measured values")
Vì vậy, câu hỏi là:
1) Làm thế nào để tự động xác định đỉnh thực trong một tập dữ liệu ồn ào như vậy? 2) Làm thế nào để tìm ra các hố phân tách những đỉnh đó?
Làm thế nào để bạn xác định "đỉnh cao thực"? –
@SvenHohenstein Đó là một câu hỏi hay. Tôi đang gặp khó khăn trong việc nắm bắt khái niệm này một cách toán học. Nên có một cửa sổ cụ thể xung quanh đỉnh trong đó đỉnh này là giá trị lớn nhất. Ngoài ra, một cắt cho kích thước đỉnh tối thiểu (có thể liên quan đến trung vị) có thể giúp đỡ. Nếu tôi biết dữ liệu của tôi là hai mặt, hai đỉnh cao nhất với một cách hợp lý (tôi thừa nhận, điều này là một lần nữa mơ hồ) cửa sổ lớn nên kết quả. Nếu tôi không biết số lượng các đỉnh trước, có thể là một mức giảm cho giá trị tối đa. giá trị của một hố phân tách các đỉnh núi cùng với một cắt cho min. giá trị của một đỉnh sẽ giúp gì? – AnjaM
Phân tích dữ liệu phổ (sắc ký hoặc trắc quang) thường có vấn đề này, vì vậy bạn có thể thấy nếu bao gồm "spectr *" trong tìm kiếm của bạn để nhận dạng cao điểm. @cbeleites vừa là người tham gia SO vừa tham gia vào phát triển gói R đang hoạt động dọc theo các dòng đó. –