Ich versuche SVD Lineare Regression in einer Punktewolke anwenden. Meine Darstellung der Punktmenge ist eine Matrix mit zwei Spalten, wobei die erste Spalte "x" und die zweite Spalte "y" ist. So erhalte ich diese Handlung:Apply SVD Lineare Regression in R
myplot http://oi65.tinypic.com/msoyl5.jpg
Wie kann ich SVD lineare Regression, um meinen Standpunkt gilt mit einer Funktion gesetzt? Ich habe mit dieser versucht:
Regress_Lin<-function(data,label){
#Calculating pseudomatrix of data
data<-cbind(data,rep(1,nrow(data)))
data.svd <- svd(data)
ds <- diag(1/data.svd$d)
u <- data.svd$u
v <- data.svd$v
us <- as.matrix(u)
vs <- as.matrix(v)
#Calculating abline coefficients y=mx+b
weights<-(vs%*%solve(ds)%*%t(u))%*%label
m <- -(weights[1,1]/weights[2,1])
b <- -(weights[3,1]/weights[2,1])
c(m,b)
}
Es funktioniert nicht.
Gibt es einen Grund, dass 'lm' nicht für Sie funktioniert? –
Der Punkt ist, dass "lm" linearen Regressionen entspricht. Es verwendet die QR-Zerlegung, nicht die SVD, aber das sollte für das Endergebnis keine Rolle spielen. –
Ja, Sie haben Recht, aber ich muss lernen, SVD und Pseudoinverse zu verwenden, um meine 'abline' Koeffizienten zu erhalten. Der Befehl 'lm' funktioniert, aber ich weiß nicht, wie es funktioniert. Ich weiß also, wie ich meine unabhängige Variable pseudoinvertieren kann, aber ich weiß nicht, wie ich sie benutzen soll, um meine Koeffizienten zu erhalten. – Carlos