Hi, I am trying to do parameter estimation with optim, but I can't get it to work quite right-- I have an equation X = Y where X is a gaussian, Y is a multinomial distribution, and I am trying to estimate the probabilities of Y( the mean and sd of X are known ), Theta1, Theta2, Theta3, and Theta4; I do not know how I can specify the constraint that Theta1 + Theta2 + Theta3 + Theta4 = 1 in optim. Is there another method/package that I should use for this? Also, I wonder if there's a more elegant way to code this equation in R; right now my function looks something like Y/rnorm( 10000, mean, sd), and I try to maximize it to 1; is it possible to "plug" the entire gaussian( instead of using rnorm ) into the equation? Thanks. Regards, -Dean
1. Have you considered parameterizing the problem in terms of (Theta1, Theta2, Theta3), and then computing Theta4 <- (1-Theta1-Theta2-Theta3) in the function you ask "optim" to optimize? 2. Beyond this, I don't understand what you are trying to do. Do you want to estimate a multinomial approximation to a normal distribution? If yes, are you given the mean and standard deviation of the normal distribution PLUS the break points? If yes, then what about the following: > Breaks <- 1:3 > Mean <- 0 > Sd <- 1 > Theta1 <- pnorm((Breaks[1]-Mean)/Sd) > Theta2 <- (pnorm((Breaks[2]-Mean)/Sd)-Theta1) > Theta3 <- (pnorm((Breaks[3]-Mean)/Sd)-Theta2) > Theta4 <- pnorm((Breaks[3]-Mean)/Sd, lower.tail=FALSE) > Breaks <- 1:3 > Mean <- 0 > Sd <- 1 > Theta1 <- pnorm((Breaks[1]-Mean)/Sd) > Theta2 <- (pnorm((Breaks[2]-Mean)/Sd)-Theta1) > Theta3 <- (pnorm((Breaks[3]-Mean)/Sd)-Theta2) > Theta4 <- pnorm((Breaks[3]-Mean)/Sd, lower.tail=FALSE) > Theta1;Theta2;Theta3;Theta4 [1] 0.8413447 [1] 0.1359051 [1] 0.862745 [1] 0.001349898 hope this helps. spencer graves Dean Lee wrote:> Hi, > I am trying to do parameter estimation with optim, but I can't get it > to work quite right-- I have an equation X = Y where X is a gaussian, > Y is a multinomial distribution, and I am trying to estimate the > probabilities of Y( the mean and sd of X are known ), Theta1, Theta2, > Theta3, and Theta4; I do not know how I can specify the constraint > that Theta1 + Theta2 + Theta3 + Theta4 = 1 in optim. Is there another > method/package that I should use for this? > Also, I wonder if there's a more elegant way to code this equation in > R; right now my function looks something like Y/rnorm( 10000, mean, > sd), and I try to maximize it to 1; is it possible to "plug" the > entire gaussian( instead of using rnorm ) into the equation? Thanks. > > Regards, > > -Dean > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html
Hi Spencer, Thanks for the reply. 1) When I was playing with optim before sometimes the probabilities came up to be negative. I am not sure what I did before, but now it seems to work correctly after I specify the lower and upper bounds on the Thetas using the L-BFGS-B method in optim. 2) No the break points are not given. But yes, I am trying to estimate a multinomial to a normal; sorry I wasn't being clear. What are some of the approaches that I can try in this case? Thanks. Regards, -Dean>From: Spencer Graves <spencer.graves at pdf.com> >To: Dean Lee <deanylee at hotmail.com> >CC: r-help at stat.math.ethz.ch >Subject: Re: [R] questions about optim >Date: Sat, 15 May 2004 13:38:38 -0700 > > 1. Have you considered parameterizing the problem in terms of >(Theta1, Theta2, Theta3), and then computing Theta4 <- >(1-Theta1-Theta2-Theta3) in the function you ask "optim" to optimize? > > 2. Beyond this, I don't understand what you are trying to do. Do >you want to estimate a multinomial approximation to a normal distribution? >If yes, are you given the mean and standard deviation of the normal >distribution PLUS the break points? If yes, then what about the following: > > > Breaks <- 1:3 > > Mean <- 0 > > Sd <- 1 > > Theta1 <- pnorm((Breaks[1]-Mean)/Sd) > > Theta2 <- (pnorm((Breaks[2]-Mean)/Sd)-Theta1) > > Theta3 <- (pnorm((Breaks[3]-Mean)/Sd)-Theta2) > > Theta4 <- pnorm((Breaks[3]-Mean)/Sd, lower.tail=FALSE) > > Breaks <- 1:3 > > Mean <- 0 > > Sd <- 1 > > Theta1 <- pnorm((Breaks[1]-Mean)/Sd) > > Theta2 <- (pnorm((Breaks[2]-Mean)/Sd)-Theta1) > > Theta3 <- (pnorm((Breaks[3]-Mean)/Sd)-Theta2) > > Theta4 <- pnorm((Breaks[3]-Mean)/Sd, lower.tail=FALSE) > > Theta1;Theta2;Theta3;Theta4 >[1] 0.8413447 >[1] 0.1359051 >[1] 0.862745 >[1] 0.001349898 > > hope this helps. spencer graves