似乎所有三个函数都可以进行简单的线性回归,例如
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中使用它们,如果这有任何区别.
我想预测时间序列数据.我在之前的帖子中读到模块statsmodels具有使用ARMA方法进行预测所需的工具,这正是我一直在寻找的.尽管如此,我在预测数据方面遇到了麻烦.有人可以解释模型中使用的各种参数和/或提供示例吗?
我使用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的statsmodels库中的普通最小二乘模型,描述在这里.
sm.OLS.fit()返回学习的模型.有没有办法将其保存到文件并重新加载?我的训练数据很大,学习模型大约需要半分钟.所以我想知道OLS模型中是否存在任何保存/加载功能.
我repr()在模型对象上尝试了该方法,但它没有返回任何有用的信息.
我正在尝试对德国信用数据运行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列都是独立的.尽管如此,我得到奇异矩阵错误.你能帮忙吗? …
Statsmodels的线性混合效果模型的文档声称
Statsmodels LME框架目前支持通过Wald检验的后估计推断和系数,轮廓似然分析,似然比检验和AIC的置信区间.[强调补充]
我已经注意到了这个MixedLM.loglike方法,但我似乎无法找到运行似然比检验的函数/方法.
有人可以指出我正确的方向吗?
我使用此代码计算此值的高斯核密度
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库计算回归输出,但我无法使用;当我使用库时获取拦截值:
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) 我刚开始使用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.
我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) statsmodels ×10
python ×9
pandas ×3
time-series ×2
forecasting ×1
gaussian ×1
numpy ×1
python-2.7 ×1
python-3.x ×1
regression ×1
scipy ×1
statistics ×1