Dear Uwe, thanks for the response. I knew my matrix was almost singular, but is there any way to implement the algorithm is solve(base) with a spam-matrix?
As workaround, I might add a ridge penalty: ApP <- A+10^-1*diag.spam(nrow(A)) solve(ApP) but this would completely jeopardize other parts of my model. Thanks again, Giancarlo ________________________________________ From: Uwe Ligges [lig...@statistik.tu-dortmund.de] Sent: Saturday, February 09, 2013 8:04 PM To: Camarda, Carlo Giovanni Cc: r-h...@stat.math.ethz.ch Subject: Re: [R] impossible to invert a spam-object, but possible when it's a matrix-object On 05.02.2013 13:29, Camarda, Carlo Giovanni wrote: > Dear R-users, > > a question concerning sparse matrices in package "spam" (spam_0.29-2). > > On one hand I have a spam object (n X n) from which I cannot compute the > inverse. On the other hand, if I convert this object in a plain matrix, I can > find the inverse without any problem. > > Specifically I get the following error message: > Error in chol.spam(a, ...) : > Singularity problem when calculating the Cholesky factor. > > Obviously I get similar behaviour when I compute determinants of these > objects. > > Please see below a toy-example which I created based on my actual problem. > Different algorithms are used to compute the inverse - and you are rather close to singularity: kappa(A) results in 59638727. Best, Uwe Ligges > Thanks in advance for any help, > GC > > > library(spam) > ## creating a spam matrix A > ent <- c(2312.12324929972,-2000,1000,-2000,1000,-2000, > 5031.91011235955,-2000,-2000,1000,-1,1000,-2000, > 2049.8595505618,-2000,1000,-1,-2000,5036.89635854342, > -2000,1000,-2000,1,-2000,-2000,8119.66292134831,-2000, > -2000,-2000,1000,-2000,5058.83426966292,-2000,-1,1000, > -2000,2051.85434173669,-2000,1000,1,1000,-2000,-2000, > 5043.87640449438,-2000,1,1000,-2000,1000,-2000, > 2110.68820224719,-1,1,0,-1,1,-1,1) > rr <- as.integer(c(1,6,12,18,24,29,35,41,47,52,55,57,59)) > cc <- as.integer(c(1,2,3,4,7,1,2,3,5,8,10,1,2,3,6,9,11,1, > 4,5,6,7,10,2,4,5,6,8,3,4,5,6,9,12,1,4, > 7,8,9,11,2,5,7,8,9,12,3,6,7,8,9,2,4,10,3,7,6,8)) > di <- as.integer(c(12,12)) > A <- new("spam", > entries=ent, > colindices=cc, > rowpointers=rr, > dimension=di) > ## calculate the determinant > det(A) > ## computes the inverse > solve(A) > > ## transform A in a plain matrix > A1 <- matrix(c(A), di) > ## calculate the determinant > det(A1) > ## computes the inverse > solve(A1) > > >> version > _ > platform i686-pc-linux-gnu > arch i686 > os linux-gnu > system i686, linux-gnu > status > major 2 > minor 14.1 > year 2011 > month 12 > day 22 > svn rev 57956 > language R > version.string R version 2.14.1 (2011-12-22) > > ---------- > This mail has been sent through the MPI for Demographic Research. Should you > receive a mail that is apparently from a MPI user without this text > displayed, then the address has most likely been faked. If you are uncertain > about the validity of this message, please check the mail header or ask your > system administrator for assistance. > > ______________________________________________ > 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-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.