Count>0
всегда TRUE
: вы пытаетесь предсказать постоянную переменную, отсюда и странные результаты.
Для логистической регрессии вам нужны необработанные данные, а не агрегированные данные. И если вы хотите предсказать столбец Drink
,
это не должно быть среди предикторов.
# Sample data
n <- 100
MBdrink <- data.frame(
EI=sample(c("E","I"), n, replace=TRUE),
SN=sample(c("S","N"), n, replace=TRUE),
TF=sample(c("T","F"), n, replace=TRUE),
JP=sample(c("J","P"), n, replace=TRUE),
Drink=factor( sample(c("Rarely","Often"), n, p=c(.2,.8), replace=TRUE), levels=c("Rarely", "Often")),
Count=rpois(n,5)
)
library(plyr)
MBdrink <- ddply(MBdrink, c("EI","SN","TF","JP","Drink"), summarize, Count=sum(Count))
# dis-aggregate the data
d <- ddply(MBdrink, "Count", function (u)
do.call( rbind, replicate(unique(u$Count), u, simplify=FALSE)))
# Run the regression you want
r <- glm(
Drink ~ EI + SN + TF + JP,
data=d,
family=binomial(link="logit") # Logistic regression
)
result <- cbind(d, Probability=predict(r, type="response"))
result <- unique(result)
result <- result[order(result$Probability),]
result