R-通过特定概率强制逻辑回归或其他分类器



我有一个带有二进制变量[是/否]和连续变量(x)的数据集。我正在尝试制作一个模型来对[是/否] x。

进行分类

从我的数据集中,当x = 0.5时,观察值的48%是肯定的。但是,我知道当x = 0.5时,是的真正概率应该是50%。当我使用logistic回归创建模型时,x = 0.5!= p [是= 0.5]。

我该如何纠正?我想,如果所有概率都不正确,则所有概率都应略有低估。

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

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

我搜索了堆栈溢出,但仅找到有关线性回归的主题。

我相信在R(假设您是从base r中使用的glm),您只需要

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

I(x-0.5)最近在0.5处的协变量,-1抑制了截距(截距= 0 in x=0.5-> pobibility = 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

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

时高估了

相关内容

  • 没有找到相关文章

最新更新