2015-04-29 2 views
2

Не уверен, должно ли это проходить перекрестное подтверждение или нет, но мы увидим. В основном я получил данные из инструмента только недавно (массы соединений от 0 до 630), который я Binned в 0.025 бункеров перед построением гистограммы, как показано ниже: - enter image description hereИдентификация точек данных между фоновым шумом для биндовых данных R

Я хочу, чтобы идентифицировать бункера, которые имеют высокую частоту и это выделяется из-за фонового шума (фоновый шум увеличивается при перемещении справа налево на a-xis). Представьте себе рисунок кривой на вершине точек, которые почти размыты вместе в черный кусок, а затем выберите бункеры, которые существуют над этой кривой, чтобы продолжить исследование, вот что я пытаюсь сделать. Я только что построил график плотности ядра, чтобы увидеть, могу ли я переложить это на мою гистограмму и использовать ее для определения точек, которые существуют над сюжетом. Тем не менее, график плотности никоим образом не влияет на это, поскольку плотности слишком малы (см. Второй график). Есть ли у кого-нибудь рекомендации относительно того, как я могу решить эту проблему? Синяя линия представляет собой функцию плотности участка наслаивали и красная линия представляет собой идеальное решение (нужен способ как-то автоматизировать это в R) enter image description here

Приведенные ниже данные только часть моего набора данных, так его не очень хорошее представление из моего сюжета (который содержит около 300 000 очков), и поскольку размеры моего бункера довольно малы (0.025), есть только огромное распространение данных (всего их насчитывается 25 000 или около того).

df <- read.table(header = TRUE, text = " 
    values 
1 323.881306 
2 1.003373 
3 14.982121 
4 27.995091 
5 28.998639 
6 95.983138 
7 2.0117459 
8 1.9095478 
9 1.0072853 
10 0.9038475 
11 0.0055748 
12 7.0964916 
13 8.0725191 
14 9.0765316 
15 14.0102531 
16 15.0137390 
17 19.7887675 
18 25.1072689 
19 25.8338140 
20 30.0151683 
21 34.0635308 
22 42.0393751 
23 42.0504938 
") 
bin <- seq(0, 324, by = 0.025) 
hist(df$values, breaks = bin, prob=TRUE, col = "grey") 
lines(density(df$values), col = "blue") 
+0

Создание (возможно, смоделированного) случайного примера проделает долгий путь, если люди помогут вам, а также обмен кода, конечно. Плотность ядра кажется отличным способом, какой пропускной способ вы использовали? Я бы попробовал кое-что и искал решение, если вы предоставите отправную точку. – Gregor

+0

: p должен обновить мой пост всего за секунду. Я не устанавливал какой-либо конкретный bandwithc, я просто использовал настройки по умолчанию. – user2062207

+0

. Что я сделал до сих пор, довольно просто. Пытался сделать это с помощью ggplot изначально, но из-за того, что размеры моего ящика невелики, он просто не летал. – user2062207

ответ

1

Предполагая, что вы имеете дело с вектором bin.densities, который имеет плотность для каждого бина, простой способ найти выбросы будет:

  1. взгляд на окно вокруг каждого бина, скажем + - 50 бункеров

    current.bin <- 1

    window.size <- 50

    window <- bin.densities[current.bin-window.size : current.bin+window.size]

  2. найти 95% верхний и нижний квантиль значение (или действительно любое значение вы думаете работы)

    lower.quant <- quantile(window, 0.05)

    upper.quant <- quantile(window, 0.95)

  3. затем сказать, что нынешний бин является останец если он выходит за пределы вашего диапазона квантилей.

    this.is.too.high <- (bin.densities[current.bin] > upper.quant

    this.is.too.low <- (bin.densities[current.bin] < lower.quant)

    #final result

    this.is.outlier <- this.is.too.high | this.is.too.low

Я на самом деле не проверял этот код, но это общий подход, который я бы. Вы можете играть с размером окна и процентом квантиля, пока результаты не станут разумными. Опять же, не совсем супер сложная математика, но, надеюсь, это помогает.

+0

Кажется, интересный способ сделать это, я дам ему сейчас – user2062207

+0

Хмм, имея проблемы с момента получения этого вектора bin.densities. Просто в настоящее время пытаюсь найти способ его вычисления. – user2062207

+0

Если вы назначаете гистограмму переменной, например: 'bin.hist <- hist (значения df $, breaks = bin, prob = TRUE, col =" gray ")', тогда вы может использовать 'bin.hist $ counts' как' bin.densities'. – cts1212

Смежные вопросы