标签: statsmodels

scipy.stats.linregress,numpy.polynomial.polynomial.polyfit和statsmodels.api.OLS之间的差异

似乎所有三个函数都可以进行简单的线性回归,例如

scipy.stats.linregress(x, y)

numpy.polynomial.polynomial.polyfit(x, y, 1)

x = statsmodels.api.add_constant(x)
statsmodels.api.OLS(y, x)
Run Code Online (Sandbox Code Playgroud)

我想知道这三种方法之间是否有任何真正的区别?我知道它statsmodels是建立在最基础之上的scipy,并且scipy有点依赖于numpy很多东西,所以我希望它们不应该大不相同,但是魔鬼总是在细节中.

更具体地说,如果我们使用numpy上面的方法,我们如何得到p-value其他两种方法默认给出的斜率?

我在Python 3中使用它们,如果这有任何区别.

python numpy scipy python-3.x statsmodels

12
推荐指数
1
解决办法
9303
查看次数

statsmodels使用ARMA模型进行预测

我想预测时间序列数据.我在之前的帖子中读到模块statsmodels具有使用ARMA方法进行预测所需的工具,这正是我一直在寻找的.尽管如此,我在预测数据方面遇到了麻烦.有人可以解释模型中使用的各种参数和/或提供示例吗?

python time-series forecasting statsmodels

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

使用带有statsmodel的OLS模型预测值

我使用OLS(多元线性回归)计算了一个模型.我将数据分为训练和测试(每半个),然后我想预测标签的下半部分的值.

model = OLS(labels[:half], data[:half])
predictions = model.predict(data[half:])
Run Code Online (Sandbox Code Playgroud)

问题是我得到并且错误:文件"/usr/local/lib/python2.7/dist-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/regression/linear_model.py" ,第281行,预测返回np.dot(exog,params)ValueError:矩阵未对齐

我有以下数组形状:data.shape:(426,215)labels.shape:(426,)

如果我将输入转置为model.predict,我会得到一个结果,但形状为(426,213),所以我认为它也是错误的(我希望一个213个数字的向量作为标签预测):

model.predict(data[half:].T)
Run Code Online (Sandbox Code Playgroud)

知道如何让它工作吗?

python linear-regression pandas statsmodels

11
推荐指数
2
解决办法
3万
查看次数

Python statsmodels OLS:如何将学习的模型保存到文件中

我想学习使用Python的statsmodels库中的普通最小二乘模型,描述在这里.

sm.OLS.fit()返回学习的模型.有没有办法将其保存到文件并重新加载?我的训练数据很大,学习模型大约需要半分钟.所以我想知道OLS模型中是否存在任何保存/加载功能.

repr()在模型对象上尝试了该方法,但它没有返回任何有用的信息.

python least-squares statsmodels

11
推荐指数
2
解决办法
9014
查看次数

Python中的logit回归和奇异Matrix错误

我正在尝试对德国信用数据运行logit回归(www4.stat.ncsu.edu/~boos/var.select/german.credit.html).为了测试代码,我只使用了数值变量,并尝试使用以下代码对结果进行回归.

import pandas as pd
import statsmodels.api as sm
import pylab as pl
import numpy as np

df = pd.read_csv("germandata.txt",delimiter=' ')
df.columns = ["chk_acc","duration","history","purpose","amount","savings_acc","employ_since","install_rate","pers_status","debtors","residence_since","property","age","other_plans","housing","existing_credit","job","no_people_liab","telephone","foreign_worker","admit"]

#pls note that I am only retaining numeric variables
cols_to_keep = ['admit','duration', 'amount', 'install_rate','residence_since','age','existing_credit','no_people_liab']

# rank of cols_to_keep is 8
print np.linalg.matrix_rank(df[cols_to_keep].values)
data = df[cols_to_keep]

data['intercept'] = 1.0

train_cols = data.columns[1:]

#to check the rank of train_cols, which in this case is 8
print np.linalg.matrix_rank(data[train_cols].values)

#fit logit model
logit = sm.Logit(data['admit'], data[train_cols])
result = logit.fit()
Run Code Online (Sandbox Code Playgroud)

检查数据时,所有8.0列都是独立的.尽管如此,我得到奇异矩阵错误.你能帮忙吗? …

regression python-2.7 statsmodels

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

如何对线性混合效应模型进行似然比检验?

Statsmodels的线性混合效果模型的文档声称

Statsmodels LME框架目前支持通过Wald检验的后估计推断和系数,轮廓似然分析,似然比检验和AIC的置信区间.[强调补充]

我已经注意到了这个MixedLM.loglike方法,但我似乎无法找到运行似然比检验的函数/方法.

有人可以指出我正确的方向吗?

python statsmodels

11
推荐指数
1
解决办法
1461
查看次数

使用高斯核密度(Python)计算值与值的平均值的差异

我使用此代码计算此值的高斯核密度

from random import randint
x_grid=[]
for i in range(1000):
    x_grid.append(randint(0,4))
print (x_grid)
Run Code Online (Sandbox Code Playgroud)

这是计算高斯核密度的代码

from statsmodels.nonparametric.kde import KDEUnivariate
import matplotlib.pyplot as plt

def kde_statsmodels_u(x, x_grid, bandwidth=0.2, **kwargs):
    """Univariate Kernel Density Estimation with Statsmodels"""
    kde = KDEUnivariate(x)
    kde.fit(bw=bandwidth, **kwargs)
    return kde.evaluate(x_grid)

import numpy as np
from scipy.stats.distributions import norm

# The grid we'll use for plotting
from random import randint
x_grid=[]
for i in range(1000):
    x_grid.append(randint(0,4))
print (x_grid)

# Draw points from a bimodal distribution in 1D
np.random.seed(0)
x = np.concatenate([norm(-1, …
Run Code Online (Sandbox Code Playgroud)

python statistics gaussian kernel-density statsmodels

11
推荐指数
1
解决办法
504
查看次数

如何使用Statsmodels.api获得回归拦截

我正在尝试使用python库计算回归输出,但我无法使用;当我使用库时获取拦截值:

import statsmodels.api as sm
Run Code Online (Sandbox Code Playgroud)

它打印除截距之外的所有回归分析.

但是当我使用时:

from pandas.stats.api import ols
Run Code Online (Sandbox Code Playgroud)

我的熊猫代码:

Regression = ols(y= Sorted_Data3['net_realization_rate'],x = Sorted_Data3[['Cohort_2','Cohort_3']])
print Regression  
Run Code Online (Sandbox Code Playgroud)

我得到了拦截,并警告说这个librabry将来会被弃用,所以我试图使用Statsmodels.

我在使用pandas.stats.api时得到的警告:

警告(来自警告模块):文件"C:\ Python27\lib\idlelib\run.py",第325行exec代码在self.locals中FutureWarning:pandas.stats.ols模块已弃用,将在以后的版本中删除.我们引用像statsmodels这样的外部包,请参阅这里的一些示例:http://statsmodels.sourceforge.net/stable/regression.html

我的Statsmodels代码:

import pandas as pd
import numpy as np
from pandas.stats.api import ols
import statsmodels.api as sm

Data1 = pd.read_csv('C:\Shank\Regression.csv')  #Importing CSV
print Data1
Run Code Online (Sandbox Code Playgroud)

运行一些清洁代码

sm_model = sm.OLS(Sorted_Data3['net_realization_rate'],Sorted_Data3[['Cohort_2','Cohort_3']])
results = sm_model.fit()
print '\n'
print results.summary()
Run Code Online (Sandbox Code Playgroud)

我甚至尝试过statsmodels.formula.api:as:

sm_model = sm.OLS(formula ="net_realization_rate ~ Cohort_2 + Cohort_3", data = Sorted_Data3)
results = sm_model.fit()
print '\n'
print result.params …
Run Code Online (Sandbox Code Playgroud)

python pandas statsmodels

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

Python Statsmodel ARIMA开始[平稳性]

我刚开始使用statsmodels进行时间序列分析.我有一个包含日期和值的数据集(大约3个月).我正面临着为ARIMA模型提供正确订单的一些问题.我希望调整趋势和季节性,然后计算异常值.

我的'价值'不是固定不变的,statsmodel说我要么必须诱导平稳性,要么提供一些差异以使其有效.我玩了不同的顺序(没有深入了解改变p,q和d的后果).

当我为差异引入1时,我收到此错误:

ValueError: The start index -1 of the original series has been differenced away
Run Code Online (Sandbox Code Playgroud)

当我通过命令(例如)order =(2,0,1)删除差异时,我收到此错误:

    raise ValueError("The computed initial AR coefficients are not "
ValueError: The computed initial AR coefficients are not stationary
You should induce stationarity, choose a different model order, or you can
pass your own start_params.
>>> 
Run Code Online (Sandbox Code Playgroud)

任何关于如何诱导平稳性(或指向一个很好的教程的链接)的帮助都会有所帮助.而且,平稳性的测试(例如,http://www.maths.bris.ac.uk/~guy/Research/LSTS/TOS.html)将是有用的.

更新:我正在通过ADF测试阅读:

http://statsmodels.sourceforge.net/stable/generated/statsmodels.tsa.stattools.adfuller.html
Run Code Online (Sandbox Code Playgroud)

谢谢!PD.

python time-series statsmodels

10
推荐指数
1
解决办法
3976
查看次数

将statsmodels摘要对象转换为Pandas Dataframe

statsmodels.formula.api在Windows 10上使用(版本0.9.0)进行多元线性回归.在拟合模型并使用以下行获取摘要后,我将以摘要对象格式获得摘要.

X_opt  = X[:, [0,1,2,3]]
regressor_OLS = sm.OLS(endog= y, exog= X_opt).fit()
regressor_OLS.summary()


                          OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.951
Model:                            OLS   Adj. R-squared:                  0.948
Method:                 Least Squares   F-statistic:                     296.0
Date:                Wed, 08 Aug 2018   Prob (F-statistic):           4.53e-30
Time:                        00:46:48   Log-Likelihood:                -525.39
No. Observations:                  50   AIC:                             1059.
Df Residuals:                      46   BIC:                             1066.
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const       5.012e+04   6572.353      7.626      0.000    3.69e+04    6.34e+04
x1             0.8057 …
Run Code Online (Sandbox Code Playgroud)

python pandas statsmodels

10
推荐指数
3
解决办法
6204
查看次数