这是我在做的事情:
$ 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)
我原本以为有两个元素的数组?!?截距和斜率系数?
我想使用Pandas数据帧来分解一个变量的方差.
例如,如果我有一个名为'Degrees'的列,并且我已将其编入索引以适应各种日期,城市和夜晚与日期,我想找出该系列中变体的哪一部分来自横截面城市变化,来自时间序列变化的变化多少,以及从夜晚到白天变化多少.
在Stata我会使用固定效果并查看R ^ 2.希望我的问题有道理.
基本上,我想要做的是找到其他三列的"度数"的ANOVA细分.
给定一些参数Θ的后p(Θ| D),可以定义以下内容:
的最高后验密度区域是集合Θ的最可能值,在总构成后部100质量(1-α)%的.
换句话说,对于给定的α,我们寻找满足以下条件的p*:

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

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

根据分布,可能有许多这样的间隔.中心可信区间定义为每个尾部有(1-α)/ 2质量的可信区间.
对于常见的参数分布(例如Beta,Gaussian等),是否有任何内置函数或库可以使用SciPy或statsmodels进行计算?
如何计算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创建的).

我正在计算股票收益的自相关函数.为此,我测试了两个函数,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)
我注意到他们预测的价值不相同:
是什么导致了这种差异,应该使用哪些值?
简短版本:我在某些数据上使用了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,但是如果答案就在那里,我不理解它.
我会很高兴知道:
我知道这个问题有一些相当模糊的部分(没有代码,没有数据,没有输出),但我认为它更多的是关于两个包的一般过程.当然,一个似乎更多的统计数据,似乎更多的机器学习,但他们都是OLS所以我不明白为什么输出不一样.
(我甚至尝试了一些其他的OLS调用三角测量,一个给了一个低得多的R ^ 2,一个循环了五分钟而我杀了它,一个崩溃了.)
谢谢!
说我在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()?
我需要序列化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) 我不确定为什么我的简单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 …
嗨,我从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 ×10
statsmodels ×10
pandas ×4
scipy ×3
scikit-learn ×2
statistics ×2
anova ×1
dill ×1
import ×1
loess ×1
pickle ×1
pymc ×1
r ×1
rpy2 ×1