Python使用逻辑回归估算OR值
阅读原文时间:2023年07月11日阅读:1

第一种是统计学方法,需要用到 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)

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章