Thanks for the reply! I got that figured out, but still have some problems with the quadratic programming. It seems that my Amat and dvec are incompatible. Amat is a matrix of zeros size: *2*J-3,J* and dvec is a vector of length *J*. There should be no problem, but apparently there is. The piece of code looks like this: Dmat <- matrix(0,nrow= J, ncol=J) diag(Dmat) <- 1 dvec <- rep(0,J) dvec dvec <- -hsmooth Aeq <- 0 beq <- 0 Amat <- matrix(0,2*J-3,J) bvec <- rep(0,2*J-3) for(j in 2:J) { Amat[j-1,j-1] = -1 Amat[j-1,j] = 1 bvec[j-1] = Delta1 } for(j in 3:J) { Amat[J-1+j-2,j] = -1/(Q[j] - Q[j-1]) Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) Amat[J-1+j-2,j-2]= -1/(Q[j-1] - Q[j-2]) bvec[J-1+j-2]= Delta2 } solution <- solve.QP(Dmat, dvec, Amat, bvec) 2018-06-14 15:52 GMT+03:00 Boris Steipe <boris.steipe at utoronto.ca>:> Keep replies on list please. > > You are not accessing a value from vector Q if you access the zero'th > element! > R > Q <- c(3, 5, 8) > R > Q[0] > numeric(0) > R > Q[1] > [1] 3 > R > Q[2] > [1] 5 > > In the first iteration of the loop j is 2 thus j-2 is 0 and that's the > reason for the error message: you are trying to replace a matrix element > with a zero-length (i.e. unassigned) numeric value. Perhaps, in your mind, > you are mixing up the index of a vector element and its value? If you need > two zeros to start your vector, do something like > > R > Q <- c(0, 0, Q) > R > Q > [1] 0 0 3 5 8 > > > Clear now? > B. > > > > > On 2018-06-14, at 01:22, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> > wrote: > > > > Many thanks for your message! > > > > The thing is that I need Q[j-2] to be zero for the first two iterations > because I don't have those values (J starts from 1). Do you have any idea > how to do it? > > > > Thanks again! > > > > Maija > > > > 2018-06-13 15:52 GMT+03:00 Boris Steipe <boris.steipe at utoronto.ca>: > > Q[j-2] gives you Q[0] in your first inner loop iteration. > > R arrays start at one. > > > > B. > > > > > > > On 2018-06-13, at 07:21, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> > wrote: > > > > > > Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) > > > > > >[[alternative HTML version deleted]]
The statement dvec <- -hsmooth looks like it might be the source of the problem, depending on what hsmooth is. On Tue, Jun 26, 2018 at 11:16 AM, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> wrote:> Thanks for the reply! I got that figured out, but still have some problems > with the quadratic programming. > > It seems that my Amat and dvec are incompatible. Amat is a matrix of zeros > size: *2*J-3,J* and dvec is a vector of length *J*. There should be no > problem, but apparently there is. The piece of code looks like this: > > Dmat <- matrix(0,nrow= J, ncol=J) > diag(Dmat) <- 1 > dvec <- rep(0,J) > dvec > dvec <- -hsmooth > Aeq <- 0 > beq <- 0 > Amat <- matrix(0,2*J-3,J) > bvec <- rep(0,2*J-3) > > for(j in 2:J) > { > Amat[j-1,j-1] = -1 > Amat[j-1,j] = 1 > bvec[j-1] = Delta1 > } > > for(j in 3:J) > { > Amat[J-1+j-2,j] = -1/(Q[j] - Q[j-1]) > Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) > Amat[J-1+j-2,j-2]= -1/(Q[j-1] - Q[j-2]) > bvec[J-1+j-2]= Delta2 > } > > solution <- solve.QP(Dmat, dvec, Amat, bvec) > > > 2018-06-14 15:52 GMT+03:00 Boris Steipe <boris.steipe at utoronto.ca>: > > > Keep replies on list please. > > > > You are not accessing a value from vector Q if you access the zero'th > > element! > > R > Q <- c(3, 5, 8) > > R > Q[0] > > numeric(0) > > R > Q[1] > > [1] 3 > > R > Q[2] > > [1] 5 > > > > In the first iteration of the loop j is 2 thus j-2 is 0 and that's the > > reason for the error message: you are trying to replace a matrix element > > with a zero-length (i.e. unassigned) numeric value. Perhaps, in your > mind, > > you are mixing up the index of a vector element and its value? If you > need > > two zeros to start your vector, do something like > > > > R > Q <- c(0, 0, Q) > > R > Q > > [1] 0 0 3 5 8 > > > > > > Clear now? > > B. > > > > > > > > > On 2018-06-14, at 01:22, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> > > wrote: > > > > > > Many thanks for your message! > > > > > > The thing is that I need Q[j-2] to be zero for the first two > iterations > > because I don't have those values (J starts from 1). Do you have any idea > > how to do it? > > > > > > Thanks again! > > > > > > Maija > > > > > > 2018-06-13 15:52 GMT+03:00 Boris Steipe <boris.steipe at utoronto.ca>: > > > Q[j-2] gives you Q[0] in your first inner loop iteration. > > > R arrays start at one. > > > > > > B. > > > > > > > > > > On 2018-06-13, at 07:21, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> > > wrote: > > > > > > > > Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) > > > > > > > > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >[[alternative HTML version deleted]]
Thanks for the reply! dvec, thus hsmooth, has the same length J. It shouldn't be the problem. 2018-06-26 11:24 GMT+03:00 Eric Berger <ericjberger at gmail.com>:> The statement > > dvec <- -hsmooth > > looks like it might be the source of the problem, depending on what > hsmooth is. > > > On Tue, Jun 26, 2018 at 11:16 AM, Maija Sirkj?rvi < > maija.sirkjarvi at gmail.com> wrote: > >> Thanks for the reply! I got that figured out, but still have some problems >> with the quadratic programming. >> >> It seems that my Amat and dvec are incompatible. Amat is a matrix of zeros >> size: *2*J-3,J* and dvec is a vector of length *J*. There should be no >> >> problem, but apparently there is. The piece of code looks like this: >> >> Dmat <- matrix(0,nrow= J, ncol=J) >> diag(Dmat) <- 1 >> dvec <- rep(0,J) >> dvec >> dvec <- -hsmooth >> Aeq <- 0 >> beq <- 0 >> Amat <- matrix(0,2*J-3,J) >> bvec <- rep(0,2*J-3) >> >> for(j in 2:J) >> { >> Amat[j-1,j-1] = -1 >> Amat[j-1,j] = 1 >> bvec[j-1] = Delta1 >> } >> >> for(j in 3:J) >> { >> Amat[J-1+j-2,j] = -1/(Q[j] - Q[j-1]) >> Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) >> Amat[J-1+j-2,j-2]= -1/(Q[j-1] - Q[j-2]) >> bvec[J-1+j-2]= Delta2 >> } >> >> solution <- solve.QP(Dmat, dvec, Amat, bvec) >> >> >> 2018-06-14 15:52 GMT+03:00 Boris Steipe <boris.steipe at utoronto.ca>: >> >> > Keep replies on list please. >> > >> > You are not accessing a value from vector Q if you access the zero'th >> > element! >> > R > Q <- c(3, 5, 8) >> > R > Q[0] >> > numeric(0) >> > R > Q[1] >> > [1] 3 >> > R > Q[2] >> > [1] 5 >> > >> > In the first iteration of the loop j is 2 thus j-2 is 0 and that's the >> > reason for the error message: you are trying to replace a matrix element >> > with a zero-length (i.e. unassigned) numeric value. Perhaps, in your >> mind, >> > you are mixing up the index of a vector element and its value? If you >> need >> > two zeros to start your vector, do something like >> > >> > R > Q <- c(0, 0, Q) >> > R > Q >> > [1] 0 0 3 5 8 >> > >> > >> > Clear now? >> > B. >> > >> > >> > >> > > On 2018-06-14, at 01:22, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> >> > wrote: >> > > >> > > Many thanks for your message! >> > > >> > > The thing is that I need Q[j-2] to be zero for the first two >> iterations >> > because I don't have those values (J starts from 1). Do you have any >> idea >> > how to do it? >> > > >> > > Thanks again! >> > > >> > > Maija >> > > >> > > 2018-06-13 15:52 GMT+03:00 Boris Steipe <boris.steipe at utoronto.ca>: >> > > Q[j-2] gives you Q[0] in your first inner loop iteration. >> > > R arrays start at one. >> > > >> > > B. >> > > >> > > >> > > > On 2018-06-13, at 07:21, Maija Sirkj?rvi <maija.sirkjarvi at gmail.com >> > >> > wrote: >> > > > >> > > > Amat[J-1+j-2,j-1]= 1/(Q[j] - Q[j-1]) + 1/(Q[j-1] - Q[j-2]) >> > > >> > > >> > >> > >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at 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/posti >> ng-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > >[[alternative HTML version deleted]]
G'day all, On Tue, 26 Jun 2018 11:16:55 +0300 Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> wrote:> It seems that my Amat and dvec are incompatible. Amat is a matrix of > zeros size: *2*J-3,J* and dvec is a vector of length *J*. There > should be no problem, but apparently there is. [...]solve.QP solves the quadratic program: min(-d^T b + 1/2 b^T D b) where A^T b >= b_0. Note the transpose. :) If dvec is of length *J*, then b will be of length J too, and Amat should be Jx(2J-3) so that its transpose is (2j-3)xJ, making it compatible for matrix multiplication with b. Cheers, Berwin --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
????? sos::findFn('{quadratic programming}') just identified 156 help pages in 68 packages containing the term "quadratic programming".? The function mentioned by Berwin Turlach, "solve.QP", is in package "quadprog", which has not been updated since 2016-12-20.? I've used qudprod successfully, but you might wish to consider some of the other options in package(s) more actively maintained. ????? The "print" method for sos::findFn('{quadratic programming}') produced two sheets in my default browser.? The first of these contained 156 rows for the 156 help pages in 68 packages, sorted by default by c('Count', 'MaxScore', 'TotalScore', 'Package', 'Score', 'Function').? The second sheet listed only the 68 packages sorted by c('Count', 'MaxScore', 'TotalScore', 'Package').? You can click on the column headers to get them sorted in different orders, if you want. ????? "sos::findFn" is for me the fastest literature search for anything statistical.? I often write the list of help pages and the package summary to an Excel file using the "writeFindFn2xls" function, then annotate the package summary with other information to help me decide which package(s) and function(s) to try. ????? Hope this helps. ????? Spencer Graves, lead author of "sos" On 2018-06-26 07:01, Berwin A Turlach wrote:> G'day all, > > On Tue, 26 Jun 2018 11:16:55 +0300 > Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> wrote: > >> It seems that my Amat and dvec are incompatible. Amat is a matrix of >> zeros size: *2*J-3,J* and dvec is a vector of length *J*. There >> should be no problem, but apparently there is. [...] > solve.QP solves the quadratic program: > min(-d^T b + 1/2 b^T D b) > where A^T b >= b_0. > > Note the transpose. :) > If dvec is of length *J*, then b will be of length J too, and Amat > should be Jx(2J-3) so that its transpose is (2j-3)xJ, making it > compatible for matrix multiplication with b. > > Cheers, > > Berwin > > --- > This email has been checked for viruses by Avast antivirus software. > https://www.avast.com/antivirus > > ______________________________________________ > R-help at 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.
Thanks for your reply! Unfortunately something is still wrong. After the transpose, dvec and Amat are still incompatible.> d <- -hsmooth > dvec <- t(d) > c <- dvec*AmatError in dvec * Amat : non-conformable arrays Moreover, I don't understand the following:> If dvec is of length *J*, then b will be of length J too.I believe the length of dvec comes from the number of variables and the length of b from the number of constraints. In this case they are not equal. 2018-06-26 15:01 GMT+03:00 Berwin A Turlach <berwin.turlach at gmail.com>:> G'day all, > > On Tue, 26 Jun 2018 11:16:55 +0300 > Maija Sirkj?rvi <maija.sirkjarvi at gmail.com> wrote: > > > It seems that my Amat and dvec are incompatible. Amat is a matrix of > > zeros size: *2*J-3,J* and dvec is a vector of length *J*. There > > should be no problem, but apparently there is. [...] > > solve.QP solves the quadratic program: > min(-d^T b + 1/2 b^T D b) > where A^T b >= b_0. > > Note the transpose. :) > If dvec is of length *J*, then b will be of length J too, and Amat > should be Jx(2J-3) so that its transpose is (2j-3)xJ, making it > compatible for matrix multiplication with b. > > Cheers, > > Berwin > > --- > This email has been checked for viruses by Avast antivirus software. > https://www.avast.com/antivirus > >[[alternative HTML version deleted]]