我需要一些关于为Python选择统计软件包的建议,我做了很多搜索,但不确定我是否做得对,特别是statsmodels和scipy.stats之间的区别.
我知道的一件事是scikits命名空间是scipy的特定"分支",而以前的scikits.statsmodels现在称为statsmodels.另一方面,还有scipy.stats.两者之间有什么区别,哪一个是Python 的统计软件包?
谢谢.
- 编辑 -
我更改了标题,因为有些答案与问题没有关系,我认为这是因为标题不够明确.
我正在尝试计算python中简单数据集中每列的方差膨胀因子(VIF):
a b c d
1 2 4 4
1 2 6 3
2 3 7 4
3 2 8 5
4 1 9 4
Run Code Online (Sandbox Code Playgroud)
我已经使用usdm库中的vif函数在R中完成了这个,它给出了以下结果:
a <- c(1, 1, 2, 3, 4)
b <- c(2, 2, 3, 2, 1)
c <- c(4, 6, 7, 8, 9)
d <- c(4, 3, 4, 5, 4)
df <- data.frame(a, b, c, d)
vif_df <- vif(df)
print(vif_df)
Variables VIF
a 22.95
b 3.00
c 12.95
d 3.00
Run Code Online (Sandbox Code Playgroud)
但是,当我使用statsmodel vif函数在python中执行相同操作时,我的结果是: …
我试过查看Python的多个统计模块,但似乎找不到任何支持one-way ANOVA
post hoc测试.
我一直在使用Python进行回归分析.获得回归结果后,我需要将所有结果汇总到一个表中并将它们转换为LaTex(用于发布).是否有任何包在Python中执行此操作?像Stata中的estout这样的东西给出了下表:
假设我有一些我凭经验得到的数据:
from scipy import stats
size = 10000
x = 10 * stats.expon.rvs(size=size) + 0.2 * np.random.uniform(size=size)
Run Code Online (Sandbox Code Playgroud)
它呈指数分布(有一些噪音),我想用卡方拟合优度(GoF)测试验证这一点.使用Python中的标准科学库(例如scipy或statsmodels)以最少的手动步骤和假设进行此操作的最简单方法是什么?
我可以使用以下模型:
param = stats.expon.fit(x)
plt.hist(x, normed=True, color='white', hatch='/')
plt.plot(grid, distr.pdf(np.linspace(0, 100, 10000), *param))
Run Code Online (Sandbox Code Playgroud)
计算Kolmogorov-Smirnov检验非常优雅.
>>> stats.kstest(x, lambda x : stats.expon.cdf(x, *param))
(0.0061000000000000004, 0.85077099515985011)
Run Code Online (Sandbox Code Playgroud)
但是,我找不到计算卡方检验的好方法.
在statsmodel中有一个卡方的GoF函数,但它假定为离散分布(并且指数分布是连续的).
该官员scipy.stats教程只涵盖的情况下,自定义分布和概率与许多表达式(npoints,npointsh,N键合,normbound)摆弄建成,所以它不是很清楚,我该怎么办呢其他分布.该卡方例子假设与预期值和已经获得的自由度.
此外,我不是在寻找一种"手动"执行测试的方法,如此处已经讨论过的,但是我想知道如何应用其中一个可用的库函数.
(抱歉要问,但http://statsmodels.sourceforge.net/目前已关闭,我无法访问文档)
我正在使用线性回归statsmodels
,基本上:
import statsmodels.api as sm
model = sm.OLS(y,x)
results = model.fit()
Run Code Online (Sandbox Code Playgroud)
我知道我可以打印出完整的结果集:
print results.summary()
Run Code Online (Sandbox Code Playgroud)
输出如下:
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.952
Model: OLS Adj. R-squared: 0.951
Method: Least Squares F-statistic: 972.9
Date: Mon, 20 Jul 2015 Prob (F-statistic): 5.55e-34
Time: 15:35:22 Log-Likelihood: -78.843
No. Observations: 50 AIC: 159.7
Df Residuals: 49 BIC: 161.6
Df Model: 1
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1 1.0250 0.033 …
Run Code Online (Sandbox Code Playgroud) 我正在研究python中的时间序列.我觉得有用和有前途的图书馆是
也用于可视化:matplotlib
有没有人知道指数平滑的库?
我有一些pandas数据帧,其中一些分类预测变量(即变量)为0和1,以及一些数字变量.当我适合像以下的stasmodel:
est = sm.OLS(y, X).fit()
Run Code Online (Sandbox Code Playgroud)
它抛出:
Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).
Run Code Online (Sandbox Code Playgroud)
我使用了转换DataFrame的所有dtypes df.convert_objects(convert_numeric=True)
在此之后,所有数据框变量的dtypes都显示为int32或int64.但最后它仍然显示dtype: object
,像这样:
4516 int32
4523 int32
4525 int32
4531 int32
4533 int32
4542 int32
4562 int32
sex int64
race int64
dispstd int64
age_days int64
dtype: object
Run Code Online (Sandbox Code Playgroud)
这里4516,4523是变量标签.
任何的想法?我需要在数百个变量上构建一个多元回归模型.为此,我连接了3个pandas DataFrames,以提出用于模型构建的最终DataFrame.
给出一些随机生成的数据
使用R,可以实现泊松glm和诊断图:
> col=2
> row=50
> range=0:100
> df <- data.frame(replicate(col,sample(range,row,rep=TRUE)))
> model <- glm(X2 ~ X1, data = df, family = poisson)
> glm.diag.plots(model)
Run Code Online (Sandbox Code Playgroud)
在Python中,这将给出线预测器与剩余图:
import numpy as np
import pandas as pd
import statsmodels.formula.api
from statsmodels.genmod.families import Poisson
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randint(100, size=(50,2)))
df.rename(columns={0:'X1', 1:'X2'}, inplace=True)
glm = statsmodels.formula.api.gee
model = glm("X2 ~ X1", groups=None, data=df, family=Poisson())
results = model.fit()
Run Code Online (Sandbox Code Playgroud)
并在Python中绘制诊断图: …
所以我有一个包含两列的 CSV 文件:日期和价格,但是当我尝试在该时间序列上使用 ARIMA 时,我遇到了这个错误:
ValueWarning:提供了日期索引,但它没有相关的频率信息,因此在预测时将被忽略。
'在例如预测时被忽略。', ValueWarning)
所以我发现了这两个问题:
ValueWarning:未提供频率信息,因此将使用推断频率 MS
但是当我尝试运行示例中的代码(第二个链接)时:
import pandas as pd
from statsmodels.tsa.arima_model import ARMA
df=pd.DataFrame({"val": pd.Series([1.1,1.7,8.4 ],
index=['2015-01-15 12:10:23','2015-02-15 12:10:23','2015-03-15 12:10:23'])})
print df
'''
val
2015-01-15 12:10:23 1.1
2015-02-15 12:10:23 1.7
2015-03-15 12:10:23 8.4
'''
print df.index
'''
Index([u'2015-01-15 12:10:23',u'2015-02-15 12:10:23',u'2015-03-15 12:10:23'], dtype='object')
'''
df.index = pd.DatetimeIndex(df.index)
print df.index
'''
DatetimeIndex(['2015-01-15 12:10:23', '2015-02-15 12:10:23',
'2015-03-15 12:10:23'],
dtype='datetime64[ns]', freq=None)
'''
model = ARMA(df["val"], (1,0))
print model
Run Code Online (Sandbox Code Playgroud)
我也收到了同样的 ValueWarning,所以我试图改变这一行:
df.index = pd.DatetimeIndex(df.index)
Run Code Online (Sandbox Code Playgroud)
对此:
df.index = …
Run Code Online (Sandbox Code Playgroud) python ×10
statsmodels ×10
pandas ×3
scipy ×3
numpy ×2
statistics ×2
time-series ×2
arima ×1
forecasting ×1
io ×1
ipython ×1
latex ×1
plot ×1
r ×1
regression ×1
scikits ×1
stata ×1