标签: statsmodels

如何迭代pandas数据帧的列以运行回归

我确信这很简单,但作为python的完全新手,我无法弄清楚如何迭代pandas数据框中的变量并对每个变量运行回归.

这是我正在做的事情:

all_data = {}
for ticker in ['FIUIX', 'FSAIX', 'FSAVX', 'FSTMX']:
    all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2010', '1/1/2015')

prices = DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()})  
returns = prices.pct_change()
Run Code Online (Sandbox Code Playgroud)

我知道我可以运行这样的回归:

regs = sm.OLS(returns.FIUIX,returns.FSTMX).fit()
Run Code Online (Sandbox Code Playgroud)

但是假设我想为数据框中的每一列执行此操作.特别是,我想在FSTMX上退回FIUIX,然后在FSTMX上退回FSAIX,然后在FSTMX上退回FSAVX.在每次回归之后我想存储残差.

我已经尝试了以下各种版本,但我必须得到错误的语法:

resids = {}
for k in returns.keys():
    reg = sm.OLS(returns[k],returns.FSTMX).fit()
    resids[k] = reg.resid
Run Code Online (Sandbox Code Playgroud)

我认为问题是我不知道如何按键引用返回列,所以returns[k]可能是错误的.

任何关于最佳方法的指导都将非常感激.也许我缺少一种常见的熊猫方法.

python pandas statsmodels

162
推荐指数
7
解决办法
34万
查看次数

使用Pandas Data Frame运行OLS回归

我有一个pandas数据框,我希望能够从B列和C列中的值预测A列的值.这是一个玩具示例:

import pandas as pd
df = pd.DataFrame({"A": [10,20,30,40,50], 
                   "B": [20, 30, 10, 40, 50], 
                   "C": [32, 234, 23, 23, 42523]})
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会有类似的东西ols(A ~ B + C, data = df),但当我从算法库中查看示例时,scikit-learn它似乎将数据提供给模型,其中包含行而不是列.这将要求我将数据重新格式化为列表中的列表,这似乎首先打败了使用pandas的目的.在pandas数据框中对数据运行OLS回归(或更普遍的机器学习算法)的最pythonic方法是什么?

python regression pandas scikit-learn statsmodels

107
推荐指数
5
解决办法
17万
查看次数

ValueError:numpy.dtype的大小错误,请尝试重新编译

我刚刚在我的python 2.7上安装了pandas和statsmodels包当我尝试"导入pandas as pd"时,会出现此错误消息.有人可以帮忙吗?谢谢!!!

numpy.dtype has the wrong size, try recompiling
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\formula\__init__.py",
line 4, in <module>
    from formulatools import handle_formula_data
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\formula\formulatools.p
y", line 1, in <module>
    import statsmodels.tools.data as data_util
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\tools\__init__.py", li
ne 1, in <module>
    from tools import add_constant, categorical
  File "C:\analytics\ext\python27\lib\site-packages\statsmodels-0.5.0-py2.7-win32.egg\statsmodels\tools\tools.py", line
14, in <module>
    from pandas import DataFrame
  File "C:\analytics\ext\python27\lib\site-packages\pandas\__init__.py", line 6, in <module>
    from . import hashtable, tslib, lib
  File "numpy.pxd", line …
Run Code Online (Sandbox Code Playgroud)

python install numpy pandas statsmodels

85
推荐指数
4
解决办法
8万
查看次数

NumPy中的加权标准差

numpy.average()有一个权重选项,但numpy.std()没有.有没有人有解决方法的建议?

python numpy weighted standard-deviation statsmodels

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

auto.arima()等效于python

我试图使用ARMA ARIMA模型预测每周销售额.我找不到调整顺序(p,d,q)的函数statsmodels.目前R具有forecast::auto.arima()调整(p,d,q)参数的功能.

如何为我的模型选择正确的订单?为此目的,python中是否有可用的库?

python r time-series forecasting statsmodels

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

在一维观测数据中检测异常值的Pythonic方法

对于给定的数据,我想将异常值(由95%confidense级别或95%分位数函数或任何需要的东西定义)设置为nan值.以下是我现在使用的数据和代码.如果有人能够进一步解释我,我会很高兴的.

import numpy as np, matplotlib.pyplot as plt

data = np.random.rand(1000)+5.0

plt.plot(data)
plt.xlabel('observation number')
plt.ylabel('recorded value')
plt.show()
Run Code Online (Sandbox Code Playgroud)

python statistics numpy matplotlib statsmodels

51
推荐指数
4
解决办法
7万
查看次数

StatsModels的置信度和预测间隔

我这样做linear regressionStatsModels:

import numpy as np
import statsmodels.api as sm
from statsmodels.sandbox.regression.predstd import wls_prediction_std

n = 100

x = np.linspace(0, 10, n)
e = np.random.normal(size=n)
y = 1 + 0.5*x + 2*e
X = sm.add_constant(x)

re = sm.OLS(y, X).fit()
print(re.summary())

prstd, iv_l, iv_u = wls_prediction_std(re)
Run Code Online (Sandbox Code Playgroud)

我的问题是,iv_liv_u为上,下置信区间预测区间

我如何得到别人?

我需要所有点的置信度和预测间隔,做一个情节.

python statistics statsmodels

39
推荐指数
3
解决办法
4万
查看次数

在哪里可以找到scipy的疯狂(平均绝对偏差)?

似乎scipy曾经提供了一个函数mad来计算一组数字的平均绝对偏差:

http://projects.scipy.org/scipy/browser/trunk/scipy/stats/models/utils.py?rev=3473

但是,我无法在当前版本的scipy中找到它.当然可以从存储库中复制旧代码,但我更喜欢使用scipy的版本.我在哪里可以找到它,或者它已被替换或删除?

python scipy statsmodels

34
推荐指数
5
解决办法
4万
查看次数

相当于Python中的Stata宏

我正在尝试使用Python进行统计分析.

在Stata中,我可以定义本地宏并根据需要展开它们:

program define reg2
    syntax varlist(min=1 max=1), indepvars(string) results(string)
    if "`results'" == "y" {
        reg `varlist' `indepvars'
    }
    if "`results'" == "n" {
        qui reg `varlist' `indepvars'
    }
end

sysuse auto, clear
Run Code Online (Sandbox Code Playgroud)

所以代替:

reg2 mpg, indepvars("weight foreign price") results("y")
Run Code Online (Sandbox Code Playgroud)

我可以:

local options , indepvars(weight foreign price) results(y) 
reg2 mpg `options'
Run Code Online (Sandbox Code Playgroud)

甚至:

local vars weight foreign price
local options , indepvars(`vars') results(y) 
reg2 mpg `options'
Run Code Online (Sandbox Code Playgroud)

Stata中的宏帮助我编写干净的脚本,而无需重复代码.

在Python中我尝试了字符串插值,但这在函数中不起作用.

例如:

def reg2(depvar, indepvars, results):
    print(depvar)
    print(indepvars)
    print(results)
Run Code Online (Sandbox Code Playgroud)

以下运行正常:

reg2('mpg', 'weight foreign price', …
Run Code Online (Sandbox Code Playgroud)

python stata pandas statsmodels stata-macros

34
推荐指数
2
解决办法
3607
查看次数

为什么我只从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万
查看次数