วิธีการจำลองข้อมูลเทียมสำหรับการถดถอยโลจิสติก?


45

ฉันรู้ว่าฉันไม่มีอะไรในการทำความเข้าใจเกี่ยวกับการถดถอยโลจิสติกและขอขอบคุณสำหรับความช่วยเหลือ

เท่าที่ฉันเข้าใจแล้วการถดถอยโลจิสติกถือว่าความน่าจะเป็นของผลลัพธ์ '1' ที่ได้รับจากอินพุตคือการรวมกันเชิงเส้นของอินพุตที่ส่งผ่านฟังก์ชันผกผัน - โลจิสติกส์ นี่คือสุดขั้วในรหัส R ต่อไปนี้:

#create data:
x1 = rnorm(1000)           # some continuous variables 
x2 = rnorm(1000)
z = 1 + 2*x1 + 3*x2        # linear combination with a bias
pr = 1/(1+exp(-z))         # pass through an inv-logit function
y = pr > 0.5               # take as '1' if probability > 0.5

#now feed it to glm:
df = data.frame(y=y,x1=x1,x2=x2)
glm =glm( y~x1+x2,data=df,family="binomial")

และฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

ข้อความเตือน: 1: glm.fit: อัลกอริทึมไม่ได้มาบรรจบกัน 2: glm.fit: ความน่าจะเป็นที่ติดตั้งเป็นตัวเลข 0 หรือ 1 เกิดขึ้น

ฉันทำงานกับ R มาพักหนึ่งแล้ว พอที่จะรู้ว่าฉันอาจจะเป็นผู้ตำหนิ .. เกิดอะไรขึ้นที่นี่?


2
วิธีที่คุณจำลองข้อมูลของคุณดูแปลกสำหรับฉัน หากคุณต้องการวิธีมาตรฐานที่เป็นทางเลือกมากขึ้นคุณสามารถดูได้ที่นี่: stats.stackexchange.com/questions/12857/…
ocram

@ocram: ถูกต้อง; นี่เป็นคำถามที่ซ้ำกัน!
user603

2
ฉันใช้การจำลองที่ผิดพลาดอย่างที่ @ Stéphane Laurent อธิบาย อย่างไรก็ตามปัญหาคือการแยกที่สมบูรณ์แบบในการถดถอยโลจิสติกปัญหาที่ฉันไม่คุ้นเคยและฉันก็ค่อนข้างประหลาดใจที่ได้เรียนรู้
zorbar

@zorbar: มันเป็นคำตอบของฉันสำหรับคำถามของคุณ (ตอนนี้ถูกลบ)
user603

1
@ user603: ฉันอาจพลาดคำตอบของคุณ; ขอบคุณอยู่แล้ว
zorbar

คำตอบ:


63

เลขที่ตัวแปรตอบสนองเป็นตัวแปรสุ่ม Bernoulli การมูลค่าที่มีความน่าจะเป็น(i) 1 พีอาร์( ฉัน)yi1pr(i)

> set.seed(666)
> x1 = rnorm(1000)           # some continuous variables 
> x2 = rnorm(1000)
> z = 1 + 2*x1 + 3*x2        # linear combination with a bias
> pr = 1/(1+exp(-z))         # pass through an inv-logit function
> y = rbinom(1000,1,pr)      # bernoulli response variable
> 
> #now feed it to glm:
> df = data.frame(y=y,x1=x1,x2=x2)
> glm( y~x1+x2,data=df,family="binomial")

Call:  glm(formula = y ~ x1 + x2, family = "binomial", data = df)

Coefficients:
(Intercept)           x1           x2  
     0.9915       2.2731       3.1853  

Degrees of Freedom: 999 Total (i.e. Null);  997 Residual
Null Deviance:      1355 
Residual Deviance: 582.9        AIC: 588.9 

คุณพูดถูก - ฉันพลาดขั้นตอนนี้ไปแล้ว ขอบคุณมาก ๆ สำหรับความช่วยเหลือของคุณ!
zorbar

1
ฉันมีคำถามเกี่ยวกับวิธีที่คุณจำลองข้อมูล เมื่อเราจำลองข้อมูลสำหรับการถดถอยเชิงเส้นเราจะจำลองเสียง (\ epsilon) ฉันเข้าใจว่าฟังก์ชั่นลอจิสติกเป็นหน้าที่ของความคาดหวังซึ่งตัวมันเองจะตัดเสียง นั่นคือเหตุผลที่คุณไม่มีเสียงรบกวนใด ๆ ใน z หรือไม่?
Sam

5
@Sepehr การถดถอยเชิงเส้นถือว่าการแจกแจงแบบเกาส์ "เสียงรบกวน" เป็นเพียงการตีความความแปรปรวนรอบ ๆ ค่าเฉลี่ย แต่นี่ไม่ใช่เสียงรบกวนที่เพิ่มเข้ามาในการตอบสนอง: การตอบสนองถูกเขียนเป็นนี่เป็นเพียงการตีความ การถดถอยโลจิสติกถือว่าการตอบสนองมีการแจกแจงแบบทวินามและในทำนองเดียวกันก็ไม่มีเสียงรบกวนในการตอบสนอง mean response+noise
Stéphane Laurent

@ StéphaneLaurentอย่างแน่นอน ฉันเข้าใจแล้ว ขอบคุณมากสำหรับคำตอบของคุณ
Sam

2

LogisticRegression เหมาะสำหรับการติดตั้งหากมีความน่าจะเป็นหรือสัดส่วนเป็นเป้าหมายไม่ใช่เฉพาะผลลัพธ์ 0/1

import numpy as np
import pandas as pd
def logistic(x, b, noise=None):
    L = x.T.dot(b)
    if noise is not None:
        L = L+noise
    return 1/(1+np.exp(-L))

x = np.arange(-10., 10, 0.05)
bias = np.ones(len(x))
X = np.vstack([x,bias]) # Add intercept
B =  [1., 1.] # Sigmoid params for X

# True mean
p = logistic(X, B)
# Noisy mean
pnoisy = logistic(X, B, noise=np.random.normal(loc=0., scale=1., size=len(x)))
# dichotomize pnoisy -- sample 0/1 with probability pnoisy
dichot = np.random.binomial(1., pnoisy)

pd.Series(p, index=x).plot(style='-')
pd.Series(pnoisy, index=x).plot(style='.')
pd.Series(dichot, index=x).plot(style='.')

ที่นี่เรามีสามเป้าหมายที่เป็นไปได้สำหรับการถดถอยโลจิสติก pซึ่งเป็นสัดส่วนที่แท้จริง / เป้าหมาย / ความน่าจะpnoisyเป็นซึ่งเป็น p ที่มีสัญญาณรบกวนปกติเพิ่มในสเกลอัตราต่อรองของบันทึกและdichotซึ่ง pnoisy ถือเป็นพารามิเตอร์ของไบนารีทวินาม PDF และสุ่มตัวอย่างจากนั้น คุณควรทดสอบทั้ง 3 - ผมพบว่าบางส่วนมาเปิดการใช้งาน LR pไม่สามารถใส่

คุณอาจชอบ pnoisy ขึ้นอยู่กับแอปพลิเคชันของคุณ

ในทางปฏิบัติคุณควรพิจารณาว่าเสียงรบกวนนั้นมีแนวโน้มที่จะทำให้เกิดรูปร่างในแอปพลิเคชันเป้าหมายของคุณอย่างไรและพยายามเลียนแบบเสียงนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.