2012-09-22 12 views
14

Attualmente sto cercando di disegnare l'intervallo di confidenza per un modello lineare. Ho scoperto che dovrei usare predict.lm() per questo, ma ho alcuni problemi a capire veramente la funzione e non mi piace usare le funzioni senza sapere cosa sta succedendo. Ho trovato diversi how-to su questo argomento, ma solo con il codice R corrispondente, senza una vera spiegazione. Questa è la funzione stessa:Predict.lm() in R - come ottenere bande di predizione non costanti attorno ai valori adattati

## S3 method for class 'lm' 
predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf, 
     interval = c("none", "confidence", "prediction"), 
     level = 0.95, type = c("response", "terms"), 
     terms = NULL, na.action = na.pass, 
     pred.var = res.var/weights, weights = 1, ...) 

Ora, quello che ho difficoltà a capire:

1) newdata 
    An optional data frame in which to look for variables 
    with which to predict. If omitted, the fitted values are used. 
  • Tutti sembrano usare NewData per questo, ma io non riesco a capire perché. Per calcolare l'intervallo di confidenza, ho ovviamente bisogno dei dati per cui questo intervallo è (come il numero di osservazioni, la media di x ecc.), Quindi non può essere ciò che si intende da esso. Ma allora: che cosa significa?

    2) interval
    Type of interval calculation.

  • okay .. ma che cosa è "nessuno" per?

    3a) type
    Type of prediction (response or model term).

    3b) terms
    If type="terms", which terms (default is all terms)

  • 3a: Posso dal che ottenere l'intervallo di confidenza per una variabile specifica nel mio modello? E se sì, cos'è allora 3b? Se riesco a specificare il termine in 3a, non avrebbe senso farlo di nuovo in 3b ... quindi suppongo di sbagliarmi di nuovo, ma non riesco a capire perché.

Immagino che alcuni di voi potrebbero pensare: Perché non provarlo? E vorrei (anche se forse non risolvesse tutto qui), ma in questo momento non so come. Dato che non so a cosa servono i nuovi dati, non so come usarli e, se ci provo, non ho il giusto intervallo di confidenza. In qualche modo è molto importante come scegli questi dati, ma io non capisco!

EDIT: Voglio aggiungere che la mia intenzione è capire come predict.lm funziona. Con ciò intendo che non capisco se funziona nel modo in cui penso che lo faccia. Cioè calcola y-hat (valori previsti) e di usi aggiunge/sottrae per ciascuno i limiti upr/lwr dell'intervallo per calcolare diversi datapoint (che assomigliano a una linea di confidenza quindi) ?? Poi vorrei capire perché è necessario avere la stessa lunghezza nei nuovi dati come nel modello lineare.

+0

La sezione Dettagli della documentazione tratta l'argomento 'newdata' per una certa lunghezza. Quale parte di questa discussione rimane confusa? – joran

+0

Suppongo che questo sia ciò che mi confonde: "predict.lm produce valori previsti, ottenuti valutando la funzione di regressione nel frame newdata" (nella spiegazione generale) e "Se newdata è omesso, le previsioni si basano sui dati utilizzati per il in forma." per i nuovi dati Perché dovrei provare ad ottenere intervalli di confidenza che non sono collegati nella mia regressione effettiva? Ecco come ho capito questa frase, quindi questo è ciò che mi confonde. Poi spiega come vengono gestiti i valori mancanti in quel caso, ma faccio fatica con la prima parte già! – lisa

+2

Potrebbe essere interessato agli intervalli _prediction_ per nuove osservazioni. – joran

risposta

21

Make up alcuni dati:

d <- data.frame(x=c(1,4,5,7), 
       y=c(0.8,4.2,4.7,8)) 

Montare il modello:

lm1 <- lm(y~x,data=d) 

di confidenza e di previsione intervalli con i valori x originali:

p_conf1 <- predict(lm1,interval="confidence") 
p_pred1 <- predict(lm1,interval="prediction") 

Conf. e pred.intervalli con nuovi valori x (estrapolazione e più finemente/uniformemente distanziate di dati originali):

nd <- data.frame(x=seq(0,8,length=51)) 
p_conf2 <- predict(lm1,interval="confidence",newdata=nd) 
p_pred2 <- predict(lm1,interval="prediction",newdata=nd) 

Plot tutto insieme:

par(las=1,bty="l") ## cosmetics 
plot(y~x,data=d,ylim=c(-5,12),xlim=c(0,8)) ## data 
abline(lm1) ## fit 
matlines(d$x,p_conf1[,c("lwr","upr")],col=2,lty=1,type="b",pch="+") 
matlines(d$x,p_pred1[,c("lwr","upr")],col=2,lty=2,type="b",pch=1) 
matlines(nd$x,p_conf2[,c("lwr","upr")],col=4,lty=1,type="b",pch="+") 
matlines(nd$x,p_pred2[,c("lwr","upr")],col=4,lty=2,type="b",pch=1) 

enter image description here

Uso nuovi dati permette di estrapolazione oltre l'originale dati; inoltre, se i dati originali sono scarsamente distanziati o non uniformemente, gli intervalli di predizione (che non sono linee rette) potrebbero non essere ben approssimate mediante interpolazione lineare tra i valori x originali ...

Non sono abbastanza sicuro di quello che si significa per "intervallo di confidenza per una specifica variabile nel mio modello"; se si desidera intervalli di confidenza su un parametro , è necessario utilizzare confint. Se si desidera che le previsioni per le modifiche si basino solo su alcuni dei parametri che cambiano (ignorando l'incertezza dovuta agli altri parametri), allora si desidera effettivamente utilizzare type="terms".

interval="none" (impostazione predefinita) dice semplicemente a R di non preoccuparsi di calcolare alcun intervallo di confidenza o di previsione e di restituire solo i valori previsti.

+0

Può forse qualcuno cercare di spiegare la differenza tra una previsione e un intervallo di confidenza in poche parole? Questo è il modo in cui l'ho capito: CI ti dà un indizio su dove la media della popolazione utilizzata dovrebbe diminuire nel 95% dei casi. D'altro canto, l'IP non riguarda la media, ma i valori futuri, sono valori y che non sono ancora nei tuoi dati. Questo è in qualche modo corretto? – lisa

+2

Posso suggerire che tu "intervallo di previsione" di Google "intervallo di confidenza" "...? le risposte sono là fuori ... se non ottieni quello che ti serve lì, allora dovresti probabilmente chiedere su http://stats.stackexchange.com, dato che siamo andati oltre il regno della programmazione ... anche: http : //stackoverflow.com/questions/9406139/r-programming-predict-prediction-vs-confidence –

+0

Sì, l'ho letto, grazie comunque – lisa

Problemi correlati