我确信这很简单,但作为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]
可能是错误的.
任何关于最佳方法的指导都将非常感激.也许我缺少一种常见的熊猫方法.
我有一个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 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) numpy.average()
有一个权重选项,但numpy.std()
没有.有没有人有解决方法的建议?
我试图使用ARMA ARIMA模型预测每周销售额.我找不到调整顺序(p,d,q)的函数statsmodels
.目前R具有forecast::auto.arima()
调整(p,d,q)参数的功能.
如何为我的模型选择正确的订单?为此目的,python中是否有可用的库?
对于给定的数据,我想将异常值(由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) 我这样做linear regression
有StatsModels
:
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_l
和iv_u
为上,下置信区间或预测区间?
我如何得到别人?
我需要所有点的置信度和预测间隔,做一个情节.
似乎scipy曾经提供了一个函数mad
来计算一组数字的平均绝对偏差:
http://projects.scipy.org/scipy/browser/trunk/scipy/stats/models/utils.py?rev=3473
但是,我无法在当前版本的scipy中找到它.当然可以从存储库中复制旧代码,但我更喜欢使用scipy的版本.我在哪里可以找到它,或者它已被替换或删除?
我正在尝试使用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
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 ×10
statsmodels ×10
pandas ×5
numpy ×3
statistics ×2
forecasting ×1
install ×1
matplotlib ×1
r ×1
regression ×1
scikit-learn ×1
scipy ×1
stata ×1
stata-macros ×1
time-series ×1
weighted ×1