[R] Non-linear system of equations

Ravi Varadhan rvaradhan at jhmi.edu
Fri Apr 25 15:50:18 CEST 2008


Radka,

Generally, there is no need to increase `maxit' to beyond default.  If you
are unable to obtain a reasonable approximation to your system within
`maxit', then you should do the following (not necessarily in that order):

1.  Try a few different starting values and see if you can obtain a residual
closer to zero.
2.  Try a different method within "dfsane", try method=1 or method=3. 
3.  If neither (1) nor (2) works, then try a different algorithm, "sane".
4.  If none of the above steps is successful, then check your function
definition carefully for possible errors.

Ravi.
----------------------------------------------------------------------------
-------

Ravi Varadhan, Ph.D.

Assistant Professor, The Center on Aging and Health

Division of Geriatric Medicine and Gerontology 

Johns Hopkins University

Ph: (410) 502-2619

Fax: (410) 614-9625

Email: rvaradhan at jhmi.edu

Webpage:  http://www.jhsph.edu/agingandhealth/People/Faculty/Varadhan.html

 

----------------------------------------------------------------------------
--------


-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of Radka Pancheva
Sent: Friday, April 25, 2008 8:13 AM
To: R-help at r-project.org
Subject: Re: [R] Non-linear system of equations

Hello Paul,

Thank you for your quick answer. I have tried to use your advice and to
estimate the parameters of beta distribution with moments matching. This is
my code:


ex <- 0.3914877
ex2 <- 0.2671597

my.mm <- function(x){
	p <- x[1]
	q <- x[2]
	p <-  .Machine$double.eps
	q <-  .Machine$double.eps

	F <- rep(NA,2)

	F[1] <- p/(p + q)
	F[2]<- (p*q + (p + q + 1)*p^2)/((p + q + 1)*(p + q)^2)

	return(F)
}

p0 <- c(ex,ex2)

dfsane(par=p0, fn=my.mm,control=list(maxit=50000))

and I became the following output:

.
iteration:  3640  ||F(xn)|| =   0.7071068
iteration:  3641  ||F(xn)|| =   0. 7071068
.
iteration:  49990  ||F(xn)|| =   0. 7071068
iteration:  50000  ||F(xn)|| =   0. 7071068
$par
[1] -446.2791 -446.4034

$residual
[1] 0.5

$fn.reduction
[1] 0

$feval
[1] 828495

$iter
[1] 50001

$convergence
[1] 1

$message
[1] "Maximum limit for iterations exceeded"

I have tried maxiter=100000 but the output is the same. I know that ex and
ex2 are bringing the problems, but I am stuck with them. How can I make it
convergent?

Thank you,

Evgeniq

 >2008/4/25 Radka Pancheva <radica at abv.bg>:
 >>  I am trying to estimate the parameters of a bimodal normal distribution
using moments matching, so I have to solve a non-linear system of equations.
How can I solve the following simple example?
 >>
 >>  x^2 - y^2 = 6
 >>  x - y = 3
 >>
 >>  I heard about nlsystemfit, but I don't know how to run it exactly. I
have tried the following code, but it doesn't really work:
 >>
 >>
 >>  f1 <-y~ x[1]^2-x[2]^2-6
 >>  f2 <-z~ x[1]-x[2]-3
 >>  f  <- list(f1=0,f2=0)
 >>  nlsystemfit("OLS",f,startvals=c(0,0))
 >
 >You could try the recent package BB by Ravi Varadhan. The code could
 >be the following:
 >
 >library(BB)
 >
 >f <- function(x) {
 >  x1 <- x[1]
 >  x2 <- x[2]
 >
 >  F <- rep(NA, 2)
 >
 >  F[1] <- x1^2 - x2^2 - 6
 >  F[2] <- x1 - x2 - 3
 >
 >  return(F)
 >}
 >
 >p0 <- c(1,2)
 >dfsane(par=p0, fn=f,control=list(maxit=3000))
 >
 >I got the solution:
 >
 >x1 = 2.5
 >x2 = -0.5
 >
 >Paul
 >
 >______________________________________________
 >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.
 >

______________________________________________
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