2016-12-28 40 views
0

我有一個二進制變量[是/否]和連續變量(X)的數據集。我試圖做一個模型來分類[是/否] X.可能通過特定概率強制邏輯迴歸或其他分類器?

從我的數據集中,當X = 0.5時,48%的觀察值爲是。但是,當X = 0.5時,我知道Yes的真實概率應該是50%。當我使用邏輯迴歸X = 0.5!= P [是= 0.5]創建模型時。

我該如何解決這個問題?我想所有的概率都應該稍微低估,如果它沒有通過正確的觀點。

只需在我的示例中添加一堆觀察值以調整比例是否正確?

不一定只是邏輯迴歸,LDA,QDA等也是有意義的。

我已經搜索堆棧溢出,但只發現有關線性迴歸的主題。

回答

3

相信在R(假設你使用glm從基R),你只需要

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

I(x-0.5)在0.5 recenters協變量,在x=0.5-1抑制截距(截距= 0 - >概率= 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 
+0

我嘗試這樣高估,但它給了其結果是P [是= 0.5]當X約0.55。此外,X開始時高於P [是],稍後「開啓」。我知道P [是]應該總是高於X,除非X = 0.5。 – MLEN

+0

這是否可以這樣做,因爲X只取0.5和1之間的一個值?將嘗試明天和我的代碼獲取一部分數據。 – MLEN

+0

看起來很奇怪。我看不出'X'的範圍會與它有什麼關係。 [mcve]肯定會有用。 –

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時