Sistema é computacionalmente singular - Matriz/Mahalanobis

Prezados boa noite,estou com problemas em uma matriz inversa! Alguma sugestão? Precisava muito desta matriz D2! require(biotools)setwd("/home/andre")dados <- read.csv("Multivariada.txt", sep="")Cov=cov(dados)D2=D2.dist(dados, Cov) # Não hpa inversa!Error in solve.default(cov, (x[i, ] - x[j, ])) : sistema é computacionalmente singular: condição recíproca número = 1.53112e-19 André Oliveira Souza. Graduação em Matemática, mestrado em estatística aplicada.Instituto Federal de Educação, Ciência e Tecnologia do Espirito Santo. IFES

Seu exemplo é 100% não reproduzível. À disposição. Walmes.

Desculpas pela falta de clareza Walmes, é que não citei que a função faz é D_{ij}^2 = (x_i - x_j)' (Σ^-1) (x_i - x_j) e a matriz Σ, neste caso não tem inversa comum. Já tentei várias funções e de fato todas funções para tal método usam a função solve(Σ) como padrão. Desisti de usar a matriz de Mahalanobis, pensei em distancia Euclidiana, mas seria importante eu conseguir usar um método que envolvesse a matriz de covariâncias para obter D2. Minha pergunta é se teria uma forma de usar, neste caso, um outro tipo de inversa (outro algorítimo) e sem comprometer a matriz D2 ou se vou mesmo ter ficar com distancia Euclidiana e variantes. setwd("/home/andre") dados <- read.csv("dados.txt", sep="") str(dados) 'data.frame': 6 obs. of 10 variables: $ ch : int 146 26 44 56 73 101 $ lam : int 126 14 20 104 54 156 $ esfr : int 208 1 1 36 73 22 $ cut : int 43 10 9 20 22 40 $ fleh : int 16 1 1 2 9 5 $ tmont : int 45 5 12 15 11 27 $ mont : int 18 8 16 25 21 32 $ montco : int 6 0 3 2 2 3 $ vocal : int 106 14 21 105 97 151 $ respaud: int 123 44 64 113 56 79 dados ch lam esfr cut fleh tmont mont montco vocal respaudA 146 126 208 43 16 45 18 6 106 123B 26 14 1 10 1 5 8 0 14 44C 44 20 1 9 1 12 16 3 21 64D 56 104 36 20 2 15 25 2 105 113E 73 54 73 22 9 11 21 2 97 56F 101 156 22 40 5 27 32 3 151 79 require(StatMatch)D2=mahalanobis.dist(dados)mahalanobis.dist(dados)Error in solve.default(cov, ...) : sistema é computacionalmente singular: condição recíproca número = 1.53112e-19 require(biotools)Cov=cov(dados) D2=D2.dist(dados, Cov) D2=D2.dist(dados, Cov) Error in solve.default(cov, (x[i, ] - x[j, ])) : sistema é computacionalmente singular: condição recíproca número = 1.53112e-19 André Oliveira Souza. Graduação em Matemática, mestrado em estatística aplicada.Instituto Federal de Educação, Ciência e Tecnologia do Espirito Santo. IFES Em Quinta-feira, 25 de Junho de 2015 19:41, walmes . <walmeszeviani@gmail.com> escreveu: Seu exemplo é 100% não reproduzível. À disposição. Walmes.

O seu exemplo ainda é não reproduzível. Você tem 10 colunas (p) e 6 linhas (n). Normalmente espera-se n>p. Talvez isso justifique o problema de inversão. Procure conhecer o que a função que está usando assume sobre os argumentos que recebe. Inversa generalizada tem no pacote MASS. À disposição. Walmes.

Boa tarde Andre, como o Walmes afirmou seu exemplo ainda não é reproduzível. Entretanto, segue um exemplo para servir de inspiração para o seu problema. Uma dica é você buscar entendimento da lógica de obtenção da matriz de variância e covariância Σ nas documentações da função mahalanobis.dist() do pacote StatMatch. O exemplo que trago a seguir é para uma condição experimental então utilizei a matriz de variância e covariância S (matriz de soma de quadrados e produtos residuais/graus de liberdade dos resíduos). Entretanto, você pode tentar adaptar para sua condição definindo a matriz de variância e covariância de interesse. # Dados para o exemplo. dat <- structure(list(trat = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("1", "2", "3", "4"), class = "factor"), x1 = c(50.039225756996, 51.7825110686358, 48.1384396336807, 50.4489824448722, 48.4220046908771, 44.5221770682025, 52.2588301216718, 54.1412387912868, 48.8071610383588, 53.8184419408507, 53.5005661405145, 48.8892313217333), x2 = c(40.0577191986925, 36.6154386398641, 45.1013819536244, 37.9422687414707, 41.1111204733925, 33.3243892012254, 33.0139305834796, 35.7751641361826, 47.7243822772713, 39.8005702375829, 38.3100567194852, 44.0757780378149), x3 = c(10.4591588838242, 10.6373435622737, 10.3189328544074, 10.0386650378322, 9.96842284038367, 10.6003051066032, 10.8695539960311, 10.143593400873, 9.45082912208145, 9.28742328152705, 9.60271226420169, 10.1566398296013)), .Names = c("trat", "x1", "x2", "x3"), row.names = c(NA, -12L), class = "data.frame") attach(dat) # Matriz contendo as variáveis que serão analizadas. resp = as.matrix( dat[,2:ncol(dat)] ) # Realização da Manova para obtenção da matriz de covariância residual (S). mav <- manova(resp ~ trat) quadro = summary(mav,test="Wilks") glr <- df.residual(mav) S <- quadro$SS$Residuals/glr # Obtenção das médias dos tratamentos medtrat <- aggregate(resp, by = list(trat), FUN = mean)[,2:ncol(dat)] medtrat <- as.matrix(medtrat) # Obtenção da matriz D2 de Mahalanobis nla = numeric(0) nlb = numeric(0) acd = (nrow(medtrat)-1):1 acc=1:(nrow(medtrat)-1) acc1=2:nrow(medtrat) D2 <- mat.or.vec(nrow(medtrat),nrow(medtrat)) for(i in 1:length(acd)){ nla <- c(nla, rep( acc[i],each=acd[i] )) nlb <- c(nlb, acc1[i]:nrow(medtrat) ) } for(i in 1:length(nla)){ D2[nla[i], nlb[i]] <- t(medtrat[nla[i],] - medtrat[nlb[i],])%*%solve(S)%*%(medtrat[nla[i],] - medtrat[nlb[i],]) D2[nlb[i], nla[i]] <- D2[nla[i], nlb[i]] } # Matriz D2 de Mahalanobis D2 ################################################################# Tiago de Souza Marçal - Graduando em Agronomia pelo CCA-UFES Bolsista de Iniciação Científica da área de Genética e Melhoramento de Plantas ################################################################# Date: Fri, 26 Jun 2015 00:34:46 +0000 From: andreolsouza@yahoo.com.br To: walmeszeviani@gmail.com; r-br@listas.c3sl.ufpr.br Subject: Re: [R-br] Sistema é computacionalmente singular - Matriz/Mahalanobis Desculpas pela falta de clareza Walmes, é que não citei que a função faz é D_{ij}^2 = (x_i - x_j)' (Σ^-1) (x_i - x_j) e a matriz Σ, neste caso não tem inversa comum. Já tentei várias funções e de fato todas funções para tal método usam a função solve(Σ) como padrão. Desisti de usar a matriz de Mahalanobis, pensei em distancia Euclidiana, mas seria importante eu conseguir usar um método que envolvesse a matriz de covariâncias para obter D2. Minha pergunta é se teria uma forma de usar, neste caso, um outro tipo de inversa (outro algorítimo) e sem comprometer a matriz D2 ou se vou mesmo ter ficar com distancia Euclidiana e variantes. setwd("/home/andre") dados <- read.csv("dados.txt", sep="") str(dados) 'data.frame': 6 obs. of 10 variables: $ ch : int 146 26 44 56 73 101 $ lam : int 126 14 20 104 54 156 $ esfr : int 208 1 1 36 73 22 $ cut : int 43 10 9 20 22 40 $ fleh : int 16 1 1 2 9 5 $ tmont : int 45 5 12 15 11 27 $ mont : int 18 8 16 25 21 32 $ montco : int 6 0 3 2 2 3 $ vocal : int 106 14 21 105 97 151 $ respaud: int 123 44 64 113 56 79 dados ch lam esfr cut fleh tmont mont montco vocal respaudA 146 126 208 43 16 45 18 6 106 123B 26 14 1 10 1 5 8 0 14 44C 44 20 1 9 1 12 16 3 21 64D 56 104 36 20 2 15 25 2 105 113E 73 54 73 22 9 11 21 2 97 56F 101 156 22 40 5 27 32 3 151 79 require(StatMatch)D2=mahalanobis.dist(dados)mahalanobis.dist(dados)Error in solve.default(cov, ...) : sistema é computacionalmente singular: condição recíproca número = 1.53112e-19 require(biotools)Cov=cov(dados) D2=D2.dist(dados, Cov) D2=D2.dist(dados, Cov) Error in solve.default(cov, (x[i, ] - x[j, ])) : sistema é computacionalmente singular: condição recíproca número = 1.53112e-19 André Oliveira Souza. Graduação em Matemática, mestrado em estatística aplicada.Instituto Federal de Educação, Ciência e Tecnologia do Espirito Santo. IFES Em Quinta-feira, 25 de Junho de 2015 19:41, walmes . <walmeszeviani@gmail.com> escreveu: Seu exemplo é 100% não reproduzível.À disposição.Walmes. _______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne�a c�digo m�nimo reproduz�vel.
participantes (4)
-
Andre Oliveira
-
Tiago Souza Marçal
-
walmes .
-
Walmes Zeviani