TEST 2
airquality
, která jsou vestavěná v R. Z nich extrahujte příznak temp
, a to pouze v měsíci květnu (data$Month == 5
). Pro tento výběr určete (a) minimální, (b) maximální hodnotu, (c ) medián, (d) mezikvartilovou odchylku a (e) ručně nakreslete boxplot a vyznačte do něj hodnotu mediánu, 1. a 3. kvartilu a konců obou 'fousů'.
Terminologie:
Budeme pracovat s daty iris
:
data(iris)
Prohlídka dat: kolik a jakých příznaků obsahují? Kolik porozování máme k dispozici? Obsahují data nějaké chybějící hodnoty?
dim(iris) summary(iris)
Studujte závislost délky korunního lístku (Petal.Length
) na délce kališního lístku (Sepal Length
) u kosatců “virginica”.
Jaký vztah očekáváte?
Závislost vizualizujte.
# vykresleni: with(iris[iris$Species=='virginica', ], plot(Petal.Length ~ Sepal.Length)) # lepsi vykresleni, aby nesplyvaly pozorovani, u nichz byly namereny shodne hodnoty: with(iris[iris$Species=='virginica', ], plot(Petal.Length ~ jitter(Sepal.Length))) # uprava mezi (aby byl videt pocatek souradne soustavy): with(iris[iris$Species=='virginica', ], plot(Petal.Length ~ jitter(Sepal.Length), xlim = c(0, max(Sepal.Length)), ylim = c(0, max(Petal.Length))))
Jak byste intuitivně kvantifikovali studovanou závislost?
Teoretická vsuvka: Formální znázornění závislosti (vzorec). Grafické znázornění závislosti. Míry kvality proložení křivky (přímky). Metoda nejmenších čtverců. Vliv odlehlých pozorování.
Modelujte závislost délky korunního lístku na délce kališního lístku pomocí lineární regrese.
# regresni model: m <- lm(Petal.Length ~ Sepal.Length, iris[iris$Species=='virginica', ]) # alternativne: m <- lm(Petal.Length ~ Sepal.Length, iris, subset = Species=='virginica') # prohlidka modelu: m coef(m) summary(m) # vizualizace modelu: abline(coef(m), col='red')
Jaký je výsledek? Závislost formálně zapište. Je závislost statisticky významná? Interpretujte výsledek.
Výsledek: Petal.Lengthi = 0.61 + 0.75 * Sepal.Lengthi + epsi, přičemž intercept (“průsečík s osou Y”) je nevýznamně odlišný od 0, ale koeficient 0.75 u Sepal.Lengthi je významně nenulový, čímž jsme i) prokázali lineární závislost mezi délkou okvětního a kališního lístku, a ii) tuto závislost kvantifikovali.
Interpretace: S nárůstem délky kališního lístky (Sepal.Length
) o 1cm narůstá průměrně délka okvětního lístku (Petal.Length
) o 7.5mm. Přitom jsme samozřejmě předpokládali (a přesvědčili se obrázkem), že závislost je skutečně lineární.
Modelujte nyní závislost šířky kališního lístku na jeho délce. Jaký výsledek dostáváte?
Nyní modelujte výše sledovanou závislost v případě, že v souboru bude (uměle vytvořené) odlehlé pozorování:
# pouzijeme kosatce virginica d <- iris[iris$Species=='virginica',] # a umele zmenime delku korunniho listku u rostliny s nejdelsim kalistnim listkem: d$Petal.Length [d$Sepal.Length==max(d$Sepal.Length)] <- -5 # data vykreslime: plot(Petal.Length ~ jitter(Sepal.Length), d) # modelujeme: m <- lm(Petal.Length ~ Sepal.Length, d) summary(m) # a vykreslime nalezeny model abline(coef(m),col='red')
Zopakujte výše uvedené kroky. K jakému závěru jste dospěli? Co z toho plyne?
Načtěte CSV soubor tuk.txt.
Prohlídka dat: kolik a jakých atributů obsahují? V jakých jednotkách jsou naměřeny? Kolik porozování máme k dispozici? Obsahují data nějaké chybějící hodnoty? Pokud ano, jak se s nimi vypořádáte? Jsou v datech odlehlé hodnoty? Pokud ano, co s nimi uděláte?
Studujte nejprve závislost procenta tuku na hmotnosti. Jaký vztah očekáváte? Závislost vizualizujte a modelujte pomocí lineární regrese. Jaký dostáváte výsledek? Závislost formálně zapište. Je závislost významná?
Studujte závislost procenta tuku na tělesné výšce. Jaký vztah očekáváte? Závislost opět vizualizujte a modelujte pomocí lineární regrese. Jaký dostáváte výsledek? Závislost formálně zapište. Je závislost významná?
Nyní modelujte závislost procenta tuku zároveň na výšce a hmotnosti. Jaký dostáváte výsledek? Závislost formálně zapište. Jsou závislosti významné? Srovnejte tento výsledek s předchozími dvěma. Co z toho plyne?
Výsledek: fati = 16.5 + 0.49 * weighti - 0.24 * heighti + epsi, přičemž intercept (“průsečík s osou Y”) je nevýznamně odlišný od 0, ale oba zbývající koeficienty (u hmotnosti a výšky) jsou významně nenulové.
Interpretace: S nárůstem hmotnosti o 1kg (při pevné výšce) vzrůstá procento tělesného tuku průměrně o 0.49%. Podobně s nárůstem výšky o 1cm (při pevné hmotnosti) klesá procento tělesného tuku průměrně o 0.24%. Upozorňeme, že při interpretaci některého regresoru je podmínka pevných hodnot ostatních regresorů nutná, bez ní by tvrzení nebylo pravdivé.
Příklad 1 (Předpovídání léčebných výdajů)
Pro tuto analýzu použijeme simulovaný dataset obsahující hypotetické léčebné výdaje pacientů z USA.
.csv
pomocí příkazu
insurance <- read.csv("insurance.csv", stringsAsFactors = TRUE)
str()
a summary()
.
pairs()
zobrazte matici scatterplotů pro atributy age
, bmi
, children
a expenses
. Lze vypozorovat nějaké vzory?
psych
a použijte funkci pairs.panels()
pro stejné atributy jako v předchozím případě. Čísla zobrazená v horním trojúhelníku jsou korelace mezi příslušnými atributy. Zobrazené ovály se nazávají korelační elipy. Jejich střed se nachází v těžišti dat (střední hodnota v x i y). Korelace mezi dvěma neznámými je symbolizována tvarem elipsy - čím protáhlejší, tím silnější korelace. Jaký tvar má korelační elipsa pro bmi
a chilren
a proč?
summary()
.
Nyní zkusíme předchozí model upravit. Podíváme se na 3 různé závislosti, které nelze postihnout lineárním popisem. Vraťte se k bodu 3 nebo 4 a podívejte se, zdali není možné vysledovat nějaké zajímavé zákonitosti.
ifelse
modelujte jednoduchou binární funkci.
expenses ~ bmi30*smokerTo je ekvivalentní se zápisem:
expenses ~ bmi30 + smokeryes + bmi30:smokeryesOperátor
:
označuje interakci mezi dvěma proměnnými.
Opakování termínů ze statistiky:
Formulace Bayesova naivního klasifikátoru.
Proč se klasifikátoru říká naivní?
Příklad: Hráči chodí hrát tenis, ale hrají pouze za příznivého počasí. Příklady jejich rozhodnutí jsou v následující tabulce. Atributy jsou outlook, temperature, humidity, windy a rozhodnutí je ve sloupečku play. Nalezněte podle čeho se hráči rozhodují, zda půjdou hrát.
outlook | temperature | humidity | windy | play |
---|---|---|---|---|
sunny | hot | high | false | no |
sunny | hot | high | true | no |
overcast | hot | high | false | yes |
rainy | mild | high | false | yes |
rainy | cool | normal | false | yes |
rainy | cool | normal | true | no |
overcast | cool | normal | true | yes |
sunny | mild | high | false | no |
sunny | cool | normal | false | yes |
rainy | mild | normal | false | yes |
sunny | mild | normal | true | yes |
overcast | mild | high | true | yes |
overcast | hot | normal | false | yes |
rainy | mild | high | true | no |
Data jsou zde: weather.csv. Aplikací naivního Bayesova klasifikátoru sami vypočtěte, zda je (ne)pravděpodobné, že hráči půjdou hrát, když bude slunečno (sunny), horko (hot), normální vlhkost (normal) a bezvětří (windy=FALSE).
Váš explicitní výpočet můžete ověřit v R:
# nacteni a prohlidka dat d<-read.csv('weather.csv') summary(d) # naivni Bayes library(e1071) # je treba zkonvertovat "logical" priznak na "numeric" d$windy <- as.numeric(d$windy) m <- naiveBayes(play~., d) # vyzkousejme klasifikator predict(m,d) table(predict(m,d),d$play) # a klasifikujme nove pozorovani: d.new<-data.frame(outlook='sunny',temperature='hot',humidity='normal',windy=0) predict(m,d.new)