2013-06-04 21 views
5

Ich habe dieses ProgrammVerwendung von in lm Regressions Offset - R

dens <- read.table('DensPiu.csv', header = FALSE) 
fl <- read.table('FluxPiu.csv', header = FALSE) 
mydata <- data.frame(c(dens),c(fl)) 

dat = subset(mydata, dens>=3.15) 
colnames(dat) <- c("x", "y") 
attach(dat) 

und ich möchte ein Least-Square-Regression auf die Daten in dat enthalten sind, zu tun, hat die Funktion die Form

y ~ a + b*x 

und ich möchte, dass die Regressionslinie einen bestimmten Punkt P (x0, y0) durchläuft (was nicht der Ursprung ist).

Ich versuche, es so zu tun

x0 <- 3.15 

y0 <-283.56 

regression <- lm(y ~ I(x-x0)-1, offset=y0) 

(Ich denke, dass Daten = dat in diesem Fall nicht erforderlich ist), aber ich habe diesen Fehler:

Error in model.frame.default(formula = y ~ I(x - x0) - 1, : variable 
lengths differ (found for '(offset)'). 

I don‘ Ich weiß warum. Ich vermute, dass ich den Offset-Wert nicht richtig definiert habe, aber im Internet konnte ich kein Beispiel finden.

Kann mir jemand erklären, wie Offset funktioniert bitte?

+0

Können Sie ein reproduzierbares Beispiel bieten, mit Daten, bitte? – joran

+2

Was ist der Unterschied zwischen dieser Frage und Ihrer vorherigen? – agstudy

+0

Jetzt möchte ich das Objekt definieren, das in _offset_ geht. Meine vorherige Frage war, wie man eine Regression für einen bestimmten Punkt durchführt. – amcabassi

Antwort

9

Ihr Offset-Term hat eine Variable sein, wie x und y, nicht eine numerische Konstante. Sie müssen also eine Spalte in Ihrem Dataset mit den entsprechenden Werten erstellen.

dat$o <- 283.56 
lm(y ~ I(x - x0) - 1, data=dat, offset=o) 
+0

Danke für Ihre Antwort. Ich habe den Punkt P (x0, y0) zu meiner Datenbank hinzugefügt. Jetzt ist es das 161 Element von _dat_. Ich habe versucht beide 'x0 <- 3.15 y0 <- dat [161,2] Regression <- lm (y ~ I (x-x0) -1, Offset = y0)' und diese 'y0 <- dat [161,] Regression <- lm (y ~ I (x) -1, offset = y0) 'aber keiner von ihnen funktioniert. Was mache ich falsch? Ich habe den ersten Teil des Codes zu meiner Frage hinzugefügt, um es klarer zu machen. – amcabassi

+2

Sie erstellen immer noch eine einzelne Konstante mit dem angegebenen Wert. Sie müssen einen _vector_ von Werten als Offset übergeben. Der einfachste Weg, dies zu tun, ist, während ich gepostet habe: Erstelle eine neue Spalte in deinem Datensatz. Ich nehme an, 'dat [161, 2]' ist das, was dein y0 sein soll? Tun Sie dies: 'dat $ o <- dat [161,2]; lm (y ~ I (x - x0) - 1, offset = o, daten = dat) ' –

+0

Perfekt, vielen Dank! Ich hatte eine Reihe anstatt einer Spalte erstellt, deshalb hat es nicht funktioniert! Danke für Ihre Geduld. – amcabassi

2

In der Tat, hier das eigentliche Problem ist, dass Sie offset mit einem Vektor, deren Länge die gleichen wie die Anzahl der Zeilen angeben sollen (oder die Länge, wenn Daten als Vektor zusammengesetzt ist) Ihr Daten. Der folgende Code wird nicht Ihren Job wie erwartet:

regression <- lm(y ~ I(x-x0)-1, offset = rep(y0, length(y)) 

Hier ist eine gute Erklärung für diejenigen, die interessiert sind: http://rfunction.com/archives/223

Verwandte Themen