Python使用邏輯回歸估算OR值


第一種是統計學方法,需要用到 statsmodels

  statsmodels是統計和計量經濟學的package,包含了用於參數評估和統計測試的實用工具

第二種是機器學習,需要使用sklearn中的LogisticRegression

下面以計算dis1-->dis2的OR值為例,也就是說dis1為自變量,dis2為因變量

首先我們先造一組數據: x為自變量,y為因變量

df = pd.DataFrame({'x': ['dis1', 'dis1', 'dis1', 'dis1', 'dis3', 'dis3', 'dis3', 'dis3'], 'y': ["dis2", "dis2",
"dis2", "dis4", "dis4", "dis4", "dis4", "dis2"]})

因為我要使用邏輯回歸估計OR值,所以首先會計算出實際的OR值

  患dis2 不患dis2
患dis1 A B
不患dis1 C D

 OR值的計算:OR_dis1_dis2 = AD/BC,其中A = 3, B = 1, C = 1, D = 3

ct = pd.crosstab(df.x, df.y)
oddsratio, pvalue = stats.fisher_exact(ct)

使用stamodel包中的邏輯回歸進行OR值的估計:

df["intercept"] = 1.0  # 截距項,初始化截距項,不可省

# 擬合模型
logit = sm.Logit(df['y'], df[df.columns[1:]])
result = logit.fit()

print(result.summary())
# 計算得到OR值
OR1 = np.exp(result.params)

使用機器學習方法計算OR

df = pd.get_dummies(df)
clf = LogisticRegression(penalty='none')

clf.fit(df[['x_dis1']], df[['y_dis2']].values)
print(clf)
odds_ratio = np.exp(clf.coef_)
print(odds_ratio)

完整代碼:

import pandas as pd
import statsmodels.api as sm
from sklearn.linear_model import LogisticRegression
import numpy as np


# 構造數據
df = pd.DataFrame({'x': ['dis1', 'dis1', 'dis1', 'dis1', 'dis3', 'dis3', 'dis3', 'dis3'], 'y': ["dis2", "dis2",
"dis2", "dis4", "dis4", "dis4", "dis4", "dis2"]})



# 計算實際OR
ct = pd.crosstab(df.x, df.y)
oddsratio, pvalue = stats.fisher_exact(ct)

# 使用統計學方法計算
df["intercept"] = 1.0  # 截距項,初始化截距項,不可省

# 擬合模型
logit = sm.Logit(df['y'], df[df.columns[1:]])
result = logit.fit()

print(result.summary())
# 計算得到OR值
OR1 = np.exp(result.params)



# 使用機器學習方法計算
df = pd.get_dummies(df)
clf = LogisticRegression(penalty='none')

clf.fit(df[['x_dis1']], df[['y_dis2']].values)
print(clf)
odds_ratio = np.exp(clf.coef_)
print(odds_ratio)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM