标签: statsmodels

为什么我只从statsmodels OLS中获得一个参数

这是我在做的事情:

$ python
Python 2.7.6 (v2.7.6:3a1db0d2747e, Nov 10 2013, 00:42:54) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
>>> import statsmodels.api as sm
>>> statsmodels.__version__
'0.5.0'
>>> import numpy 
>>> y = numpy.array([1,2,3,4,5,6,7,8,9])
>>> X = numpy.array([1,1,2,2,3,3,4,4,5])
>>> res_ols = sm.OLS(y, X).fit()
>>> res_ols.params
array([ 1.82352941])
Run Code Online (Sandbox Code Playgroud)

我原本以为有两个元素的数组?!?截距和斜率系数?

python linear-regression pandas statsmodels

31
推荐指数
2
解决办法
3万
查看次数

使用pandas数据帧和statsmodels或scipy的python中的ANOVA?

我想使用Pandas数据帧来分解一个变量的方差.

例如,如果我有一个名为'Degrees'的列,并且我已将其编入索引以适应各种日期,城市和夜晚与日期,我想找出该系列中变体的哪一部分来自横截面城市变化,来自时间序列变化的变化多少,以及从夜晚到白天变化多少.

在Stata我会使用固定效果并查看R ^ 2.希望我的问题有道理.

基本上,我想要做的是找到其他三列的"度数"的ANOVA细分.

python scipy anova pandas statsmodels

29
推荐指数
1
解决办法
2万
查看次数

最高后密度区和中心可信区

给定一些参数Θ的后p(Θ| D),可以定义以下内容:

最高后部密度区域:

最高后验密度区域是集合Θ的最可能值,在总构成后部100质量(1-α)%的.

换句话说,对于给定的α,我们寻找满足以下条件的p*:

在此输入图像描述

然后获得最高后部密度区域作为集合:

在此输入图像描述

中央可信区域:

使用与上述相同的表示法,可信区域(或区间)定义为:

在此输入图像描述

根据分布,可能有许多这样的间隔.中心可信区间定义为每个尾部(1-α)/ 2质量的可信区间.

计算:

  • 对于一般分布,从分布中给出样本,是否有任何内置函数可以在Python或PyMC中获得上述两个量?

  • 对于常见的参数分布(例如Beta,Gaussian等),是否有任何内置函数或库可以使用SciPystatsmodels进行计算?

python statistics scipy statsmodels pymc

26
推荐指数
5
解决办法
9651
查看次数

Python中LOWESS的置信区间

如何计算Python中LOWESS回归的置信区间?我想将这些作为阴影区域添加到使用以下代码创建的LOESS图中(除了statsmodel之外的其他包也很好).

import numpy as np
import pylab as plt
import statsmodels.api as sm

x = np.linspace(0,2*np.pi,100)
y = np.sin(x) + np.random.random(100) * 0.2
lowess = sm.nonparametric.lowess(y, x, frac=0.1)

plt.plot(x, y, '+')
plt.plot(lowess[:, 0], lowess[:, 1])
plt.show()
Run Code Online (Sandbox Code Playgroud)

我在webblog Serious Stats中添加了一个带有置信区间的示例图(它是使用R中的ggplot创建的).

在此输入图像描述

python loess statsmodels

24
推荐指数
2
解决办法
3851
查看次数

大熊猫ACF和statsmodel ACF有什么区别?

我正在计算股票收益的自相关函数.为此,我测试了两个函数,autocorrPandas内置的函数,以及由... acf提供的函数statsmodels.tsa.这在以下MWE中完成:

import pandas as pd
from pandas_datareader import data
import matplotlib.pyplot as plt
import datetime
from dateutil.relativedelta import relativedelta
from statsmodels.tsa.stattools import acf, pacf

ticker = 'AAPL'
time_ago = datetime.datetime.today().date() - relativedelta(months = 6)

ticker_data = data.get_data_yahoo(ticker, time_ago)['Adj Close'].pct_change().dropna()
ticker_data_len = len(ticker_data)

ticker_data_acf_1 =  acf(ticker_data)[1:32]
ticker_data_acf_2 = [ticker_data.autocorr(i) for i in range(1,32)]

test_df = pd.DataFrame([ticker_data_acf_1, ticker_data_acf_2]).T
test_df.columns = ['Pandas Autocorr', 'Statsmodels Autocorr']
test_df.index += 1
test_df.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)

我注意到他们预测的价值不相同:

在此输入图像描述

是什么导致了这种差异,应该使用哪些值?

python pandas statsmodels

24
推荐指数
1
解决办法
2万
查看次数

OLS回归:Scikit与Statsmodels?

简短版本:我在某些数据上使用了scikit LinearRegression,但我习惯于p值,因此将数据放入statsmodels OLS中,尽管R ^ 2大致相同,但变量系数都大量不同.这让我很担心,因为最可能的问题是我在某个地方犯了错误,现在我对这两个输出都没有信心(因为我可能错误地制作了一个模型,但不知道哪个模型).

更长的版本:因为我不知道问题出在哪里,我不确切地知道要包括哪些细节,包括一切可能都太多了.我也不确定包含代码或数据.

我的印象是scikit的LR和statsmodels OLS都应该做OLS,据我所知OLS是OLS所以结果应该是相同的.

对于scikit的LR,结果是(统计上)相同,无论我是否设置normalize = True或= False,我觉得有点奇怪.

对于statsmodels OLS,我使用来自sklearn的StandardScaler来规范化数据.我添加了一列,所以它包含一个拦截(因为scikit的输出包括一个拦截).更多相关内容:http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html(添加此列并未将变量系数更改为任何显着程度,并且截距非常接近于零.)StandardScaler没有不喜欢我的整数不是浮点数,所以我尝试了这个:https://github.com/scikit-learn/scikit-learn/issues/1709 这使警告消失但结果完全相同.

当然,我使用5倍cv进行sklearn方法(每次R ^ 2对于测试和训练数据都是一致的),对于statsmodels我只是把它全部丢弃.

sklearn和statsmodels的R ^ 2约为0.41(这对社会科学有益).这可能是一个好兆头或只是巧合.

数据是对WoW中的化身的观察(来自http://mmnet.iis.sinica.edu.tw/dl/wowah/),我每周都会用一些不同的功能来制作它.最初这是一个数据科学课的课程项目.

独立变量包括一周中观察的数量(int),角色等级(int),如果在公会中(布尔),当看到时(工作日的布尔,平日前夕,工作日晚,周末相同的三个),对于字符类的虚拟(在数据收集时,在WoW中只有8个类,因此有7个虚拟变量并且原始字符串分类变量被删除),以及其他类.

因变量是每个字符在该周(int)中获得的级别数.

有趣的是,类似变量中的一些相对顺序在statsmodels和sklearn之间保持不变.因此,尽管负载非常不同,但"看到"的等级顺序是相同的,并且角色类假人的等级顺序是相同的,尽管负载是非常不同的.

我认为这个问题类似于这个问题:Python statsmodels OLS和R's lm的区别

我在Python和统计数据方面做得很好,但是还不够好,可以想出这样的东西.我试着阅读sklearn docs和statsmodels docs,但是如果答案就在那里,我不理解它.

我会很高兴知道:

  1. 哪个输出可能准确?(当然,如果我错过了一个小兵,他们可能都会.)
  2. 如果我弄错了,它是什么以及如何解决它?
  3. 我可以在没有问这里的情况下想出来,如果是这样的话怎么样?

我知道这个问题有一些相当模糊的部分(没有代码,没有数据,没有输出),但我认为它更多的是关于两个包的一般过程.当然,一个似乎更多的统计数据,似乎更多的机器学习,但他们都是OLS所以我不明白为什么输出不一样.

(我甚至尝试了一些其他的OLS调用三角测量,一个给了一个低得多的R ^ 2,一个循环了五分钟而我杀了它,一个崩溃了.)

谢谢!

python linear-regression scikit-learn statsmodels

23
推荐指数
1
解决办法
2万
查看次数

捕获statsmodels中的高多重共线性

说我在statsmodels中适合模型

mod = smf.ols('dependent ~ first_category + second_category + other', data=df).fit()
Run Code Online (Sandbox Code Playgroud)

当我这样做时,mod.summary()我可能会看到以下内容:

Warnings:
[1] The condition number is large, 1.59e+05. This might indicate that there are
strong multicollinearity or other numerical problems.
Run Code Online (Sandbox Code Playgroud)

有时警告是不同的(例如,基于设计矩阵的特征值).如何在变量中捕获高多重共线性条件?此警告是否存储在模型对象的某处?

另外,我在哪里可以找到字段的描述summary()

python statistics scipy statsmodels

23
推荐指数
2
解决办法
2万
查看次数

使用Dill序列化scikit-learn/statsmodels模型有哪些陷阱?

我需要序列化scikit-learn/statsmodels模型,以便将所有依赖项(代码+数据)打包在一个人工制品中,这个人工制品可用于初始化模型并进行预测.使用pickle module不是一个选项,因为这只会处理数据依赖(代码不会被打包).所以,我一直在用Dill进行实验.为了使我的问题更精确,以下是我建立模型并坚持下去的示例.

from sklearn import datasets
from sklearn import svm
from sklearn.preprocessing import Normalizer
import dill

digits = datasets.load_digits()
training_data_X = digits.data[:-5]
training_data_Y = digits.target[:-5]
test_data_X = digits.data[-5:]
test_data_Y = digits.target[-5:]

class Model:
    def __init__(self):
        self.normalizer = Normalizer()
        self.clf = svm.SVC(gamma=0.001, C=100.)
    def train(self, training_data_X, training_data_Y):
        normalised_training_data_X = normalizer.fit_transform(training_data_X)
        self.clf.fit(normalised_training_data_X, training_data_Y)
    def predict(self, test_data_X):
        return self.clf.predict(self.normalizer.fit_transform(test_data_X))  

model = Model()
model.train(training_data_X, training_data_Y)
print model.predict(test_data_X)
dill.dump(model, open("my_model.dill", 'w'))
Run Code Online (Sandbox Code Playgroud)

与此相对应,以下是我如何初始化持久化模型(在新会话中)并进行预测.请注意,此代码未明确初始化或了解class Model.

import dill
from sklearn import datasets

digits …
Run Code Online (Sandbox Code Playgroud)

python pickle scikit-learn statsmodels dill

23
推荐指数
2
解决办法
2830
查看次数

Python statsmodels OLS和R的lm的区别

我不确定为什么我的简单OLS会得到略微不同的结果,这取决于我是否通过panda的实验性rpy接口进行回归,R或者我是否在Python中使用statsmodel.

import pandas
from rpy2.robjects import r

from functools import partial

loadcsv = partial(pandas.DataFrame.from_csv,
                  index_col="seqn", parse_dates=False)

demoq = loadcsv("csv/DEMO.csv")
rxq = loadcsv("csv/quest/RXQ_RX.csv")

num_rx = {}
for seqn, num in rxq.rxd295.iteritems():
    try:
        val = int(num)
    except ValueError:
        val = 0
    num_rx[seqn] = val

series = pandas.Series(num_rx, name="num_rx")
demoq = demoq.join(series)

import pandas.rpy.common as com
df = com.convert_to_r_dataframe(demoq)
r.assign("demoq", df)
r('lmout <- lm(demoq$num_rx ~ demoq$ridageyr)')  # run the regression
r('print(summary(lmout))')  # print from R
Run Code Online (Sandbox Code Playgroud)

从中R …

python r rpy2 pandas statsmodels

22
推荐指数
2
解决办法
6008
查看次数

ImportError:没有名为statsmodels的模块

嗨,我从http://pypi.python.org/pypi/statsmodels#downloads下载了StatsModels源码, 然后我解压缩到

/usr/local/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)

并根据http://statsmodels.sourceforge.net/devel/install.html上的文档做到了这一点

sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)

它已安装,但是当我尝试导入时

import statsmodels.api as sm
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Traceback (most recent call last):
  File "/home/Astrophysics/Histogram_Fast.py", line 6, in <module>
import statsmodels.api as sm
ImportError: No module named statsmodels.api
Run Code Online (Sandbox Code Playgroud)

我读了一些有类似问题的帖子,并检查安装了setuptools,它也在

 /usr/local/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)

我有点不知所措,并会给予任何帮助

我也在跑

numpy 1.6
Run Code Online (Sandbox Code Playgroud)

所以那不是问题

python import statsmodels

21
推荐指数
1
解决办法
4万
查看次数