This commit is contained in:
Jakub Adamski 2021-06-20 11:57:11 +02:00
parent d1df50a039
commit 2b8708a1b9
9 changed files with 118 additions and 35 deletions

View File

@ -702,11 +702,94 @@ summary(model_2)$adj.r.squared
---
## LAB 10
Zagadnienia:
-
- regresja logistyczna i Poissona
- wykład 9 końcówka
### R
### R
```r
# regresja logistyczna
model_1 <- glm(condition ~ bilirubin + ldh, data = liver_data, family = 'binomial')
summary(model_1)
step(model_1)
# iloraz szans
exp(coef(model_1)[2])
exp(coef(model_1)[3])
# krzywa ROC
install.packages("ROCR")
library(ROCR)
pred_1 <- prediction(model_1$fitted, liver_data$condition)
plot(performance(pred_1, 'tpr', 'fpr'), main = "Model 1")
performance(pred_1, 'auc')@y.values
# predykcja z wykresem
liver_data_new <- data.frame(bilirubin = c(0.9, 2.1, 3.4), ldh = c(100, 200, 300))
(predict_glm <- stats::predict(model_1, liver_data_new, type = 'response'))
model_1_hat <- coef(model_1)[1] + coef(model_1)[2] * liver_data$bilirubin + coef(model_1)[3] * liver_data$ldh
model_1_temp <- seq(min(model_1_hat) - 1, max(model_1_hat) + 2.5, length.out = 100)
condition_temp <- exp(model_1_temp) / (1 + exp(model_1_temp))
plot(model_1_temp, condition_temp, type = "l", xlab = "X beta", ylab = "condition", xlim = c(-6, 9), ylim = c(-0.1, 1.1))
points(model_1_hat, liver_data$condition, pch = 16)
points(coef(model_1)[1] + coef(model_1)[2] * liver_data_new$bilirubin + coef(model_1)[3] * liver_data_new$ldh, predict_glm, pch = 16, col = "red")
# regresja Poissona
install.packages("DAAG")
library(DAAG)
head(moths)
model_1 <- glm(A ~ log(meters), data = moths, family = 'poisson')
# predykcja
data_new <- data.frame(meters = c(3, 20, 100))
(pred_1 <- stats::predict(model_1, data_new, type = "response"))
moths$A_hat <- stats::predict(model_1, type = "response")
moths <- moths[with(moths, order(meters)), ]
plot(log(moths$meters), moths$A_hat,
type = "l", col = "red", lwd = 2,
xlab = "log(moths$meters)", ylab = "A",
ylim = c(0, 40), main = "Model 1")
points(log(moths$meters), moths$A, pch = 16)
points(log(data_new$meters), pred_1, pch = 16, col = "blue", lwd = 4)
```
### Krzywa ROC
W statystyce matematycznej krzywa ROC jest graficzną reprezentacją efektywności modelu predykcyjnego poprzez wykreślenie charakterystyki jakościowej klasyfikatorów binarnych powstałych z modelu przy zastosowaniu wielu różnych punktów odcięcia. Mówiąc inaczej każdy punkt krzywej ROC odpowiada innej macierzy błędu uzyskanej przez modyfikowanie „cut-off point”. W punkcie (0, 0) model klasyfikuje wszystko jako negative w punkcie (1, 1) model klasyfikuje wszystko jako positive. Pojęcia:
- TPR (True Positive Rate) określa zdolność klasyfikatora do wykrywania klasy pozytywnej
- Lepiej jest powyżej przekątnej, gorzej poniżej. Przekątna to klasyfikator losowy. Przekątna idzie od początku układu współrzędnych.
- False positive rate = 1-specyficzność
- Punkt równowagi to klasyfikator gdzie czułość = specyficzność. Jest to na przecięciu drugiej przekątnej z wykresem.<br/>
![roc2](lab10/roc2.png)
- AUC - Interpretacja AUROC (Area Under the ROC) to prawdopodobieństwo, że badany model predykcyjny oceni wyżej (wartość score) losowy element klasy pozytywnej od losowego elementu klasy negatywnej. Jest to dokłądność modelu - dla idealnego AUC=100%.<br/>
![ROC](roc.png)
### Zagadnienia
- Regresja logistyczna jedna z metod regresji używanych w statystyce w przypadku, gdy zmienna zależna jest na skali dychotomicznej (przyjmuje tylko dwie wartości). Zmienne niezależne w analizie regresji logistycznej mogą przyjmować charakter nominalny, porządkowy, przedziałowy lub ilorazowy. W przypadku zmiennych nominalnych oraz porządkowych następuje ich przekodowanie w liczbę zmiennych zero-jedynkowych taką samą lub o 1 mniejszą niż liczba kategorii w jej definicji.
<br/><br/>
Zwykle wartości zmiennej objaśnianej wskazują na wystąpienie, lub brak wystąpienia pewnego zdarzenia, które chcemy prognozować. Regresja logistyczna pozwala wówczas na obliczanie prawdopodobieństwa tego zdarzenia (tzw. prawdopodobieństwo sukcesu). Wykres krzywej to sigmoid function<br/>
![logistyczna](lab10/logistyczna.png)
![logistyczna2](lab10/logistyczna2.png)
- Rozkład Poissona dyskretny rozkład prawdopodobieństwa, wyrażający prawdopodobieństwo szeregu wydarzeń mających miejsce w określonym czasie, gdy te wydarzenia występują ze znaną średnią częstotliwością i w sposób niezależny od czasu jaki upłynął od ostatniego zajścia takiego zdarzenia.
- Regresja Poissona - ilość wydarzeń.<br/>
![poisson](lab10/poisson.png)
- Liczba stopni swobody liczba niezależnych wyników obserwacji pomniejszona o liczbę związków, które łączą te wyniki ze sobą. Liczbę stopni swobody można utożsamiać z **liczbą niezależnych zmiennych losowych**, które wpływają na wynik. Inną interpretacją liczby stopni swobody może być: liczba obserwacji minus liczba parametrów estymowanych przy pomocy tych obserwacji.
- Regresja nieliniowa<br/>
![nieliniowa](lab10/nieliniowa.png)
- Iloraz szans - w skrócie OR określa nam stosunek szansy wystąpienia danego zdarzenia w danej grupie do wystąpienia tego samego zdarzenia w innej porównywanej grupie.

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
podsumowanie/lab10/roc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

BIN
podsumowanie/lab10/roc2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

View File

@ -1,37 +1,37 @@
rok <- 1995:2002
liczba_przypadkow <- c(39.7, 38.2, 34.7, 33.1, 30.1, 28.4, 26.3, 24.7)
data_set <- data.frame(rok = rok, liczba_przypadkow = liczba_przypadkow)
plot(data_set, main = "Wykres rozrzutu", pch = 16)
load(url("http://ls.home.amu.edu.pl/data_sets/liver_data.RData"))
head(liver_data)
model <- lm(liczba_przypadkow ~ rok, data = data_set)
model$coefficients
plot(data_set, main = "Wykres rozrzutu", pch = 16)
abline(model, col = "red", lwd = 2)
coef(model)
confint(model)
liver_data$condition <- ifelse(liver_data$condition == "Yes", 1, 0)
model_1 <- glm(condition ~ bilirubin + ldh, data = liver_data, family = 'binomial')
model_1
summary(model)
summary(model_1)
fitted(model)
residuals(model)
step(model_1)
temp_rok <- data.frame(rok = seq(min(data_set$rok) - 10,
max(data_set$rok) + 10,
length = 100))
pred <- stats::predict(model, temp_rok, interval = "prediction")
plot(data_set, main = "Wykres rozrzutu", pch = 16)
abline(model, col = "red", lwd = 2)
lines(temp_rok$rok, pred[, 2], lty = 2, col = "red")
lines(temp_rok$rok, pred[, 3], lty = 2, col = "red")
exp(coef(model_1)[2])
exp(coef(model_1)[3])
install.packages("ROCR")
library(ROCR)
pred_1 <- prediction(model_1$fitted, liver_data$condition)
plot(performance(pred_1, 'tpr', 'fpr'), main = "Model 1")
performance(pred_1, 'auc')@y.values
new_rok <- data.frame(rok = 2003:2007)
(pred_2003_2007 <- stats::predict(model, new_rok, interval = 'prediction'))
plot(data_set, main = "Wykres rozrzutu z predykcją na lata 2003-2007", pch = 16,
xlim = c(1995, 2007), ylim = c(10, 40))
abline(model, col = "red", lwd = 2)
points(2003:2007, pred_2003_2007[, 1], col = "blue", pch = 16)
temp_rok <- data.frame(rok = seq(1994, 2008, length = 100))
pred <- stats::predict(model, temp_rok, interval = "prediction")
lines(temp_rok$rok, pred[, 2], lty = 2, col = "red")
lines(temp_rok$rok, pred[, 3], lty = 2, col = "red")
liver_data_new <- data.frame(bilirubin = c(0.9, 2.1, 3.4), ldh = c(100, 200, 300))
(predict_glm <- stats::predict(model_1,
liver_data_new,
type = 'response'))
model_1_hat <- coef(model_1)[1] +
coef(model_1)[2] * liver_data$bilirubin +
coef(model_1)[3] * liver_data$ldh
model_1_temp <- seq(min(model_1_hat) - 1, max(model_1_hat) + 2.5, length.out = 100)
condition_temp <- exp(model_1_temp) / (1 + exp(model_1_temp))
plot(model_1_temp, condition_temp, type = "l", xlab = "X beta", ylab = "condition",
xlim = c(-6, 9), ylim = c(-0.1, 1.1))
points(model_1_hat, liver_data$condition, pch = 16)
points(coef(model_1)[1] +
coef(model_1)[2] * liver_data_new$bilirubin +
coef(model_1)[3] * liver_data_new$ldh,
predict_glm, pch = 16, col = "red")

View File

@ -15,7 +15,7 @@ Regresja to pewnie dla danych w rozkładzie Poissona.
## Krzywa ROC
W statystyce matematycznej krzywa ROC jest graficzną reprezentacją efektywności modelu predykcyjnego poprzez wykreślenie charakterystyki jakościowej klasyfikatorów binarnych powstałych z modelu przy zastosowaniu wielu różnych punktów odcięcia. Mówiąc inaczej każdy punkt krzywej ROC odpowiada innej macierzy błędu uzyskanej przez modyfikowanie „cut-off point”.
W statystyce matematycznej krzywa ROC jest graficzną reprezentacją efektywności modelu predykcyjnego poprzez wykreślenie charakterystyki jakościowej klasyfikatorów binarnych powstałych z modelu przy zastosowaniu wielu różnych punktów odcięcia. Mówiąc inaczej każdy punkt krzywej ROC odpowiada innej macierzy błędu uzyskanej przez modyfikowanie „cut-off point”. W punkcie (0, 0) model klasyfikuje wszystko jako negative w punkcie (1, 1) model klasyfikuje wszystko jako positive.
<br><br>
![ROC](roc.png)
@ -28,7 +28,7 @@ Pojęcia:
- Punkt równowagi to klasyfikator gdzie czułość = specyficzność. Jest to na przecięciu drugiej przekątnej z wykresem.
- AUC - Interpretacja AUROC (Area Under the ROC) to prawdopodobieństwo, że badany model predykcyjny oceni wyżej (wartość score) losowy element klasy pozytywnej od losowego elementu klasy negatywnej.
- AUC - Interpretacja AUROC (Area Under the ROC) to prawdopodobieństwo, że badany model predykcyjny oceni wyżej (wartość score) losowy element klasy pozytywnej od losowego elementu klasy negatywnej. Jest to dokłądność modelu - dla idealnego AUC=100%.
## Notatki