---------- Forwarded message ---------- From: niharika singhal <niharikasinghal1...@gmail.com> Date: Sun, Aug 27, 2017 at 11:57 AM Subject: Re: Find maxima of a function To: "David Winsemius [via R]" <ml+s789695n4745009...@n4.nabble.com>, "Ismail SEZEN [via R]" <ml+s789695n4744993...@n4.nabble.com>, Ulrik Stervbo <ulrik.ster...@gmail.com>
Dear David and Ismail, The actual problem is I am getting the parameters from the Kmeans cluster on the data set obtained from the mclust package. In mclust method I am changing the value of G according to user input, so the number of means, sigma and the coefficien mixture I will get is not fixed, It can be 3 or 4or5 or 10. It will all depend on the user. Then on the result of kmeans, I wanted to find the maxima so that I can use Normalized probability formula further for my logic and in order to do that I used Newton's method and that was implemented in the optimr package. I was getting the wrong result so I used distr package in order to check the problem and I figured out I was getting the wrong maxima. So I can to the conclusion which I have posted as my query. PS: I am able to use distr package without any problem. And I want to use dnorm because I have a Gaussian mixture model, so I did not want to use rnorm. I hope you get what my problem is now. I will try both of your solution, which uses the same function and sees if it helps me. I am struck at this point from almost 4 weeks and it is delaying my work a lot. I really appreciate all your help Thanks & Regards Niharika SInghal On Sat, Aug 26, 2017 at 10:37 PM, David Winsemius [via R] < ml+s789695n4745009...@n4.nabble.com> wrote: > > > On Aug 26, 2017, at 12:13 PM, Ismail SEZEN <[hidden email] > <http:///user/SendEmail.jtp?type=node&node=4745009&i=0>> wrote: > > > > > >> On 26 Aug 2017, at 16:39, niharika singhal <[hidden email] > <http:///user/SendEmail.jtp?type=node&node=4745009&i=1>> wrote: > >> > >> Hi, > >> > >> Thanks for your mail, and time > >> > >> It is not working for some arguments, when mean value is like >6. > >> > >> > >> case > >> > >> mc0 <- c(0.08844446,0.1744455,0.1379778,0.1209769,0.1573065,0. > >> 1134463,0.2074027) > >> > >> rv <-UnivarMixingDistribution(Norm(486.4255, 53.24133), > >> > >> Norm(664.0713, 3.674773), > >> > >> Norm(669.0484, 4.101381), > >> > >> Norm(677.1753, 4.869985), > >> > >> Norm(683.2635, 7.288175), > >> > >> Norm(727.6229, 37.64198), > >> > >> Norm(819.2011, 57.06655), > >> > >> mixCoeff=mc0/sum(mc0)) > >> > >> plot(rv, to.draw.arg="d") > >> > >> > >> I am getting 731.1345 from the code you have provide > >> > >> > >> It is part of a code, so it was difficult to write a reproducible code > >> > >> I have tried to use optimr but it gives me the local maxima, now I am > >> struck with the problem of how to get the global maxima > >> > > > > This is basically an optimization problem so it’s nothing to do with > distr package and UnivarMixingDistribution function. Also I’m not able to > install distr package because of an error. > > > str(rv) > Formal class 'AbscontDistribution' [package "distr"] with 12 slots > ..@ gaps : num [1:2, 1:2] 259 1037 295 1063 > ..@ img :Formal class 'Reals' [package "distr"] with 2 slots > .. .. ..@ dimension: num 1 > .. .. ..@ name : chr "Real Space" > ..@ param : NULL > ..@ r :function (n) > ..@ d :function (x, log = FALSE) > ..@ p :function (q, lower.tail = TRUE, log.p = FALSE) > ..@ q :function (p, lower.tail = TRUE, log.p = FALSE) > ..@ .withSim : logi FALSE > ..@ .withArith : logi TRUE > ..@ .logExact : logi FALSE > ..@ .lowerExact: logi FALSE > ..@ Symmetry :Formal class 'NoSymmetry' [package "distr"] with 2 slots > .. .. ..@ type : chr "non-symmetric distribution" > .. .. ..@ SymmCenter: NULL > > str(density(rv)) > Error in density.default(rv) : argument 'x' must be numeric > > str(density(rv@r(1000)) > + ) > List of 7 > $ x : num [1:512] 297 298 300 301 302 ... > $ y : num [1:512] 4.39e-07 6.40e-07 9.15e-07 1.29e-06 1.78e-06 ... > $ bw : num 10.5 > $ n : int 1000 > $ call : language density.default(x = rv@r(1000)) > $ data.name: chr "rv@r(1000)" > $ has.na : logi FALSE > - attr(*, "class")= chr "density" > > > > max( density(rv@r(10000))$y ) > [1] 0.02133529 > > which.max( density(rv@r(10000))$y ) > [1] 259 > > > > my.instance <- rv@r(10000) # need to creat an immutable value since > this is a pseuado-random number series. > > which.max( density(my.instance)$y ) # location of x and y values for > global max > [1] 263 > > density(my.instance)$x[ which.max( density(my.instance)$y )] # x value > that yields global max > [1] 669.8586 > > density(my.instance)$y[ which.max( density(my.instance)$y )] value at > max. > [1] 0.02035133 > > > > > > > an you create an example by rnorm function? or use dput to share x and y > outputs of UnivarMixingDistribution function and I can look for the issue. > > > > Also You might have multiple maximas has same maximum y-values (for > instance, y = sin(x)) and this definition is relevant to defined interval. > For instance again, we can talk about a global extremum for a function like > y = ax^2+bx + c. We know we will have only a single extremum point (maxima > or minima). For higher order functions, we can talk about only local > maximas. So, I assume you want to obtain maximum one of this local maximas, > right? > > > > If yes, why don’t we find the maximum y-value and corresponding x-value > as follows? > > > > y <- c(1,2,3,4,3,2,3,4,5,6,7,8,9,8,7,6,5,6,7,6,5) > > x <- 1:length(y) > > > > fun <- splinefun(x = x, y = y, method = "n") > > x2 <- seq(1, max(x), 0.1) > > y2 <- fun(x2) > > plot(x, y, type = "l") > > lines(x2, y2, col = "red") > > > > max.x <- optimize(fun, interval = range(x), maximum = TRUE) > > print(max.x) # x coordinate of global maximum of y by spline and > optimize > > x[which(y == max(y))] # global maximum of dicrete x-y vectors > > > > > > spline function uses cubic spline method to obtain the undefined values > in a discrete series and optimize function calculates EXACT LOCATION of the > extremum. I suspect we have a communication failure :) > > > > ______________________________________________ > > [hidden email] <http:///user/SendEmail.jtp?type=node&node=4745009&i=2> > mailing list -- To UNSUBSCRIBE and more, see > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide http://www.R-project.org/posti > ng-guide.html > > and provide commented, minimal, self-contained, reproducible code. > > David Winsemius > Alameda, CA, USA > > 'Any technology distinguishable from magic is insufficiently advanced.' > -Gehm's Corollary to Clarke's Third Law > > ______________________________________________ > [hidden email] <http:///user/SendEmail.jtp?type=node&node=4745009&i=3> > mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posti > ng-guide.html > and provide commented, minimal, self-contained, reproducible code. > > ------------------------------ > If you reply to this email, your message will be added to the discussion > below: > http://r.789695.n4.nabble.com/Find-maxima-of-a-function-OR-o > ptimization-of-a-Function-tp4744989p4745009.html > To unsubscribe from Find maxima of a function OR optimization of a > Function, click here > <http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4744989&code=bmloYXJpa2FzaW5naGFsMTk5MEBnbWFpbC5jb218NDc0NDk4OXwtNDI2MzAyOTM1> > . > NAML > <http://r.789695.n4.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.