Python使⽤逻辑回归估算OR值第⼀种是统计学⽅法,需要⽤到 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
患dis1A B
不患dis1C 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'], lumns[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.f_)
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",
odds
"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'], lumns[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.f_)
print(odds_ratio)