标签: statsmodels

在 patsy 中从 DesignMatrix 获取名称

from patsy import *
from pandas import *
dta =  DataFrame([["lo", 1],["hi", 2.4],["lo", 1.2],["lo", 1.4],["very_high",1.8]], columns=["carbs", "score"])
dmatrix("carbs + score", dta)
DesignMatrix with shape (5, 4)
Intercept  carbs[T.lo]  carbs[T.very_high]  score
        1            1                   0    1.0
        1            0                   0    2.4
        1            1                   0    1.2
        1            1                   0    1.4
        1            0                   1    1.8
Terms:
'Intercept' (column 0), 'carbs' (columns 1:3), 'score' (column 3)
Run Code Online (Sandbox Code Playgroud)

问题:我是否可以不读取此 DesignMatrix 给出的名称,而不是使用 Designinfo 指定列的“名称”(这基本上使我的代码的可重用性降低),以便稍后将其输入到 DataFrame 中,而无需知道预先确定“参考水平/对照组”水平是多少?

IE。当我做 dmatrix("C(carbs, Treatment(reference='lo')) + Score", dta)

"""
# How can I get …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 pandas statsmodels patsy

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

尝试使用 scipy 拟合学生 t 分布时出现异常

我试图适应我所拥有的一些数据的分布。为了测试它,我首先尝试从固定分布生成样本并尝试拟合它。下面是我正在使用的代码。

samp = t.rvs(loc=0, scale=0.6, df=1.3, size=150)

param = t.fit(samp)

x = linspace(-5,5,100)

pdf_fitted = t.pdf(x,loc=param[0],scale=param[1],df=param[2])
pdf = t.pdf(x,loc=0,scale=0.6,df=1.3)

title('Student\'s t Distribution')
plot(x,pdf_fitted,'r-',x,pdf,'b-')
hist(samp, normed=1,alpha=0.3)
show()
print(param)
Run Code Online (Sandbox Code Playgroud)

现在,人们会期望这一点pdf并且pdf_fitted本质上是相同的。然而,事实并非如此。当显示图时,原始分布和拟合分布看起来非常不同。而且,获得的参数与指定的参数(loc=0,scale=0.6,df=1.3)根本不匹配!这让我很困惑,因为我只是调整http://glowingpython.blogspot.com/2012/07/distribution-fitting-with-scipy.html中的代码来处理 t 分布。有人可以告诉我拟合 t 分布是否有任何细微差别吗?谢谢

python numpy scipy statsmodels

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

从 OLS 回归结果中读取 coef 值

我使用 pandas 和 statsmodels 进行线性回归。但是,我找不到任何可能的方法来读取结果。结果已显示,但我需要使用 coef 值进行一些进一步的计算。有没有可能的方法将 coef 值存储到新变量中?

import statsmodels.api as sm
import numpy
ones = numpy.ones(len(x[0]))
t = sm.add_constant(numpy.column_stack((x[0], ones)))
for m in x[1:]:
    t = sm.add_constant(numpy.column_stack((m, t)))
results = sm.OLS(y, t).fit()
Run Code Online (Sandbox Code Playgroud)

这是结果的图像

python numpy linear-regression pandas statsmodels

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

Python:不要在 statsmodels 摘要中显示虚拟对象

我正在使用 statsmodels 创建一些回归输出:

import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.iolib.summary2 import summary_col
import numpy as np 
import pandas as pd 

x1 = pd.Series(np.random.randn(2000))
x2 = pd.Series(np.random.randn(2000))
aa_milne_arr = ['a', 'b', 'c', 'd', "e", "f", "g", "h", "i"]
dummy = pd.Series(np.random.choice(aa_milne_arr, 2000,))
depen = pd.Series(np.random.randn(2000))
df = pd.DataFrame({"y": depen, "x1": x1, "x2": x2, "dummy": dummy})
df['const'] = 1
df['xsqr'] = df['x1']**2  
mod = smf.ols('y ~ x1 + x2 + dummy', data=df)
mod2 = smf.ols('y ~ x1 + x2 …
Run Code Online (Sandbox Code Playgroud)

python regression statsmodels

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

无法导入 statsmodels.formula.api

每当我尝试将 statsmodels.formula.api 作为 smf 导入时,我都会收到以下错误。

import statsmodels.formula.api as smf

Traceback (most recent call last):

File "<ipython-input-257-268d740a5877>", line 1, in <module>
   import statsmodels.formula.api as smf

File "C:\Users\ldresl\Anaconda3\lib\site- 
    packages\statsmodels\formula\__init__.py", line 1, in <module>
  from statsmodels import PytestTester

 ImportError: cannot import name 'PytestTester'
Run Code Online (Sandbox Code Playgroud)

python statsmodels

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

Python 线性回归模型(Pandas、statsmodels) - 值错误:endog exog 矩阵大小不匹配

我的一个朋友问我这个线性回归代码,我也无法解决,所以现在也是我的问题。

我们得到的错误: ValueError:endog 和 exog 矩阵的大小不同

当我从 ind_names 中删除“Tech”时,它工作正常。这可能毫无意义,但为了消除语法错误的可能性,我尝试这样做。

技术和金融行业标签在 DataFrame 中分布不均,所以这可能导致大小不匹配?但我无法进一步调试,所以决定问你们。

对错误和解决方案的想法得到一些确认真是太好了。请在下面找到代码。

    #We have a portfolio constructed of 3 randomly generated factors (fac1, fac2, fac3). 
#Python code provides the following message 
#ValueError: The indices for endog and exog are not aligned

import pandas as pd
from numpy.random import rand
import numpy as np
import statsmodels.api as sm

fac1, fac2, fac3 = np.random.rand(3, 1000) #Generate  random factors

#Consider a collection of hypothetical stock portfolios
#Generate randomly 1000 tickers
import random; …
Run Code Online (Sandbox Code Playgroud)

python linear-regression pandas statsmodels

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

Statsmodels.formula.api OLS 不显示截距的统计值

我正在运行以下源代码:

import statsmodels.formula.api as sm

# Add one column of ones for the intercept term
X = np.append(arr= np.ones((50, 1)).astype(int), values=X, axis=1)

regressor_OLS = sm.OLS(endog=y, exog=X).fit()
print(regressor_OLS.summary())
Run Code Online (Sandbox Code Playgroud)

在哪里

X 是一个 50x5(在添加截距项之前)的 numpy 数组,如下所示:

[[0 1 165349.20 136897.80 471784.10]
 [0 0 162597.70 151377.59 443898.53]...]
Run Code Online (Sandbox Code Playgroud)

并且y是一个 50x1 numpy 数组,具有因变量的浮点值。

前两列用于具有三个不同值的虚拟变量。其余的列是三个不同的独立变量。

虽然,据说statsmodels.formula.api.OLS自动添加了一个拦截项(参见@stellacia 的回答:OLS using statsmodel.formula.api vs statsmodel.api)它summary没有显示拦截项的统计值,在我的情况下如下所示:

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                 Profit   R-squared:                       0.988
Model:                            OLS   Adj. R-squared:                  0.986
Method:                 Least Squares   F-statistic: …
Run Code Online (Sandbox Code Playgroud)

python statistics regression linear-regression statsmodels

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

STL 分解摆脱 NaN 值

对以下链接进行了调查,但没有为我提供我正在寻找/解决问题的答案:FirstSecond

由于保密问题,我无法发布实际分解我可以显示我当前的代码并给出数据集的长度,如果这还不够,我将删除这个问题。

import numpy as np
from statsmodels.tsa import seasonal
def stl_decomposition(data):
    data = np.array(data)
    data = [item for sublist in data for item in sublist]
    decomposed = seasonal.seasonal_decompose(x=data, freq=12)

    seas = decomposed.seasonal
    trend = decomposed.trend
    res = decomposed.resid
Run Code Online (Sandbox Code Playgroud)

在图中,它显示它根据加法模型正确分解。然而,趋势和残差列表的前 6 个月和最后 6 个月都有 NaN 值。当前数据集的大小为 10*12。理想情况下,这应该适用于仅 2 年的时间。

这仍然像第一个链接中所说的那样太小吗?即我需要自己推断额外的分数?

编辑:似乎在趋势和残差的两端,频率的一半总是 NaN。同样适用于减小数据集的大小。

python-3.x statsmodels

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

当我使用 Pandas statsmodels 时,我得到一个断言错误

我正在尝试普通最小二乘法的示例,代码如下。

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
dat = sm.datasets.get_rdataset("Guerry", "HistData").data
results = smf.ols('Lottery ~ Literacy + np.log(Pop1831)', data=dat).fit()
print(results.summary())
Run Code Online (Sandbox Code Playgroud)

但我在下面得到这个错误,示例的来源在网站http://www.statsmodels.org/stable/index.html 我的 statsmodels 版本是 0.9,我只是像第一个朋友所说的那样删除 np,但是我仍然遇到同样的错误,所以它不起作用,我只能尝试这些,请帮助我..... 错误太长,所以我需要把它切成几块

第一部分如下:

AssertionError                            Traceback (most recent call last)
<ipython-input-6-1d91087b5e15> in <module>()
      3 import statsmodels.formula.api as smf
      4 dat = sm.datasets.get_rdataset("Guerry", "HistData").data
----> 5 results = smf.ols('Lottery ~ Literacy + log(Pop1831)', data=dat).fit()
      6 print(results.summary())

~\Anaconda3\lib\site-packages\statsmodels\base\model.py in from_formula(cls, formula, data, subset, drop_cols, *args, **kwargs)
    153 
    154         tmp = handle_formula_data(data, …
Run Code Online (Sandbox Code Playgroud)

python pandas statsmodels

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

在 jupyter 笔记本中并排显示 statsmodels plot_acf 和 plot_pacf

有人可以告诉我如何显示plot_acfplot_pacf并排?我在show=False争论和 matplotlib 疯狂的对象模型中挣扎......

matplotlib statsmodels jupyter-notebook

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