0

我有一个包含二进制变量[Yes/No] 和连续变量 (X) 的数据集。我正在尝试制作一个模型来对 [Yes/No] X 进行分类。

从我的数据集中,当 X = 0.5 时,48% 的观察结果是肯定的。但是,我知道当 X = 0.5 时,Yes 的真实概率应该是 50%。当我使用逻辑回归 X = 0.5 != P[Yes=0.5] 创建模型时。

我该如何纠正?我想如果它没有通过正确的点,那么所有的概率都应该被略微低估。

只是在我的样本中添加一堆观察值来调整比例是否正确?

不必只是逻辑回归,LDA、QDA 等也很有趣。

我搜索了 Stack Overflow,但只找到了有关线性回归的主题。

4

2 回答 2

3

我相信在 R 中(假设你glm从基础 R 中使用)你只需要

glm(y~I(x-0.5)-1,data=your_data,family=binomial)

I(x-0.5)0.5 处重新定位协变量,-1抑制截距(截距 = 0 在x=0.5-> 概率 = 0.5 在x=0.5)。

例如:

set.seed(101)
dd <- data.frame(x=runif(100,0.5,1),y=rbinom(100,size=1,prob=0.7))
m1 <- glm(y~I(x-0.5)-1,data=dd,family=binomial)
predict(m1,type="response",newdata=data.frame(x=0.5)) ## 0.5
于 2016-12-28T22:13:38.217 回答
2

OP写道:

我该如何纠正?我想如果它没有通过正确的点,那么所有的概率都应该被略微低估。

这不是真的。完全有可能低估某些值(如截距)并高估其他值。

根据您的情况举例:

真实概率:

set.seed(444)

true_prob <- function(x) {

  # logit probabilities
  lp <- (x - 0.5)

  # true probabilities
  p <- 1 / (1 + exp(-lp))
  p

}

true_prob(x = 0.5)
[1] 0.5

但是,如果您模拟数据并拟合模型,截距可能会被低估,而其他值可能会被高估:

n <- 100
# simulated predictor
x <- runif(n, 0, 1)
probs <- true_prob(x)

# simulated binary response
y <- as.numeric(runif(n) < probs)

现在拟合一个模型并比较真实概率与拟合概率:

> true_prob(0.5)
[1] 0.5
> predict(m, newdata = data.frame(x = 0.5), type = "response")
       1 
0.479328 
> true_prob(2)
[1] 0.8175745
> predict(m, newdata = data.frame(x = 2), type = "response")
        1 
0.8665702 

所以在这个例子中,模型在 x = 0.5 时低估,在 x = 2 时高估

于 2016-12-28T22:38:00.637 回答