Python中文
首页
教程
问答
标签
搜索
登录
注册
为什么statsmodels和R的logistic回归结果不同?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我试图比较python的statsmodels和R中的logistic回归实现</p> <p>Python版本:</p> <pre><code>import statsmodels.api as sm import pandas as pd import pylab as pl import numpy as np df = pd.read_csv("http://www.ats.ucla.edu/stat/data/binary.csv") df.columns = list(df.columns)[:3] + ["prestige"] # df.hist() # pl.show() dummy_ranks = pd.get_dummies(df["prestige"], prefix="prestige") cols_to_keep = ["admit", "gre", "gpa"] data = df[cols_to_keep].join(dummy_ranks.ix[:, "prestige_2":]) data["intercept"] = 1.0 train_cols = data.columns[1:] logit = sm.Logit(data["admit"], data[train_cols]) result = logit.fit() result.summary2() </code></pre> <p>结果:</p> ^{pr2}$ <p>R版本:</p> <pre><code>data = read.csv("http://www.ats.ucla.edu/stat/data/binary.csv", head=T) require(reshape2) data1 = dcast(data, admit + gre + gpa ~ rank) require(dplyr) names(data1)[4:7] = paste("rank", 1:4, sep="") data1 = data1[, -4] summary(glm(admit ~ gre + gpa + rank2 + rank3 + rank4, family=binomial, data=data1)) </code></pre> <p>结果:</p> <pre><code>Call: glm(formula = admit ~ gre + gpa + rank2 + rank3 + rank4, family = binomial, data = data1) Deviance Residuals: Min 1Q Median 3Q Max -1.5133 -0.8661 -0.6573 1.1808 2.0629 Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -4.184029 1.162421 -3.599 0.000319 *** gre 0.002358 0.001112 2.121 0.033954 * gpa 0.770591 0.343908 2.241 0.025046 * rank2 -0.369711 0.310342 -1.191 0.233535 rank3 -1.015012 0.335147 -3.029 0.002457 ** rank4 -1.249251 0.414416 -3.014 0.002574 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 466.13 on 377 degrees of freedom Residual deviance: 434.12 on 372 degrees of freedom AIC: 446.12 Number of Fisher Scoring iterations: 4 </code></pre> <p>结果相差很大,例如,秩2的p值分别为0.03和0.2。我想知道造成这种差异的原因是什么?请注意,我为这两个版本创建了虚拟变量,为python版本创建了一个常量列,它在R中自动处理</p> <p>而且,python似乎快了2倍:</p> <pre><code>################################################## # python timing def test(): for i in range(5000): logit = sm.Logit(data["admit"], data[train_cols]) result = logit.fit(disp=0) import time start = time.time() test() print(time.time() - start) 10.099738836288452 ################################################## # R timing > f = function() for(i in 1:5000) {mod = glm(admit ~ gre + gpa + rank2 + rank3 + rank4, family=binomial, data=data1)} > system.time(f()) user system elapsed 17.505 0.021 17.526 </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我只能回答,而不能在已接受的答案中添加评论。在python中,通常需要删除其中一个伪类,使其成为引用类,但我不认为您需要为R这样做,因为glm将为您设置引用类。基本上,如果我能正确理解你的代码,你就不需要这行了。。。在</p> <pre><code>data1 = data1[, -4] </code></pre> <p>试着把声望放在原样上,但要用作为因素()首先。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
Kerasterflow预训练模型中的纯训练偏差
7 回答
KerasTF Conv2D模型运行时无响应型号.fi
3 回答
Kerastuner Randomsearch:TypeError:(“关键字参数未理解:”,“激活”)
1 回答
Kerastuner ValueError:形状(320,)和(1,)不兼容
4 回答
Kerastuner:“ValueError:不是法律参数”问题,当我使用LSTM网络时,但密集层工作正常
2 回答
KerasTuner:是否可以在目标/度量函数中使用测试/验证集?
5 回答
KerasTuner自定义目标函数
5 回答
kerastuner调整层数会创建与报告的层数不同的层数
3 回答
KerasTuner运行时错误:构建模型的失败尝试太多
5 回答
kerasv1.2.2与kerasv2+的奇怪行为(精确度上的巨大差异)
9 回答
kerasvis中visualize_-cam/visualize_显著性的热图输出形状
2 回答
Kerasvis和tfkerasvis的激活最大化不适用于MobileNetV2模型
3 回答
Kerasvis对于显著性图表,我们应该使用softmax还是线性激活
4 回答
Kerasvis给出以下错误:AttributeError:多个入站节点
9 回答
kerasyolov3模型中预期输入和目标的格式和形状
5 回答
Keras一个GPU可以同时训练两个不相关的模型吗?
7 回答
Keras一类CNN两个输入,每一步一个
4 回答
keras三维张量上的Softmax层
5 回答
Keras三维目标预测
2 回答
keras上的flatten与python中的Image的区别
4 回答