2011-11-08 13 views
37

Sto cercando di capire come utilizzare l'operatore tilde e le funzioni associate . La mia prima domanda è: perché è necessario utilizzare I() per specificare gli operatori aritmetici? Ad esempio, questi 2 trame generano risultati diversi (ex avente una linea retta, e la seconda curva previsto)Nelle formule R, perché devo usare la funzione I() sui termini di alimentazione, come y ~ I (x^3)

x <- c(1:100) 
y <- seq(0.1,10,0.1) 

plot(y~x^3) 
plot(y~I(x^3)) 

ulteriore, entrambi i seguenti terreni anche generare il risultato atteso

plot(x^3, y) 
plot(I(x^3), y) 

La mia seconda domanda è, forse gli esempi che ho usato sono troppo semplici, ma non capisco dove dovrebbe essere effettivamente utilizzato ~.

+8

Qualsiasi risposta eccellente a questa domanda si baserà su ciò che è contenuto in '? Formula'. – joran

+0

Duplicato; dovremmo chiudere uno di questi e rendere l'altro canonico: [cosa significa la lettera maiuscola "I" nella formula di regressione lineare R?] (http://stackoverflow.com/questions/24192428/capital-letter-i-in- r-linear-regression) – smci

risposta

38

Il problema qui è come interpretare le formule. In una formula la tilde separa il lato sinistro dal lato destro. Nelle formule l'operatore ^ è per la costruzione di interazioni in modo che x = x^2 = x^3 anziché la potenza matematica probabilmente prevista. Se avevi digitato (x+y)^2 l'interprete R avrebbe prodotto (per il suo buon uso interno), non una matematica: x^2 +2xy +y^2, ma piuttosto un simbolico: x + y +x:y dove x:y è un termine di interazione.

?formula 

La funzione I() agisce per convertire l'argomento "as.is", vale a dire ciò che vi aspettate. Quindi I (x^2) restituirebbe un vettore di valori elevato alla seconda potenza.

Il ~ deve essere pensato come dire "è distribuito come" o "dipende da" quando viene visualizzato nelle funzioni di regressione. Implica un termine di errore nelle descrizioni dei modelli che saranno generalmente etichettati come "(Intercetta)" e il contesto e gli argomenti della funzione possono anche determinare ulteriormente una funzione di collegamento come log() o logit().

Nelle funzioni plot() - ting esso inverte fondamentalmente il solito ordine di argomenti (x, y) che la funzione di stampa solitamente impiega. C'era un metodo plot.formula scritto in modo che le formule potessero essere usate come una modalità più "matematica" di comunicazione con R. Nelle funzioni graphics::plot.formula, curve, e 'reticolo' e 'ggplot', governa come più fattori o vettori numerici sono visualizzati e "sfaccettati".

Ho appreso in seguito che ~ è in realtà una funzione primitiva infisso (o prefisso) che crea una "chiamata" R a cui è possibile accedere con operatori di estrazione di elenchi. Tutto ciò è nascosto all'utente tipico, ma può essere una funzione utilizzata dagli autori di funzioni più avanzate.

Il sovraccarico dell'operatore "+" è discusso nei commenti seguenti e viene anche eseguito nei pacchetti di plottaggio: ggplot2 e gridExtra dove separa le funzioni che forniscono i risultati dell'oggetto, quindi che agisce e come un pass-through e operatore di stratificazione. Le funzioni di aggregazione che hanno un metodo formula usano "+" come un "arrangiamento" e un operatore di raggruppamento.

+0

Avevo già letto '' formula' (sebbene ciò non fosse chiaro dalla mia domanda); ciò che mi ha confuso è il concetto di operatore nella formulazione del modello.Per esempio, sono totalmente perso su come il simbolo '+' può significare qualcosa di diverso da aggiungere due valori insieme – ChrisW

+2

In una formula all'interno di una funzione di regressione si richiede implicitamente di restituire un insieme di coefficienti (stimati) associati a (di solito moltiplicato per) ciascuno dei termini collegati da "+". –

+3

@ChrisW L'operatore '+' è sovraccarico nel contesto di una formula. È fatto per dare un tocco più intuitivo alle specifiche della formula. Altrimenti le chiamate di regressione sembrerebbero 'lm (formula = formula (y.var, x.var1, x.var2))' che è meno facile da capire. –

Problemi correlati