Vícenásobná lineární regrese a významnost odhadnutých parametrů
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ě.