提问人:Hack-R 提问时间:4/17/2021 最后编辑:Hack-R 更新时间:4/22/2021 访问量:873
SAS PROC LOGISTIC 和 Python sklearn LogisticRegression 之间的小偏差来源(未受惩罚)?
Source of small deviance between SAS PROC LOGISTIC and Python sklearn LogisticRegression (unpenalized)?
问:
我正在尝试将 SAS 的结果与 Python 3 中的结果相匹配。SAS 使用未受惩罚的回归,我可以通过选项或 .PROC LOGISTIC
sklearn
sklearn.linear_model.LogisticRegression
C = 1e9
penalty='none'
这应该是故事的结局,但是当我使用加州大学洛杉矶分校的公共数据集并尝试复制它们的多重回归时,我仍然注意到一个很小的差异。FEMALE
MATH
hiwrite
这是我的 Python 脚本:
# module imports
import pandas as pd
from sklearn.linear_model import LogisticRegression
# read in the data
df = pd.read_sas("~/Downloads/hsb2-4.sas7bdat")
# FE
df["hiwrite"] = df["write"] >= 52
print("\n\n")
print("Multiple Regression of Female and Math on hiwrite:")
feature_cols = ['female','math']
y=df["hiwrite"]
X=df[feature_cols]
# sklearn output
model = LogisticRegression(fit_intercept = True, C = 1e9)
mdl = model.fit(X, y)
print(mdl.intercept_)
print(mdl.coef_)
其结果为:
Multiple Regression of Female and Math on hiwrite: [-10.36619688] [[1.63062846 0.1978864 ]]
加州大学洛杉矶分校(UCLA)从SAS获得以下结果:
Analysis of Maximum Likelihood Estimates Standard Wald Parameter DF Estimate Error Chi-Square Pr > ChiSq Intercept 1 -10.3651 1.5535 44.5153 <.0001 FEMALE 1 1.6304 0.4052 16.1922 <.0001 MATH 1 0.1979 0.0293 45.5559 <.0001
这很接近,但正如你所看到的,截距参数估计值在小数点后第 3 位不同,在小数点后第 4 位的估计值不同。我尝试更改其他一些参数(如 和 ),但它没有改变结果。我也尝试了 - 它匹配 ,而不是 SAS。R 在截距和第一系数上与 Python 匹配,但在第二个系数上与 SAS 和 Python 略有不同......female
tol
max_iter
solver
Logit
statsmodel.api
sklearn
更新:我去SAS社区寻找答案,有人提到这可能是由于迭代最大似然算法收敛的差异。我觉得这听起来很对,尽管我已经尝试过使用 Python 中的可用选项来解决这个问题。
关于错误的来源以及如何使 Python 与 SAS 匹配的任何想法?
答: 暂无答案
评论
tol
solver
max_iter
tol