S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.

Tento článek navazuje na příklad s jednoduchou lineární regresí ( https://exceltown.com/navody/jazyk-r/nejjednodussi-linearni-regrese-v-r/ ). V něm se jednalo o odhad závislosti váhy na výšce na základě údajů o patnácti různých ženách (viz dataset women, který je přímo součástí R). V tomto článku si ukážeme, jak odhadnout regresi s více než jednou vysvětlující proměnnou a jak posoudit, která/které z vysvětlujících proměnných má/mají v regresi význam.

Úprava datasetu

Dataset women obsahuje dva sloupce: height (výška v palcích) a weight (váha v librách). Pojďme k němu nyní přidat další sloupec, který bude obsahovat informaci o věku daných žen. Dalo by se totiž předpokládat, že váha nezávisí pouze na výšce, ale i na věku respondenta.

Vygenerujeme příkazem sample patnáct náhodných hodnot z rozmezí od 20 do 50.

> age = sample(seq(20,50),15)

Vygenerovaný vektor vypadá takto:

> age

[1] 45 25 39 43 35 38 36 47 34 23 37 42 32 49 26

Chcete-li pracovat při zkoušení tohoto skriptu v R právě s tímto vektorem, použijte následující příkaz. Příkaz sample by vám totiž vygeneroval vektor o něco odlišný, neboť jde o náhodný výběr.

> age = c(45, 25, 39, 43, 35, 38, 36, 47, 34, 23, 37, 42, 32, 49, 26)

Nyní připojíme vektor age k našemu datasetu.

> women = cbind(women, age)

Příkazem head si zobrazíme prvních několik řádků datasetu pro kontrolu.

> head(women)

height weight age

1 58 115 45

2 59 117 25

3 60 120 39

4 61 123 43

5 62 126 35

6 63 129 38

Grafické znázornění datasetu by bylo obtížné: protože máme tři proměnné (výšku, váhu a věk), museli bychom použít 3D graf. Při více proměnných již grafické znázornění není vůbec možné.

Odhad vícenásobné regrese

Jednoduchou lineární regresi jsme odhadovali následujícím příkazem:

> regrese = lm(weight ~ height, data = women)

Nyní jen přidáme další vysvětlující proměnnou, a to následovně:

> regrese_vic = lm(weight ~ height + age, data = women)

R používá, jak je vidět, pro přidání další proměnné symbol plus, ale samozřejmě nejde o žádné sčítání, nýbrž zkrátka o ustálené značení.

Základní výstup regrese vypadá takto:

> regrese_vic

Call:

lm(formula = weight ~ height + age, data = women)

Coefficients:

(Intercept) height age

-87.58712 3.45028 0.00143

Co v něm najdeme? Call nám připomene původně zadaný příkaz. Pod Coefficients nalezneme odhadnuté parametry. Naše regrese tedy vypadá takto:

weight = –87,59 + 3,45 ∙ height + 0,00143 ∙ age + náhodná složka

Náhodná složka v sobě zahrnuje veškeré faktory kromě výšky a věku, které váhu ovlivňují.

Jak uvedená čísla interpretovat?

Koeficient –87,59 je intercept neboli úrovňová konstanta. Říká nám, jakou váhu máme nejpravděpodobněji očekávat u ženy s výškou 0 palců a věkem 0 let. Jak již bylo řečeno v předchozím článku o jednoduché lineární regresi, ne vždy mívá úrovňová konstanta smysluplnou interpretaci.

Další dva odhadnuté parametry nám říkají, jak se v průměru změní vysvětlovaná proměnná (váha) při změně příslušné vysvětlující proměnné o jednotku za jinak stejných okolností. Tak například, při nezměněném věku v průměru naroste váha ženy o 3,45 liber s každým jedním dodatečným palcem. Při nezměněné výšce v průměru naroste váha ženy o 0,00143 liber s každým jedním dodatečným rokem.

Testování významnosti parametrů

Podrobnější informace o odhadnutých parametrech získáme následujícím příkazem.

> summary(regrese_vic)

 Výstup obsahuje mimo jiné sekci Coefficients:

Coefficients:

             Estimate Std. Error t value Pr(>|t|)    

(Intercept) -87.58712    6.72849 -13.017 1.94e-08 ***

height        3.45028    0.09543  36.157 1.28e-13 ***

age           0.00143    0.05405   0.026    0.979    

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

V prvním sloupečku je odhad parametrů – ty jsme již interpretovali. Další dva sloupce prozatím vynecháme a budeme se jim věnovat v samostatné kapitole. Poslední sloupec nám říká, jestli je daná proměnná (výška resp. věk) v modelu významná, čili jestli skutečně hraje roli při predikci váhy. Běžně se za významnou považuje proměnná, u níž je hodnota v posledním sloupci menší než 0,05 (čili je u ní alespoň jedna hvězdička). Proč je to zrovna tak a ne jinak bude také obsahem samostatné kapitoly.

Vidíme tedy, že proměnná height je v modelu významná, zatímco proměnná age nikoli, čili ji můžeme vypustit. Asi nás to ani nepřekvapí vzhledem k tomu, že se jednalo o náhodně vygenerované hodnoty uměle naroubované na původní dataset.

A co koeficient determinace?

V článku o jednoduché lineární regresi jsme si ukázali, co je to koeficient determinace a jak ho zobrazit. Použili jsme následující příkaz.

> summary(regrese)$r.squared

[1] 0.9910098

Udělejme totéž pro naši novou, vícenásobnou regresi:

> summary(regrese_vic)$r.squared

[1] 0.9910104

Jak víme, koeficient determinace je jakýmsi měřítkem kvality modelu. Mohlo by nás tedy napadnout, že když je koeficient determinace u nového modelu (vícenásobné regrese) vyšší než u regrese s jednou proměnnou, máme použít regresi vícenásobnou. Zároveň však ale víme, že proměnná age je v modelu nevýznamná a že by dávalo větší smysl zůstat u jednoduchého modelu. Jak to tedy je?

Klíčem je použití korigovaného koeficientu determinace ( adjusted R-squared) místo toho, který jsme si zatím ukázali. Pro porovnání dvou modelů s různým počtem vysvětlujících proměnných nelze totiž použít běžný koeficient determinace, protože ten při přidávání dalších proměnných nikdy neklesne, i kdyby tyto proměnné byly zcela nesmyslné.

Korigovaný koeficient determinace zobrazíme následovně.

> summary(regrese)$adj.r.squared

[1] 0.9903183

> summary(regrese_vic)$adj.r.squared

[1] 0.9895121

Porovnáním těchto dvou hodnot dojdeme k závěru, že jednoduchá lineární regrese s jednou vysvětlující proměnnou je v tomto případě lepší volbou.

S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.