Hi there,

I am trying to use linear regression to solve the following equation -

y <- c(0.2525, 0.3448, 0.2358, 0.3696, 0.2708, 0.1667, 0.2941, 0.2333,
0.1500, 0.3077, 0.3462, 0.1667, 0.2500, 0.3214, 0.1364)
x2 <- c(0.368, 0.537, 0.379, 0.472, 0.401, 0.361, 0.644, 0.444, 0.440,
0.676, 0.679, 0.622, 0.450, 0.379, 0.620)
x1 <- 1-x2

# equation
lmFit <- lm(y ~ x1 + x2)

lmFit
Call:
lm(formula = y ~ x1 + x2)

Coefficients:
(Intercept)           x1           x2
    0.30521     -0.09726           NA

I would like to *constraint the coefficients of x1 and x2 to be between 0,1*.
Is there a way of adding constraints to lm?

I looked through the old help files and found a solution by Emmanuel using
least squares. The method (with modification) is as follows -

 Data1<- data.frame(y=y,x1=x1, x2=x2)

# The objective function : least squares.

e<-expression((y-(c1+c2*x1+c3*x2))^2)

foo<-deriv(e, name=c("c1","c2","c3"))

# Objective

objfun<-function(coefs, data) {

return(sum(eval(foo,env=c(as.list(coefs), as.list(data)))))

}

# Objective's gradient

objgrad<-function(coefs, data) {

return(apply(attr(eval(foo,env=c(as.list(coefs), as.list(data))),

 "gradient"),2,sum))

 }

D1.unbound<-optim(par=c(c1=0.5, c2=0.5, c3=0.5),

  fn=objfun,

gr=objgrad,

data=Data1,

 method="L-BFGS-B",

 lower=rep(0, 3),

upper=rep(1, 3))


D1.unbound


$par
         c1          c2          c3
0.004387706 0.203562156 0.300825550

$value
[1] 0.07811152

$counts
function gradient
       8        8

$convergence
[1] 0

$message
[1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"

Any suggestion on how to fix the error  "CONVERGENCE: REL_REDUCTION_OF_F <=
FACTR*EPSMCH"?

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to