[R] solve() doesn`t work
Peter Dalgaard BSA
p.dalgaard at biostat.ku.dk
Wed Jun 19 17:26:44 CEST 2002
Frithjof Weinert <mail at weinert.biz> writes:
> Hi,
>
> I tried to inverse a matrix but it doesn`t work. I hope somebody can help
> me. This is what I did.
>
> > kurse <- read.table("kurse.txt", header=T, dec=",")
> > x <- cbind(1,kurse[,-c(1)])
> > y <- kurse$index
> > t(x) %*% x
> Error in t(x) %*% x : requires numeric matrix/vector arguments
> > x <- as.matrix(x)
> > xtxi <- solve(t(x) %*% x)
> Error in solve.default(t(x) %*% x) : singular matrix `a' in solve
It means that your matrix is near-singular.
> eigen(t(x)%*%x)
$values
[1] 6.718414e+06 4.166548e+03 3.170856e+02 3.815431e+01 3.324083e+01
[6] 1.370728e+01 1.365406e+00 1.212465e-03
$vectors
...
Notice the factor of 5e9 between the largest and the smallest
eigenvalue. In fact, you can work around it like this (but the
precision will suffer):
> solve(t(x)%*%x,tol=1e-10)
[,1] [,2] [,3] [,4] [,5]
824.4508915 3.314864820 -0.4763403196 -4.0699637637 0.1052127229
bmw 3.3148648 0.082230914 -0.0025540139 -0.0106190685 -0.0080733381
mru -0.4763403 -0.002554014 0.0006542950 -0.0002472137 0.0008589666
rwe -4.0699638 -0.010619068 -0.0002472137 0.1052825026 0.0162370133
vow 0.1052127 -0.008073338 0.0008589666 0.0162370133 0.0157643276
kar 0.6565594 0.017020959 0.0002213754 0.0144204919 0.0063406071
sie 2.1469705 0.012543437 -0.0013758730 -0.0114628060 0.0019913048
bas -15.0682942 -0.166379673 0.0085819595 -0.0932488883 -0.0619568748
[,6] [,7] [,8]
0.6565593592 2.146970504 -15.06829414
bmw 0.0170209590 0.012543437 -0.16637967
mru 0.0002213754 -0.001375873 0.00858196
rwe 0.0144204919 -0.011462806 -0.09324889
vow 0.0063406071 0.001991305 -0.06195687
kar 0.0264386956 -0.008382337 -0.09138646
sie -0.0083823370 0.019680899 -0.06057200
bas -0.0913864614 -0.060571996 0.93040568
Notice that the problem is partly self-inflicted. You seem to be
trying to fit a linear model and lm(), which is designed for the
purpose, has no trouble with these data:
> summary(lm(index~.,data=dd))$cov.unscaled
(Intercept) bmw mru rwe vow
(Intercept) 824.4508901 3.314864816 -0.4763403187 -4.0699637528 0.1052127251
bmw 3.3148648 0.082230914 -0.0025540139 -0.0106190685 -0.0080733381
mru -0.4763403 -0.002554014 0.0006542950 -0.0002472137 0.0008589666
rwe -4.0699638 -0.010619068 -0.0002472137 0.1052825026 0.0162370133
vow 0.1052127 -0.008073338 0.0008589666 0.0162370133 0.0157643276
kar 0.6565594 0.017020959 0.0002213754 0.0144204919 0.0063406071
sie 2.1469705 0.012543437 -0.0013758730 -0.0114628060 0.0019913049
bas -15.0682941 -0.166379673 0.0085819595 -0.0932488885 -0.0619568748
kar sie bas
(Intercept) 0.6565593623 2.146970499 -15.06829413
bmw 0.0170209590 0.012543437 -0.16637967
mru 0.0002213754 -0.001375873 0.00858196
rwe 0.0144204919 -0.011462806 -0.09324889
vow 0.0063406071 0.001991305 -0.06195687
kar 0.0264386956 -0.008382337 -0.09138646
sie -0.0083823370 0.019680899 -0.06057200
bas -0.0913864614 -0.060571996 0.93040568
--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
More information about the R-help
mailing list