# ===============================# # Alkalmazott statisztika # # 9. gyakorlat # # Regresszióanalízis # # ===============================# ################################################################################################## # Regressziószámítás # Függvényszerű kapcsolat keresése két (vagy több) folytonos változó között. # Y: függő változó # Y = f(x) + epszilon, ahol f(x) a független/magyarázó változó # epszilon a véletlen hiba # Y = ß0 + ß1x + epszilon (egyszerű lineáris regresszió) [egyenest illesztünk rá] # Pearson-féle korrelációs együtthatónál a hipotézisvizsgálat: H0: ró = 0 # # Az egyenes meredeksége 0-e? (ß1) # H0: ß1 = 0 # Ilyenkor a Pearson-féle korr. és ez (fent) ekvivalens. (becslése: r) # Feltétele: epszilon normális eloszlású, E(epszilon) = 0, kosntans szórással # Y teljes variabilitása (négyzetösszegek felbontása) = x-től való függésből eredő variabilitás (SS_X) # + véletlen hiba (SS_H) # SS (Sum of Squares) # Determinációs együttható # r^2 = SS_H / SS_t # 0= < r^2 <= 1 ################################################################################################## # Olvassuk be a cars.txt állomány tartalmát az 'input' nevű táblázatba! # cars.txt: Az amerikai piacon forgalmazott néhány autótípus fontosabb paraméterei. # MANUFACTURER: az autó típusa # MODEL: az autó modellje # COUNTRY: származási ország # VOL: az utastér térfogata (köbláb) # HP: teljesítmény (lóerő) # SP: végsebesség (mérföld/óra) # MPG: fogyasztás (mérföld/gallon) # WT: a jármű tömege (50 font) input = read.table("cars.txt", header = TRUE) attach(input) # =============================================================================== # Vizsgáljuk meg, hogy függ-e a végsebesség a teljesítménytől! # Ábrázoljuk a végsebességet a teljesítmény függvényeként! plot(SP ~ HP) ## H0: ró = 0 (Pearson-féle korr = 0) # Kérdezzük le a teljesítmény és a végsebesség korrelációját! cor.test(HP, SP, method = "pearson") ## p < 0.0001 < 0.05 -> elutasítjuk a H0-t ## r = 0.967 -> a két változó között szoros, növekvő lineáris kapcsolat ## SP = a + b * HP # Lineáris regresszió segítségével írjuk fel a végsebességet a # teljesítmény lineáris függvényeként! model = lm(SP ~ HP) summary(model) ## az egyenes együtthatóinak becsléseit látjuk ## így az egyenes SP = 84.454 + 0.239*HP ## az egyenes meredeksége ß1 = 0 # Ábrázoljuk a regressziós egyenest, és adjuk meg az egyenletét! abline(model) (tengelymetszet = model$coefficient[1]) (meredekseg = model$coefficient[2]) f = function(x) tengelymetszet + meredekseg*x curve(f, add = TRUE) # Mennyire jól illeszkednek a megfigyelések az egyenesre? ## determinációs együttható r^2 = 0.9342 (multiple-t kell nézni) # Az autók teljesítménye hány százalékban magyarázza meg a végsebességet? (det_egyutthato = summary(model)$r.squared) # Várhatóan mennyi egy 130 lóerős autó végsebessége? f(130) pred.frame = data.frame(HP = 130) predict(model, newdata = pred.frame) # =============================================================================== # Mit kapunk, ha a végsebességet az utastér térfogatának függvényében vizsgáljuk? plot(SP ~ VOL) # H0: ró = 0 cor.test(SP, VOL, method = "pearson") # p = 0.7009 > 0.05 -> nem tudjuk elutasítani a H0-t -> nem tudunk lineáris kapcsolatot kimutatni # a két változó között # r = -0.04 model = lm(SP ~ VOL) summary(model) a = model$coefficient[1] b = model$coefficient[2] f = function(x) a + b*x curve(f, add = TRUE) # =============================================================================== # Elemezzük a fogyasztás és a tömeg kapcsolatát az előző pontokban # bemutatott módon! # =============================================================================== # Írjuk fel a járművek fogyasztását, mint a teljesítmény reciprokos függvénye! plot(MPG ~ HP) # (MPG = a + b/HP) model = lm(MPG ~ I(1/HP)) summary(model) # Mi a regressziós görbe egyenlete? # MPG = a + b/HP # MPG = 9.730 + 2373.113/HP a = model$coefficient[1] b = model$coefficient[2] f = function(x) a + b/x curve(f, add = TRUE) # Várhatóan mennyit fogyaszt egy 130 lóerős autó? f(130) # r^2 = 0.8429 # A modellünkben a teljesítmény hány százalékban magyarázza a fogyasztást? summary(model)$r.squared # Ismételjük meg az előző pontot azzal a változtatással, hogy most egy # exp(a + b*HP) exponenciális görbét illesszünk az adatsorra. # Melyik modell biztosítja a jobb illeszkedést? plot(MPG ~ HP) model = lm(log(MPG) ~ HP) summary(model) # MPG = e^(4.013-0.0046HP) # Mi a regressziós görbe egyenlete? # MPG = exp(a + b*HP) a = model$coefficient[1] b = model$coefficient[2] f = function(x) exp(a + b*x) curve(f, add = TRUE) f(130) summary(model)$r.squared # f(130) = 30 # r^2 = 0.7344 --> a reciprokos függvényt választjuk # =============================================================================== # =============================================================================== # Megjegyzés # Regressziós diagnosztika # 1. ábra: ha a modell megfelelő, akkor a reziduumok a nulla körüli # véletlen eltérések # 2. ábra: QQ-ábra a reziduumok normalitásának ellenőrzésére, a pontoknak # az egyenes mentén kell elhelyezkedniük # 3. ábra: ha nem látunk semmilyen tendenciát az ábrán, akkor feltételezhetjük # a reziduumok szórásának állandóságát # 4. ábra: torzító pontok (olyan pontok, melyek erősen befolyásolják a # regressziós paraméterek becslését) detektálása: azok a pontok problémásak, # melyek az 1-es Cook-féle D-értéknek megfelelő szaggatott vonalon kívül esnek plot(model) detach(input)