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@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.

Reply via email to