2013-06-04 20 views
5

ho questo programmaL'utilizzo di offset di regressione lm - 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) 

e voglio fare una regressione dei minimi quadrati sui dati contenuti nel dat, la funzione ha la forma

y ~ a + b*x 

e voglio che la linea di regressione passi attraverso un punto specifico P (x0, y0) (che non è l'origine).

sto cercando di fare in questo modo

x0 <- 3.15 

y0 <-283.56 

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

(penso che i dati = dat non è necessario in questo caso), ma ho questo errore:

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

I don' so perché Immagino di non aver definito correttamente il valore di offset ma non ho trovato alcun esempio su Internet.

Qualcuno può spiegarmi come offset funziona per favore?

+0

Potete fornire un esempio di riproducibili, con i dati, per favore? – joran

+2

Qual è la differenza tra questa domanda e la precedente? – agstudy

+0

Ora sto chiedendo di definire l'oggetto che va in _offset_. La mia domanda precedente riguardava come far passare una regressione per un punto specifico. – amcabassi

risposta

9

vostro termine di offset deve essere una variabile , come x e y, non è una costante numerica. Quindi è necessario creare una colonna nel set di dati con i valori appropriati.

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

Grazie per la risposta. Ho aggiunto il punto P (x0, y0) al mio database. Ora è l'elemento 161 di _dat_. Ho provato entrambi 'x0 <- 3.15 y0 <- dat [161,2] regressione <- lm (y ~ I (x-x0) -1, offset = y0)' e questo 'y0 <- dat [161,] regressione <- lm (y ~ I (x) -1, offset = y0) 'ma nessuno di loro funziona. Che cosa sto facendo di sbagliato? Ho aggiunto la prima parte del codice alla mia domanda per renderla più chiara. – amcabassi

+2

Stai ancora creando una singola costante con il valore specificato. Devi passare un _vector_ di valori come offset. Il modo più semplice per farlo è quello che ho postato: crea una nuova colonna nel tuo set di dati. Presumo 'dat [161, 2]' è ciò che dovrebbe essere il tuo y0? Fai questo: 'dat $ o <- dat [161,2]; lm (y ~ I (x - x0) - 1, offset = o, data = dat) ' –

+0

Perfetto, grazie mille! Avevo creato una riga invece di una colonna, ecco perché non ha funzionato! Grazie per la vostra pazienza. – amcabassi

2

In realtà, il vero problema qui è che è necessario specificare offset con un vettore la cui lunghezza è lo stesso il numero di righe (o la lunghezza, se i dati si compone come un vettore) del dati. Il seguente codice farà il vostro lavoro come previsto:

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

Ecco una buona spiegazione per coloro che sono interessati: http://rfunction.com/archives/223

Problemi correlati