[R] R: RE: R: Re: R: Re: chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails
Thanks for your message! Actually it works quite well for me too. If I then take the trace of the final result below, I end up with a number made up of both a real and an imaginary part. This does not probably mean much if the trace of the matrix below givens me info about the degrees of freedom of a model... Simona Messaggio originale Da: rvarad...@jhmi.edu Data: 25-nov-2009 18.55 A: simona.racio...@libero.it, p.dalga...@biostat.ku.dk Cc: r-help@r-project.org Ogg: RE: [R] R: Re: R: Re: chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails I do not understand what the problem is, as it works just fine for me: A - matrix(c(0.5401984,-0.3998675,-1.3785897,-0.3998675,1.0561872, 0.8158639,-1.3785897, 0.8158639, 1.6073119), 3, 3, byrow=TRUE) eA - eigen(A) chA - eA$vec %*% diag(sqrt(eA$val+0i)) %*% t(eA$vec) all.equal(A, Re(chA %*% t(chA))) Y - diag(c(1,2,3)) solve(chA %*% Y) 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: rvarad...@jhmi.edu Webpage: http://www.jhsph. edu/agingandhealth/People/Faculty_personal_pages/Varadhan.html -Original Message- From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On Behalf Of simona.racio...@libero.it Sent: Wednesday, November 25, 2009 9:59 AM To: p.dalga...@biostat.ku.dk Cc: r-help@r-project.org Subject: [R] R: Re: R: Re: chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails Dear Peter, thank you very much for your answer. My problem is that I need to calculate the following quantity: solve(chol(A)%*%Y) Y is a 3*3 diagonal matrix and A is a 3*3 matrix. Unfortunately one eigenvalue of A is negative. I can anyway take the square root of A but when I multiply it by Y, the imaginary part of the square root of A is dropped, and I do not get the right answer. I tried to exploit the diagonal structure of Y by using 2*2 matrices for A and Y. In this way the problem mentioned above disappears (since all eigenvalues of A are positive) and when I perform the calculation above I get approximately the right answer. The approximation is quite good. However it is an approximation. Any suggestion? Thank you very much! Simon Messaggio originale Da: p.dalga...@biostat.ku.dk Data: 23-nov-2009 14.09 A: simona.racio...@libero.itsimona.racio...@libero.it Cc: Charles C. Berrycbe...@tajo.ucsd.edu, r-help@r-project.org Ogg: Re: R: Re: [R] chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails simona.racio...@libero.it wrote: It works! But Once I have the square root of this matrix, how do I convert it to a real (not imaginary) matrix which has the same property? Is that possible? No. That is theoretically impossible. If A = B'B, then x'Ax = ||Bx||^2 = 0 for any x, which implies in particular that all eigenvalues of A should be nonnegative. Best, Simon Messaggio originale Da: p.dalga...@biostat.ku.dk Data: 21-nov-2009 18.56 A: Charles C. Berrycbe...@tajo.ucsd.edu Cc: simona.racio...@libero.itsimona.racio...@libero.it, r-h...@r- project.org Ogg: Re: [R] chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails Charles C. Berry wrote: On Sat, 21 Nov 2009, simona.racio...@libero.it wrote: Hi Everyone, I need to take the square root of the following matrix: [,1] [,2][,3] [1,] 0.5401984 -0.3998675 -1.3785897 [2,] -0.3998675 1.0561872 0.8158639 [3,] -1.3785897 0.8158639 1.6073119 I tried Choleski which fails. I then tried Choleski with pivoting, but unfortunately the square root I get is not valid. I also tried eigen decomposition but i did no get far. Any clue on how to do it?! If you want to take the square root of a negative definite matrix, you could use sqrtm( neg.def.mat ) from the expm package on rforge: http://r-forge.r-project.org/projects/expm/ But that matrix is not negative definite! It has 2 positive and one negative eigenvalue. It is non-positive definite. It is fairly easy in any case to get a matrix square root from the eigen decomposition: v%*%diag(sqrt(d+0i))%*%t(v) [,1] [,2] [,3] [1,] 0.5164499+0.4152591i -0.1247682-0.0562317i -0.7257079+0.3051868i [2,] -0.1247682-0.0562317i 0.9618445+0.0076145i 0.3469916-0.0413264i [3,] -0.7257079+0.3051868i 0.3469916-0.0413264i 1.0513849+0.2242912i ch - v%*%diag(sqrt(d+0i))%*%t(v) t(ch)%*% ch [,1] [,2] [,3] [1,] 0.5401984+0i -0.3998675-0i -1.3785897-0i [2,] -0.3998675-0i 1.0561872+0i
[R] R: Re: R: Re: chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails
Dear Peter, thank you very much for your answer. My problem is that I need to calculate the following quantity: solve(chol(A)%*%Y) Y is a 3*3 diagonal matrix and A is a 3*3 matrix. Unfortunately one eigenvalue of A is negative. I can anyway take the square root of A but when I multiply it by Y, the imaginary part of the square root of A is dropped, and I do not get the right answer. I tried to exploit the diagonal structure of Y by using 2*2 matrices for A and Y. In this way the problem mentioned above disappears (since all eigenvalues of A are positive) and when I perform the calculation above I get approximately the right answer. The approximation is quite good. However it is an approximation. Any suggestion? Thank you very much! Simon Messaggio originale Da: p.dalga...@biostat.ku.dk Data: 23-nov-2009 14.09 A: simona.racio...@libero.itsimona.racio...@libero.it Cc: Charles C. Berrycbe...@tajo.ucsd.edu, r-help@r-project.org Ogg: Re: R: Re: [R] chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails simona.racio...@libero.it wrote: It works! But Once I have the square root of this matrix, how do I convert it to a real (not imaginary) matrix which has the same property? Is that possible? No. That is theoretically impossible. If A = B'B, then x'Ax = ||Bx||^2 = 0 for any x, which implies in particular that all eigenvalues of A should be nonnegative. Best, Simon Messaggio originale Da: p.dalga...@biostat.ku.dk Data: 21-nov-2009 18.56 A: Charles C. Berrycbe...@tajo.ucsd.edu Cc: simona.racio...@libero.itsimona.racio...@libero.it, r-h...@r- project.org Ogg: Re: [R] chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails Charles C. Berry wrote: On Sat, 21 Nov 2009, simona.racio...@libero.it wrote: Hi Everyone, I need to take the square root of the following matrix: [,1] [,2][,3] [1,] 0.5401984 -0.3998675 -1.3785897 [2,] -0.3998675 1.0561872 0.8158639 [3,] -1.3785897 0.8158639 1.6073119 I tried Choleski which fails. I then tried Choleski with pivoting, but unfortunately the square root I get is not valid. I also tried eigen decomposition but i did no get far. Any clue on how to do it?! If you want to take the square root of a negative definite matrix, you could use sqrtm( neg.def.mat ) from the expm package on rforge: http://r-forge.r-project.org/projects/expm/ But that matrix is not negative definite! It has 2 positive and one negative eigenvalue. It is non-positive definite. It is fairly easy in any case to get a matrix square root from the eigen decomposition: v%*%diag(sqrt(d+0i))%*%t(v) [,1] [,2] [,3] [1,] 0.5164499+0.4152591i -0.1247682-0.0562317i -0.7257079+0.3051868i [2,] -0.1247682-0.0562317i 0.9618445+0.0076145i 0.3469916-0.0413264i [3,] -0.7257079+0.3051868i 0.3469916-0.0413264i 1.0513849+0.2242912i ch - v%*%diag(sqrt(d+0i))%*%t(v) t(ch)%*% ch [,1] [,2] [,3] [1,] 0.5401984+0i -0.3998675-0i -1.3785897-0i [2,] -0.3998675-0i 1.0561872+0i 0.8158639-0i [3,] -1.3785897-0i 0.8158639-0i 1.6073119-0i A triangular square root is, er, more difficult, but hardly impossible. -- O__ Peter Dalgaard Øster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~ - (p.dalga...@biostat.ku.dk) FAX: (+45) 35327907 -- O__ Peter Dalgaard Øster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~ - (p.dalga...@biostat.ku.dk) FAX: (+45) 35327907 __ 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.
[R] R: chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails
Thanks Chuck! It works! But Once I have the square root of this matrix, how do I convert it to a real (not imaginary) matrix which has the same property? Is that possible? Best, Simon Messaggio originale Da: cbe...@tajo.ucsd.edu Data: 21-nov-2009 18.11 A: simona.racio...@libero.itsimona.racio...@libero.it Cc: r-help@r-project.org Ogg: chol( neg.def.matrix ) WAS: Re: [R] Choleski and Choleski with pivoting of matrix fails On Sat, 21 Nov 2009, simona.racio...@libero.it wrote: Hi Everyone, I need to take the square root of the following matrix: [,1] [,2][,3] [1,] 0.5401984 -0.3998675 -1.3785897 [2,] -0.3998675 1.0561872 0.8158639 [3,] -1.3785897 0.8158639 1.6073119 I tried Choleski which fails. I then tried Choleski with pivoting, but unfortunately the square root I get is not valid. I also tried eigen decomposition but i did no get far. Any clue on how to do it?! If you want to take the square root of a negative definite matrix, you could use sqrtm( neg.def.mat ) from the expm package on rforge: http://r-forge.r-project.org/projects/expm/ HTH, Chuck Thanks, Simon __ 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. Charles C. Berry(858) 534-2098 Dept of Family/Preventive Medicine E mailto:cbe...@tajo.ucsd.edu UC San Diego http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901 __ 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.
[R] R: Re: chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails
It works! But Once I have the square root of this matrix, how do I convert it to a real (not imaginary) matrix which has the same property? Is that possible? Best, Simon Messaggio originale Da: p.dalga...@biostat.ku.dk Data: 21-nov-2009 18.56 A: Charles C. Berrycbe...@tajo.ucsd.edu Cc: simona.racio...@libero.itsimona.racio...@libero.it, r-h...@r- project.org Ogg: Re: [R] chol( neg.def.matrix ) WAS: Re: Choleski and Choleski with pivoting of matrix fails Charles C. Berry wrote: On Sat, 21 Nov 2009, simona.racio...@libero.it wrote: Hi Everyone, I need to take the square root of the following matrix: [,1] [,2][,3] [1,] 0.5401984 -0.3998675 -1.3785897 [2,] -0.3998675 1.0561872 0.8158639 [3,] -1.3785897 0.8158639 1.6073119 I tried Choleski which fails. I then tried Choleski with pivoting, but unfortunately the square root I get is not valid. I also tried eigen decomposition but i did no get far. Any clue on how to do it?! If you want to take the square root of a negative definite matrix, you could use sqrtm( neg.def.mat ) from the expm package on rforge: http://r-forge.r-project.org/projects/expm/ But that matrix is not negative definite! It has 2 positive and one negative eigenvalue. It is non-positive definite. It is fairly easy in any case to get a matrix square root from the eigen decomposition: v%*%diag(sqrt(d+0i))%*%t(v) [,1] [,2] [,3] [1,] 0.5164499+0.4152591i -0.1247682-0.0562317i -0.7257079+0.3051868i [2,] -0.1247682-0.0562317i 0.9618445+0.0076145i 0.3469916-0.0413264i [3,] -0.7257079+0.3051868i 0.3469916-0.0413264i 1.0513849+0.2242912i ch - v%*%diag(sqrt(d+0i))%*%t(v) t(ch)%*% ch [,1] [,2] [,3] [1,] 0.5401984+0i -0.3998675-0i -1.3785897-0i [2,] -0.3998675-0i 1.0561872+0i 0.8158639-0i [3,] -1.3785897-0i 0.8158639-0i 1.6073119-0i A triangular square root is, er, more difficult, but hardly impossible. -- O__ Peter Dalgaard Øster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~ - (p.dalga...@biostat.ku.dk) FAX: (+45) 35327907 __ 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.
[R] Choleski and Choleski with pivoting of matrix fails
Hi Everyone, I need to take the square root of the following matrix: [,1] [,2][,3] [1,] 0.5401984 -0.3998675 -1.3785897 [2,] -0.3998675 1.0561872 0.8158639 [3,] -1.3785897 0.8158639 1.6073119 I tried Choleski which fails. I then tried Choleski with pivoting, but unfortunately the square root I get is not valid. I also tried eigen decomposition but i did no get far. Any clue on how to do it?! Thanks, Simon __ 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.