model_regresie <- lm(formula, data)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:
unde
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:
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:
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.
| 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. |