Modele de regresie

Modele de regresie folosind limbajul R

1 Modele de regresie folosind limbajul R

În această secțiune vom prezenta funcțiile de bază din R folosite pentru ajustarea (potrivirea) și analizarea unui model de regresie liniară. Pentru a rula modelul de regresie liniară clasic în R se folosește funcția lm() (linear model). Funcția lm() are două argumente esențiale: formula și data:

model_regresie <- lm(formula, data)

unde

Tabelul 1.1: Argumentele funcției lm().
Argument Descriere
formula O formulă de forma \(y \sim x_1 + x_2 + \ldots\), unde \(y\) este variabila răspuns (dependentă) iar \(x_1,x_2,\ldots\) sunt variabilele explicative (covariabilele). Dacă vrem să includem toate coloanele (cu excepția lui \(y\)) ca variabile explicative putem folosi \(y \sim .\)
data Este setul de date în format data.frame care conține coloanele specificate de formulă.

Următorul tabel conține o serie de corespondențe între codul R și conceptele statistice asociate modelului de regresie:

Tabelul 1.2: Corespondențe între codul R și conceptele statistice asociate modelului de regresie.
R Concepte statistice
x1, x2, ..., xp Variabilele predictor \(x_1,\ldots,x_p\)
y Variabila răspuns
data <- data.frame(x1 = x1, ...,xp = xp, y = y) Eșantionul \((y_i,\symbf x_{ij})\), \(i = 1,\ldots,n\), \(j=1,\ldots,p\)
model <- lm(y ~ x, data = data) Modelul de regresie liniară
model$coefficients Coeficienții \(\hat\beta_0,\hat\beta_1,\ldots,\hat\beta_p\)
model$residuals Valorile reziduale \(\hat\varepsilon_1,\ldots,\hat\varepsilon_n\)
model$fitted.values Valorile ajustate (fitate) \(\hat y_1,\ldots,\hat y_n\)
model$df.residual Gradele de libertate \(n-(p+1)\)
summaryModel <- summary(model) Sumarul modelului de regresie liniară
summaryModel$sigma Estimatorul \(\hat\sigma\)
summaryModel$r.squared Coeficientul de determinare \(R^2\)
summaryModel$fstatistic Testul lui Fisher global \(F\)
anova(model) Tabelul ANOVA

O componentă importantă în specificarea unui model de regresie liniară este dat de termenul formula în expresia funcției lm(). Forma de bază a unei formule este

\[ y \sim x_1 + x_2 + \cdots + x_p \]

unde variabila răspuns \(y\) este separată de variabilele predictor prin \(\sim\) iar covariabilele sunt separate la rândul lor prin semnul \(+\) și corespunde modelului clasic

\[ y_i = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} + \varepsilon_i, \quad i = 1,2,\ldots,n. \]

Formula se poate modifica introducând alte simboluri pentru a permite specificarea mai multor tipuri de modele liniare (e.g. cu interacții), după cum este specificat în tabelul de mai jos:

Tabelul 1.3: Explicarea simbolurilor ce apar în argumentul formula.
Simbol Mod de utilizare
~ Separă variabila răspuns (partea stângă) de variabilele predictor (partea dreaptă). De exemplu, un model de regresie liniară cu trei predictori x1, x2 și x3 se scrie sub forma y ~ x1 + x2 + x3.
+ Separă variabilele predictor.
: Se folosește pentru a specifica interacția dintre variabilele predictor. De exemplu un model de regresie liniară care consideră predicția lui y în raport cu x1, x2 și interacția dintre x1 și x2 se scrie y ~ x1 + x2 + x1:x2.
* O notație prescurtată pentru a descrie toate interacțiile dintre termeni, astfel codul y ~ x1*x2*x3 se traduce prin modelul y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x2:x3 + x1:x2:x3.
^ Specifică interacțiile până la un anumit grad, de exemplu formula y ~ (x1 + x2 + x3)^2 se traduce prin modelul y ~ x1 + x2 + x3 + x1:x2 + x1:x3 + x2:x3.
. Un simbol care permite o scriere perscurtată care să includă toate variabilele explicative din setul de date. De exemplu, dacă setul de date conține variabila răspuns y și variabilele predictor x1, x2 și x3 atunci codul y ~ . se traduce prin y ~ x1 + x2 + x3.
- Semnul minus permite eliminarea din ecuație a unei variabile explicative. De exemplu, prin formula y ~ (x1 + x2 + x3)^2 - x1:x3 se înțelege y ~ x1 + x2 + x3 + x1:x2 + x2:x3.
-1 Acest termen elimină termenul liber (ordonata la origine - intercept) al modelului. De exemplu, în cazul modelului de regresie linară simplă y ~ x1 - 1 înțelegem că modelul forțează dreapta de regresie să treacă prin origine.
I() Această funcție este folosită atunci când dorim interpretarea aritmetică a expresiei din paranteză. Pentru a exemplifica, să considerăm pentru început codul y ~ x1 + (x2 + x3)^2 care se traduce prin y ~ x1 + x2 + x3 + x2:x3. În contrast, prin formula y ~ x1 + I((x2 + x3)^2) se înțelege modelul y ~ x1 + x4 unde x4 este variabila nou creată prin ridicarea la pătrat a sumei dintre x2 și x3.
function Se pot folosi și funcții uzuale în specificarea formulei, astfel modelul log(y) ~ x1 + x2 + x3 va folosi ca variabilă răspuns variabila log(y).

În tabelul de mai jos regăsiți o serie de funcții utile, pe lângă funcția lm(), necesare pentru analiza de regresie multiplă împreună cu pachetele din care fac parte.

Tabelul 1.4: Funcții utile pentru analiza modelului de regresie.
Funcție Pachet Descriere
summary() / summary.lm() stats Funcție care prezintă rezultate detaliate pentru modelul fitat (e.g. reziduuri, coeficienții modelului, sigma - \(\hat\sigma\), gradele de libertate ale modelului, coeficientul de determinare, etc.)
coef() Afișează parametrii/coeficienții modelului potrivit (fitat)
confint() Prezintă intervale de încredere de nivel de încredere 95% (default) pentru parametrii modelului
fitted() Afișează valorile ajustate \(\hat y\) pentru modelul considerat
model.matrix() Funcție care crează matricea de design pentru un model dat printr-o formulă sau extrage matricea de design dintr-un obiect lm
predict() Funcție care permite calcularea predicțiilor de noi observații pe baza unui model dat
residuals() Afișează reziduurile unui model fitat
rstandard() Afișează reziduurile standardizate ale unui model fitat
rstudent() Afișează reziduurile studentizate ale unui model fitat
anova() Generează tabelul ANOVA pentru un model dat sau un tabel ANOVA pentru compararea a două sau mai multe modele
vcov() Afișează matricea de varianță covarianță a parametrilor modelului
AIC() Funcție generică care permite calcularea criteriului informațional al lui Akaike pentru unul sau mai multe modele fitate. Funcția are la bază formula -2*log-likelihood + k*npar unde npar reprezintă numărul de parametrii din model, k = 2 pentru AIC sau k = log(n) pentru BIC - criteriul informațional Bayesian (sau SBC - Schwarz’s Bayesian criterion)
formula() Funcție care permite extragerea formulei folosite în generarea unui model dat
update.formula() Funcție folosită pentru modificarea unui model, de obicei prin adăugarea/eliminarea unui termen.
plot.lm() Metodă a unui obliect lm care generează o serie de (șase) grafice de diagnostic pentru evaluarea modelului fitat. Se poate apela și prin plot().
stepAIC() MASS Funcție care permite selectarea unui model pe bază de AIC. Funcție similară cu step() din pachetul stats.
addterm() Funcție care încearcă potrivirea tuturor modelelor care diferă printr-un singur termen prin adăugire față de modelul considerat. Funcție similară cu add1() din pachetul stats.
dropterm() Funcție care încearcă potrivirea tuturor modelelor care diferă printr-un singur termen prin eliminare față de modelul considerat. Funcție similară cu drop1() din pachetul stats.
leaps() leaps Selecție de modele pe baza algoritmului leaps and bounds.
linearHypothesis() car Funcție generică care permite testare ipotezelor liniare.
Anova() Returnează tabelul ANOVA pentru modelul fitat.
cookd() Calculează distanța lui Cook.
outlierTest() Această funcție întoarce p-valorile ajustate Bonferroni pentru reziduurile studentizate.
durbinWatsonTest() Testul Durbin-Watson pentru autocorelarea termenilor eroare.
leveneTest() Calculează testul Levene pentru omogenitatea varianțelor între grupuri.
ncvTest() Funcție care calculează un test de scor pentru testarea ipotezei de varianță constantă a erorilor versus o alternativă care presupune că varianța termenilor eroare se schimbă o dată cu modificarea valorilor ajustate sau cu o combinație liniară a predictorilor.