Hello all, I have a question about basic statistics. Given a PDF value of 0.328161, how can I find out the value of -0.625 in R? It is like reversing the dnorm function but I do not know how to do it in R.> pdf.xb <- dnorm(-0.625)> pdf.xb[1] 0.328161> qnorm(pdf.xb)[1] -0.444997> pnorm(pdf.xb)[1] 0.628605 Many thanks, Edwin -- View this message in context: http://r.789695.n4.nabble.com/dnorm-and-qnorm-tp3040427p3040427.html Sent from the R help mailing list archive at Nabble.com.
On Nov 12, 2010, at 5:35 PM, Edwin Sun wrote:> > Hello all, > > I have a question about basic statistics. Given a PDF value of > 0.328161, > how can I find out the value of -0.625 in R? It is like reversing > the dnorm > function but I do not know how to do it in R. > >> pdf.xb <- dnorm(-0.625) > >> pdf.xb > [1] 0.328161 > >> qnorm(pdf.xb) > [1] -0.444997 > >> pnorm(pdf.xb) > [1] 0.628605 >Since only at the mode of dnorm will there be a unique solution, you will need to decide on which side of zero you want to work, apparently the negative side from the expected answer. Then you can use optim or optimize to minimize the difference between dnorm() and 0.328161 for arguments over an appropriate range: > f <- function (x,a) (dnorm(x)-a)^2 > xmin <- optimize(f, c(-1, 0), tol = 0.0001, a =0.328161) > xmin $minimum [1] -0.6250044 $objective [1] 8.71397e-13 David Winsemius, MD West Hartford, CT
Not sure if there's a pre-defined function for it, but use your basic math skills: the normal distribution is dnorm(x) = 1/(sqrt(2*pi)) * exp(-x^2/2), so the inverse function (on the interval [0, infinity] is f = function(x) {sqrt( -2*log(sqrt(2*pi) * x)) } Since the dnorm function is not 1-to-1, f is strictly speaking not the inverse (since the latter doesn't exist), but it is true that f(dnorm(x)) = abs(x). Test: x = seq(from = -2, to = 2, by = 0.01) plot(x, dnorm(x)) plot(x, f(dnorm(x)))> all.equal(abs(x), f(dnorm(x)))[1] TRUE Note again that f(dnorm(x)) = abs(x), not x, since the dnorm function is not 1-to-1. Peter On Fri, Nov 12, 2010 at 2:35 PM, Edwin Sun <csun at cfr.msstate.edu> wrote:> > Hello all, > > I have a question about basic statistics. ?Given a PDF value of 0.328161, > how can I find out the value of -0.625 in R? It is like reversing the dnorm > function but I do not know how to do it in R. > >> pdf.xb <- dnorm(-0.625) > >> pdf.xb > [1] 0.328161 > >> qnorm(pdf.xb) > [1] -0.444997 > >> pnorm(pdf.xb) > [1] 0.628605 > > Many thanks, > > > Edwin > > > -- > View this message in context: http://r.789695.n4.nabble.com/dnorm-and-qnorm-tp3040427p3040427.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >
There is no "reversing the dnorm function" -- dnorm is many to one in general (in the normal case, 2 to 1 except for the mean). How would you "reverse" dunif, for example?! However, with that understanding you could do a simple one dimensional search within the range you want via optimize(), as in> optimize(function(x)abs(dnorm(x) - .3286),lower=-5,upper = 0) ## or use squared error$minimum [1] -0.6228337 $objective [1] 4.817833e-06 -- Bert On Fri, Nov 12, 2010 at 2:35 PM, Edwin Sun <csun at cfr.msstate.edu> wrote:> > Hello all, > > I have a question about basic statistics. ?Given a PDF value of 0.328161, > how can I find out the value of -0.625 in R? It is like reversing the dnorm > function but I do not know how to do it in R. > >> pdf.xb <- dnorm(-0.625) > >> pdf.xb > [1] 0.328161 > >> qnorm(pdf.xb) > [1] -0.444997 > >> pnorm(pdf.xb) > [1] 0.628605 > > Many thanks, > > > Edwin > > > -- > View this message in context: http://r.789695.n4.nabble.com/dnorm-and-qnorm-tp3040427p3040427.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >-- Bert Gunter Genentech Nonclinical Biostatistics
Thank you all for the great help. I think the optimize function and approach solves my problem well. Edwin Sun -- View this message in context: http://r.789695.n4.nabble.com/dnorm-and-qnorm-tp3040427p3041962.html Sent from the R help mailing list archive at Nabble.com.