Inverse der Matrix in R.


88

Ich habe mich gefragt, wie Sie die Umkehrung einer Matrix empfehlen können.

Die Wege, die ich gefunden habe, scheinen nicht zufriedenstellend zu sein. Beispielsweise,

> c=rbind(c(1, -1/4), c(-1/4, 1))  
> c  
      [,1]  [,2]  
[1,]  1.00 -0.25  
[2,] -0.25  1.00  
> inv(c)  
Error: could not find function "inv"  
> solve(c)    
          [,1]      [,2]  
[1,] 1.0666667 0.2666667  
[2,] 0.2666667 1.0666667  
> solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  
> qr.solve(c)*c  
            [,1]        [,2]  
[1,]  1.06666667 -0.06666667  
[2,] -0.06666667  1.06666667  

Vielen Dank!


7
Ein allgemeiner Rat: Vermeiden Sie es, Objekten (wie Matrizen) einen Namen zu geben, der bereits verwendet wird (hier c).
— Qaswed

Antworten:


150

solve(c)gibt die richtige Umkehrung. Das Problem mit Ihrem Code ist, dass Sie den falschen Operator für die Matrixmultiplikation verwenden. Sie sollten verwenden solve(c) %*% c, um die Matrixmultiplikation in R aufzurufen.

R führt beim Aufrufen eine Element-für-Element-Multiplikation durch solve(c) * c.


22

Sie können die Funktion ginv () (Moore-Penrose generalized inverse) im MASS- Paket verwenden


@xeon nicht sicher, wie Sie es verpassen könnten - siehe S. 60 des Handbuchs für das Paket, auf das in meiner obigen Antwort
— Bezug genommen wurde

Vielen Dank für Ihre Antwort. Ich habe diesen Fehler beim Ausführen der Funktion fem () aus dem FisherEM-Paket erhalten. Ausführen von Mavericks Mac OS X.
— Vladislavs Dovgalecs

9

Beachten Sie, dass Sie, wenn Sie Wert auf Geschwindigkeit legen und sich nicht um Singularitäten kümmern müssen, solve()dies vorziehen sollten, ginv()da es viel schneller ist, wie Sie überprüfen können:

require(MASS)
mat <- matrix(rnorm(1e6),nrow=1e3,ncol=1e3)

t0 <- proc.time()
inv0 <- ginv(mat)
proc.time() - t0 

t1 <- proc.time()
inv1 <- solve(mat)
proc.time() - t1 
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.