[R] find maximum values on the density function of a bimodal distribution

David Carlson dcarlson at tamu.edu
Mon Apr 21 22:38:19 CEST 2014


This will work, as long as there are exactly 2 distinct modes:

> runs <- rle(sign(diff(d.rv$y)))
> length(runs$lengths) # There should be 4 runs if there are
exactly 2 modes
[1] 4
> mode1 <- runs$lengths[1]+1 
> mode2 <- length(d.rv$x)- runs$lengths[4]
> d.rv$y[c(mode1, mode2)] # The 2 modes:
[1] 0.04012983 0.04049404

--------------------------------------------------
David L Carlson
Listowner, Webmaster
http://people.tamu.edu/~dcarlson/nar/

----Original Message-----
From: r-help-bounces at r-project.org
[mailto:r-help-bounces at r-project.org] On Behalf Of Luigi
Marongiu
Sent: Monday, April 21, 2014 1:24 PM
To: r-help at r-project.org
Subject: [R] find maximum values on the density function of a
bimodal distribution

*dear all,I have a bimodal distribution and i would like to
identify the
two most frequent values. Using unimodal values i found from the
R archive
that is possible to identify the most frequent value, which
corresponds to
the peak of the density function:from Bert Gunter, Fri Mar 13
04rv <-
rbinom(10000,1,0.1) + rnorm(10000)d.rv = density(rv)d.x =
d.rv$xd.y =
d.rv$yd.rv.max =
d.rv$x[which.max(d.rv$y)]plot(d.rv)abline(v=d.rv.max)The
following is instead a bimodal distribution, so how to identify
the two
peak values?rv <-c(-0.161948986691092,    6.25551346546337,
14.4449902518518,    5.71035851092391,    14.2659690175213,
13.4326694168529,    2.25851352934142,    19.0283322756163,
18.7578638985237,    3.6079681449722,    12.8469831785319,
16.8172446560292,    0.586180794938773,    -2.78468096182699,
6.41435801855101,    5.40404032358274,    16.422996950473,
0.0146677573458032,    6.42413783291763,    16.9133720373153,
21.2106745914211,    4.04126872437582,    10.8506381906698,
8.74969277743266,    14.2820697977719,    15.9914414284944,
8.35395871093583,    22.322063211793,    14.3922587603495,
-0.889640152783791,    15.5590006991235,    13.8636215566311,
8.04175502056292,    -1.85932938527655,    3.0791620072771,
20.5240745935955,    3.68821147789088,    7.38116287748327,
8.13585591202069,    5.94733543506892,    7.77891267272758,
14.4774347329043,    0.309628817532129,    -9.0260821589798,
12.4102239527495,    -4.64595423395751,    17.3141235128072,
20.1952807795295,    -8.18424754421263,
-1.58917260547841)d.rv =
density(rv)d.x = d.rv$xd.y = d.rv$yd.rv.max =
d.rv$x[which.max(d.rv$y)]plot(d.rv)Thank you.Best wishes,Luigi*

	[[alternative HTML version deleted]]

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible
code.




More information about the R-help mailing list