[R] ERROR: system is computationally singular: reciprocal condition number = 4.90109e-18

Ravi Varadhan rvaradhan at jhmi.edu
Mon Jun 29 00:06:47 CEST 2009


Hi,

You are being rude to those who are trying to help you by ignoring their suggestions and by sending useless, irrelevant information.

Ravi.

____________________________________________________________________

Ravi Varadhan, Ph.D.
Assistant Professor,
Division of Geriatric Medicine and Gerontology
School of Medicine
Johns Hopkins University

Ph. (410) 502-2619
email: rvaradhan at jhmi.edu


----- Original Message -----
From: Moumita Das <das.moumita.online at gmail.com>
Date: Sunday, June 28, 2009 11:20 am
Subject: [R] ERROR: system is computationally singular: reciprocal condition number = 4.90109e-18
To: r-help at r-project.org


> Hi All,
>  This is my R-version information:---
>  > version
>                 _
>  platform       i486-pc-linux-gnu
>  arch           i486
>  os             linux-gnu
>  system         i486, linux-gnu
>  status
>  major          2
>  minor          7.1
>  year           2008
>  month          06
>  day            23
>  svn rev        45970
>  language       R
>  version.string R version 2.7.1 (2008-06-23)
>  
>  While calculating partial correlation for a dataset ,i keep getting this
>  error :--
>  *Error in solve.default(Szz) :
>    system is computationally singular: reciprocal condition number =
>  4.90109e-18*
>  
>  
>  
>  On using the traceback() function i get this:--------------
>  > traceback()
>  10: *.Call("La_dgesv", a, b, tol, PACKAGE = "base")*
>  9: solve.default(Szz)
>  8: solve(Szz)
>  7: pcor.mat(firstvalue, secondvalue, third_var, method, na.rm = T)
>  6: PartialCorr_Calculation(value1, value2, third_var, method = "pearson",
>         na.rm = T)
>  5: Partial(contrld_third_var(rowvalues$matrix1, rowvalues$matrix2,
>         x <- stringOfItemCategoryToDataFrameOfItemCategory,
>  item_category_table,
>         pcor_type <- "ic"), data1, data2, pcor_thirdvar_type <- "all")
>  4: main()
>  3: eval.with.vis(expr, envir, enclos)
>  2: eval.with.vis(ei, envir)
>  1: source("correlationFP.R")
>  
>  In pcor.mat function :--
>  # By using var-cov matrix
>  pcor.mat <- function(x,y,z,method="p",na.rm=T){
>  
>      #print("pcor.mat")
>      x <- c(x)
>      y <- c(y)
>      z <- as.data.frame(z)
>  
>      m<- identical(all.equal(x, y), TRUE)
>      #print(m)
>      if(  m=="TRUE")
>      {
>          print("inside equality-------------------------------")
>          return(1)
>      }
>  
>  
>      if(dim(z)[2] == 0){
>          stop("There should be given data\n")
>      }
>  
>      data <- data.frame(x,y,z)
>  
>      if(na.rm == T){
>          data = na.omit(data)
>      }
>  
>      xdata <- na.omit(data.frame(data[,c(1,2)]))
>      Sxx <- cov(xdata,xdata,m=method)
>  
>      xzdata <- na.omit(data)
>      xdata <- data.frame(xzdata[,c(1,2)])
>      zdata <- data.frame(xzdata[,-c(1,2)])
>      Sxz <- cov(xdata,zdata,m=method)
>  
>      zdata <- na.omit(data.frame(data[,-c(1,2)]))
>      Szz <- cov(zdata,zdata,m=method)
>  
>  
>      # is Szz positive definite?
>      zz.ev <- eigen(Szz)$values
>      if(min(zz.ev)[1]<0){
>  
>          stop("\'Szz\' is not positive definite!\n")
>      }
>  
>      # partial correlation
>      Sxx.z <- Sxx - Sxz %*% solve(Szz) %*% t(Sxz) # this gets printed
>  
>  
>  
>  
>      rxx.z <- cov2cor(Sxx.z)[1,2] # probably error in this function cov2cor
>  
>  
>  
>  
>      return(rxx.z)
>  }
>  
>  for some other datasets this pcor.mat function works fine.
>  The solve.default function is this:---------------
>  solve.default<-function(a, b, tol = ifelse(LINPACK, 1e-07,
>  .Machine$double.eps),LINPACK = FALSE, ...)
>  {
>  
>      if (is.complex(a) || (!missing(b) && is.complex(b))) {
>          a <- as.matrix(a)
>          if (missing(b)) {
>              if (nrow(a) != ncol(a))
>                  stop("only square matrices can be inverted")
>              b <- diag(1 + (0+0i), nrow(a))
>              colnames(b) <- rownames(a)
>          }
>          else if (!is.complex(b))
>              b[] <- as.complex(b)
>          if (!is.complex(a))
>              a[] <- as.complex(a)
>          return(if (is.matrix(b)) {
>              if (ncol(a) != nrow(b)) stop("'b' must be compatible with 
> 'a'")
>              rownames(b) <- colnames(a)
>              .Call("La_zgesv", a, b, PACKAGE = "base")
>          } else drop(.Call("La_zgesv", a, as.matrix(b), PACKAGE = "base")))
>      }
>      if (is.qr(a)) {
>          warning("solve.default called with a \"qr\" object: use 'qr.solve'")
>          return(solve.qr(a, b, tol))
>      }
>      if (!LINPACK) {
>          a <- as.matrix(a)
>          if (missing(b)) {
>              if (nrow(a) != ncol(a))
>                  stop("only square matrices can be inverted")
>              b <- diag(1, nrow(a))
>              colnames(b) <- rownames(a)
>          }
>          else storage.mode(b) <- "double"
>          storage.mode(a) <- "double"
>          return(if (is.matrix(b)) {
>              if (ncol(a) != nrow(b)) stop("'b' must be compatible with 
> 'a'")
>              rownames(b) <- colnames(a)
>              .Call("La_dgesv", a, b, tol, PACKAGE = "base")
>          } else drop(.Call("La_dgesv", a, as.matrix(b), tol, PACKAGE =
>  "base")))
>      }
>      a <- qr(a, tol = tol)
>      nc <- ncol(a$qr)
>      if (a$rank != nc)
>          stop("singular matrix 'a' in 'solve'")
>      if (missing(b)) {
>          if (nc != nrow(a$qr))
>              stop("only square matrices can be inverted")
>          b <- diag(1, nc)
>          colnames(b) <- rownames(a$qr)
>      }
>      qr.coef(a, b)
>  }
>  
>  So what has to be done in the "base" package to get rid of this error.
>  
>  
>  -- 
>  Thanks
>  Moumita
>  
>  	[[alternative HTML version deleted]]
>  
>  ______________________________________________
>  R-help at r-project.org mailing list
>  
>  PLEASE do read the posting guide 
>  and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list