One could also examine the eigenvalues themselves: plot(log(abs(sort(-eigen(h9times4, T, T)$values))))
shows a graph with a definite gap between 9 and 10 suggesting that 9 is the right number. On 5/4/05, Ravi Varadhan <[EMAIL PROTECTED]> wrote: > For the example that Duncan just gave, using the "matrix.rank" function of > Spencer Graves (which uses singular value decomposition) I obtained the > following result: > > > exponent <- -(7:16) > > eps <- 10^exponent > > sapply(eps,mat=h9times4,function(x,mat)matrix.rank(mat,x)) > [1] 6 7 7 8 8 9 9 9 9 9 > > This tells me that the correct rank should be 9, since the rank stabilizes > for smaller tolerances. I realize that this may not work generally, and one > could create counter-examples to defeat this strategy. > > Best, > 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: [EMAIL PROTECTED] > -------------------------------------------------------------------------- > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:r-help- > > [EMAIL PROTECTED] On Behalf Of Duncan Murdoch > > Sent: Wednesday, May 04, 2005 3:32 PM > > To: Gabor Grothendieck > > Cc: mingan; r-help@stat.math.ethz.ch; Huntsinger,Reid > > Subject: Re: [R] rank of a matrix > > > > Gabor Grothendieck wrote: > > > In this case, try a lower tolerance (1e-7 is the default): > > > > > > > > >>qr(hilbert(9), tol = 1e-8)$rank > > > > > > [1] 9 > > > > But don't trust the results. For example, create a matrix with 4 > > identical copies of hilbert(9). This still has rank 9. It's hard to > > find, though: > > > > > h9 <- hilbert(9) > > > temp <- cbind(h9, h9) > > > h9times4 <- rbind(temp, temp) > > > > > > qr(h9times4,tol=1e-7)$rank > > [1] 7 > > > qr(h9times4, tol=1e-8)$rank > > [1] 10 > > > qr(h9times4, tol=1e-9)$rank > > [1] 11 > > > qr(h9times4, tol=1e-10)$rank > > [1] 12 > > > > > > There's a tolerance that gives the right answer (1.5e-8 works for me), > > but how would I know that in a real problem where I didn't already know > > the answer? > > > > Duncan Murdoch > > > > ______________________________________________ > > R-help@stat.math.ethz.ch mailing list > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide! http://www.R-project.org/posting- > > guide.html > ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html