简短版本: 我在处理一些数据时使用了scikit的LinearRegression,但我习惯于使用p值,所以将数据放入statsmodels的OLS中。虽然R^2大致相同,但变量系数差别很大。这让我感到担忧,因为最可能的问题是我犯了一个错误,现在我对两个输出都不太有信心(因为可能我已经错误地建立了一个模型,但不知道哪一个)。
更长版本: 因为我不知道问题出在哪里,也不确定应该包含哪些细节,包含所有信息可能太多了。我也不确定是否应该包含代码或数据。
我认为scikit的LR和statsmodels的OLS都应该在进行OLS,据我所知,OLS就是OLS,因此结果应该是相同的。
对于scikit的LR,无论我设置normalize=True还是False,结果(在统计上)都是相同的,这让我感到有些奇怪。
对于statsmodels OLS,我使用sklearn的StandardScaler来规范化数据。我添加了一列1,以包含截距(因为scikit的输出包括一个截距)。更多信息请参见:http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html (添加这一列并没有明显改变变量系数,而且截距非常接近零)。由于StandardScaler不喜欢我的整数不是浮点数,所以我尝试了这个:https://github.com/scikit-learn/scikit-learn/issues/1709。这样可以消除警告,但结果完全相同。
虽然我在sklearn方法中使用了5倍交叉验证(每次测试和训练数据的R ^ 2都是一致的),但对于statsmodels方法,我只是将所有数据都放在一起。
sklearn和statsmodels的R ^ 2分别约为0.41(这对社会科学来说很好)。这可能是一个好兆头,也可能只是巧合。
这份数据是关于魔兽世界中角色头像的观察数据(来源于 http://mmnet.iis.sinica.edu.tw/dl/wowah/),我对其进行了处理,使其变成了每周一次并添加了一些不同的特征。最初这是一项数据科学课程的项目。
自变量包括每周的观察次数(整数)、角色等级(整数)、是否在公会中(布尔值)、上线时间(平日白天、平日晚上、平日深夜、周末同样有三个布尔值)、角色职业的虚拟变量(当时魔兽世界只有8个职业,因此有7个虚拟变量,原始字符串分类变量被删除)以及其他变量。
因变量是每个角色在那周内获得的等级数(整数)。
有趣的是,在统计模型和sklearn中,某些类似变量的相对顺序是保持一致的。因此,“上线时间”的排名顺序是相同的,尽管载荷非常不同,而角色职业虚拟变量的排名顺序也是相同的,尽管载荷再次非常不同。
我认为这个问题类似于这个问题: Python statsmodels OLS和R的lm的区别 我对Python和统计学足够熟练,但不足以弄清楚这样的问题。我尝试阅读sklearn文档和statsmodels文档,但如果答案就在那里盯着我,我也不理解它。
我想知道:
1.哪个输出可能是准确的?(如果我错过了一个kwarg,那么它们两个都可能是准确的。) 2.如果我犯了一个错误,那么是什么错误,如何修复? 3.我是否可以在没有询问这里的情况下弄清楚这一点,如果可以,那么如何?
我知道这个问题有一些相当模糊的部分(没有代码,没有数据,没有输出),但我认为它更多地涉及两个软件包的一般过程。当然,一个似乎更注重统计学,而另一个似乎更注重机器学习,但它们都是OLS,所以我不明白为什么输出不同。
我认为scikit的LR和statsmodels的OLS都应该在进行OLS,据我所知,OLS就是OLS,因此结果应该是相同的。
对于scikit的LR,无论我设置normalize=True还是False,结果(在统计上)都是相同的,这让我感到有些奇怪。
对于statsmodels OLS,我使用sklearn的StandardScaler来规范化数据。我添加了一列1,以包含截距(因为scikit的输出包括一个截距)。更多信息请参见:http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html (添加这一列并没有明显改变变量系数,而且截距非常接近零)。由于StandardScaler不喜欢我的整数不是浮点数,所以我尝试了这个:https://github.com/scikit-learn/scikit-learn/issues/1709。这样可以消除警告,但结果完全相同。
虽然我在sklearn方法中使用了5倍交叉验证(每次测试和训练数据的R ^ 2都是一致的),但对于statsmodels方法,我只是将所有数据都放在一起。
sklearn和statsmodels的R ^ 2分别约为0.41(这对社会科学来说很好)。这可能是一个好兆头,也可能只是巧合。
这份数据是关于魔兽世界中角色头像的观察数据(来源于 http://mmnet.iis.sinica.edu.tw/dl/wowah/),我对其进行了处理,使其变成了每周一次并添加了一些不同的特征。最初这是一项数据科学课程的项目。
自变量包括每周的观察次数(整数)、角色等级(整数)、是否在公会中(布尔值)、上线时间(平日白天、平日晚上、平日深夜、周末同样有三个布尔值)、角色职业的虚拟变量(当时魔兽世界只有8个职业,因此有7个虚拟变量,原始字符串分类变量被删除)以及其他变量。
因变量是每个角色在那周内获得的等级数(整数)。
有趣的是,在统计模型和sklearn中,某些类似变量的相对顺序是保持一致的。因此,“上线时间”的排名顺序是相同的,尽管载荷非常不同,而角色职业虚拟变量的排名顺序也是相同的,尽管载荷再次非常不同。
我认为这个问题类似于这个问题: Python statsmodels OLS和R的lm的区别 我对Python和统计学足够熟练,但不足以弄清楚这样的问题。我尝试阅读sklearn文档和statsmodels文档,但如果答案就在那里盯着我,我也不理解它。
我想知道:
1.哪个输出可能是准确的?(如果我错过了一个kwarg,那么它们两个都可能是准确的。) 2.如果我犯了一个错误,那么是什么错误,如何修复? 3.我是否可以在没有询问这里的情况下弄清楚这一点,如果可以,那么如何?
我知道这个问题有一些相当模糊的部分(没有代码,没有数据,没有输出),但我认为它更多地涉及两个软件包的一般过程。当然,一个似乎更注重统计学,而另一个似乎更注重机器学习,但它们都是OLS,所以我不明白为什么输出不同。
我甚至尝试了一些其他的OLS调用来进行三角剖分,其中一个R^2值明显较低,另一个循环了五分钟后我强制停止了它,还有一个崩溃了。
谢谢!