Powiedzmy, że mam następujące dane i korzystam z modelu regresji:
df=data.frame(income=c(5,3,47,8,6,5),
won=c(0,0,1,1,1,0),
age=c(18,18,23,50,19,39),
home=c(0,0,1,0,0,1))
Z jednej strony prowadzę model liniowy, aby przewidzieć dochód:
md1 = lm(income ~ age + home + home, data=df)
Po drugie, uruchamiam model logit, aby przewidzieć wygraną zmienną:
md2 = glm(factor(won) ~ age + home, data=df, family=binomial(link="logit"))
W przypadku obu modeli zastanawiam się, jak mogę wygenerować tabelę lub ramkę danych z kategorią odpowiedzi predyktora, dopasowaną wartością i przewidywaną wartością modelu.
W przypadku modelu liniowego coś takiego:
age fitted_income predicted_income
18 3 5
23 3 3
50 4 2
19 5 5
39 6 4
home fitted_income predicted_income
0 5 6
1 3 9
A może powinno być dla każdego punktu danych. Zatem dla punktu danych x_i dopasowane i przewidywane wartości to:
id age fitted_income predicted_income
1 18 3 5
2 23 3 3
3 50 4 2
4 19 5 5
5 39 6 4
Czy ze statystycznego punktu widzenia takie przedsięwzięcie jest przydatne? Dlaczego lub dlaczego nie?
Jak można to zrobić w R? (spojrzał na nazwy (md1) i znalazł to, co mogę wyciągnąć z modelu, ale nie przeszedłem dalej)
Dzięki!
residuals
polecenia wR
. Użyj,cbind
aby połączyć je z oryginalną ramką danych.Odpowiedzi:
Trzeba być ostrożnym z obiektami modelu w R. Na przykład, podczas gdy dopasowane wartości i prognozy danych treningowych powinny być takie same w
glm()
przypadku modelu, nie są one takie same, gdy używasz prawidłowych funkcji ekstraktora:Wynika to z tego, że domyślną wartością
predict.glm()
jest zwracanie prognoz na skalę predyktora liniowego. Aby uzyskać dopasowane wartości, chcemy zastosować odwrotność funkcji link do tych wartości.fitted()
robi to za nas i możemy uzyskać prawidłowe wartości, używającpredict()
również:Podobnie z
residuals()
(lubresid()
); Wartości zapisane wmd2$residuals
to pracy reszty to jest mało prawdopodobne, aby to, co chcesz.resid()
Metoda pozwala określić typ resztkowa chcesz i posiada użyteczną domyślną.W przypadku
glm()
modelu wystarczy coś takiego:Coś podobnego można zrobić dla
lm()
modelu:źródło