Digamos que tenho os seguintes dados e estou executando um modelo de regressão:
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))
Por um lado, corro um modelo linear para prever a renda:
md1 = lm(income ~ age + home + home, data=df)
Segundo, eu executo um modelo de logit para prever a variável ganha:
md2 = glm(factor(won) ~ age + home, data=df, family=binomial(link="logit"))
Para os dois modelos, pergunto-me como posso gerar uma tabela ou quadro de dados com a categoria de resposta do preditor, o valor ajustado e o valor previsto do modelo.
Portanto, para o modelo linear, algo como:
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
Ou talvez deva ser para cada ponto de dados. Portanto, para o ponto de dados x_i, os valores ajustados e previstos são:
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
Do ponto de vista estatístico, esse empreendimento é útil? Por que ou por que não?
Como isso pode ser feito no R? (olhou para os nomes (md1) e encontrou o que posso extrair do modelo, mas não passei disso)
Obrigado!
residuals
comando noR
. Usecbind
para juntá-los ao quadro de dados original.Respostas:
Você deve ter um pouco de cuidado com os objetos de modelo em R. Por exemplo, embora os valores ajustados e as previsões dos dados de treinamento devam ser os mesmos no
glm()
caso do modelo, eles não são os mesmos quando você usa as funções corretas do extrator:Isso ocorre porque o padrão para
predict.glm()
é retornar previsões na escala do preditor linear. Para obter os valores ajustados, queremos aplicar a inversa da função de link a esses valores.fitted()
faz isso por nós, e podemos obter os valores corretos usandopredict()
também:Da mesma forma com
residuals()
(ouresid()
); os valores armazenadosmd2$residuals
são os resíduos de trabalho que dificilmente serão o que você deseja. Oresid()
método permite especificar o tipo de resíduo que você deseja e possui um padrão útil.Para o
glm()
modelo, algo como isso será suficiente:Algo semelhante pode ser feito para o
lm()
modelo:fonte