在scipy中,不支持使用数据拟合负二项分布(可能是因为scipy中的负二项式仅是离散的).
对于正态分布,我会这样做:
from scipy.stats import norm
param = norm.fit(samp)
Run Code Online (Sandbox Code Playgroud)
在任何其他库中是否有类似"准备使用"的功能?
我正在为具有34个因变量的logit模型建模数据,并且它继续抛出奇异矩阵误差,如下所示:
Traceback (most recent call last):
File "<pyshell#1116>", line 1, in <module>
test_scores = smf.Logit(m['event'], train_cols,missing='drop').fit()
File "/usr/local/lib/python2.7/site-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/discrete/discrete_model.py", line 1186, in fit
disp=disp, callback=callback, **kwargs)
File "/usr/local/lib/python2.7/site-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/discrete/discrete_model.py", line 164, in fit
disp=disp, callback=callback, **kwargs)
File "/usr/local/lib/python2.7/site-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/base/model.py", line 357, in fit
hess=hess)
File "/usr/local/lib/python2.7/site-packages/statsmodels-0.5.0-py2.7-linux-i686.egg/statsmodels/base/model.py", line 405, in _fit_mle_newton
newparams = oldparams - np.dot(np.linalg.inv(H),
File "/usr/local/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 445, in inv
return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))
File "/usr/local/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 328, in solve
raise LinAlgError, 'Singular matrix'
LinAlgError: Singular matrix
Run Code Online (Sandbox Code Playgroud)
当我对这种方法进行简化以将矩阵减少到其独立列时就是这样
def independent_columns(A, tol = …Run Code Online (Sandbox Code Playgroud) 根据这个问题如何使用statsmodels和Python在AR模型中获得常量项?.我现在正在尝试使用ARMA模型来拟合数据,但我又找不到解释模型结果的方法.这里是我根据ARMA样本预测与statsmodels和ARMAResults.predict API文档所做的.
# Parameter
INPUT_DATA_POINT = 200
P = 5
Q = 0
# Read Data
data = []
f = open('stock_all.csv', 'r')
for line in f:
data.append(float(line.split(',')[5]))
f.close()
# Fit ARMA-model using the first piece of data
result = arma_model(data[:INPUT_DATA_POINT], P, Q)
# Predict using model (fit dimension is len(data) + 1 why?)
fit = result.predict(0, len(data))
# Plot
plt.figure(facecolor='white')
plt.title('ARMA Model Fitted Using ' + str(INPUT_DATA_POINT) + ' Data Points, P=' + …Run Code Online (Sandbox Code Playgroud) 我是python和编程的新手,所以原谅任何应该很明显的简单错误/事情.
我想要做的很简单,我只是想将线性趋势(1-d多项式)拟合到一堆时间序列中,以查看斜率是正还是负.现在我只想让它在一个时间序列中运行.
问题:看起来大熊猫和numpy都不能对日期时间做回归.我的日期时间不规律(通常每月1天但不是同一天),所以不能使用时间序列熊猫的线性回归中提出的建议
我的时间序列csv看起来像:
StationName, year, month, day, depth, NO3-N, PO4-P, TotP, TotN,
Kvarnbacken (Savaran), 2003, 2, 25, 0.5, 46, 9, 14, 451
Kvarnbacken (Savaran), 2003, 3, 18, 0.5, 64, 15, 17, 310
Kvarnbacken (Savaran), 2003, 3, 31, 0.5, 76, 7, 19, 566
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的是什么
import datetime as dt
from scipy import stats
import numpy as np
# read in station csv file
data = pd.read_csv('Kvarnbacken (Savaran)_2003.csv')
data.head()
# set up dates to something python can recognize
data['date'] = …Run Code Online (Sandbox Code Playgroud) 我想评估残差:( y-hat y).
我知道该怎么做:
df = pd.read_csv('myFile', delim_whitespace = True, header = None)
df.columns = ['column1', 'column2']
y, X = ps.dmatrices('column1 ~ column2',data = df, return_type = 'dataframe')
model = sm.OLS(y,X)
results = model.fit()
predictedValues = results.predict()
#print predictedValues
yData = df.as_matrix(columns = ['column1'])
res = yData - predictedValues
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以做到这一点(?).
我们有以下线性回归:y~b0 + b1*x1 + b2*x2.我知道Matlab中的回归函数确实计算了它,但是numpy的linalg.lstsq没有(https://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html).
我按照教程学习SARIMAX模型:https://www.digitalocean.com/community/tutorials/a-guide-to-time-series-forecasting-with-arima-in-python-3 .数据的日期范围是1958-2001.
mod = sm.tsa.statespace.SARIMAX(y,
order=(1, 1, 1),
seasonal_order=(1, 1, 1, 12),
enforce_stationarity=False,
enforce_invertibility=False)
results = mod.fit()
Run Code Online (Sandbox Code Playgroud)
当拟合ARIMA时间序列模型时,我发现作者所有日期范围数据都适合模型参数.但在验证预测时,作者使用从1998-01-01开始的日期作为拟合模型的数据日期范围的一部分.
pred = results.get_prediction(start=pd.to_datetime('1998-01-01'), dynamic=False)
Run Code Online (Sandbox Code Playgroud)
我知道在机器学习模型中,训练数据和验证(测试)数据不同,我的意思是不同的范围.我的意思是作者是对的?为什么这样(我的意思是所有列车数据的原因),我是一个新的SARIMAX模型.
你能告诉我更多关于这个模型的信息吗,例如如何预测几天或几周而不仅仅是一个月,我的意思是如何设置order =(1,1,1),seasonal_order =(1,1,1,12)的参数).谢谢!
我正在探索statsmodels.imputation.mice包用于输入缺失值.但是,除了http://www.statsmodels.org之外,我还没有看到它的任何使用示例.从我收集的内容中,可以创建一个mouse.MICEData实例并将其与mice.MICE().fit()结合使用.来自http://www.statsmodels.org/dev/generated/statsmodels.imputation.mice.MICE.html的示例
>>> imp = mice.MICEData(data)
>>> fml = 'y ~ x1 + x2 + x3 + x4'
>>> mice = mice.MICE(fml, sm.OLS, imp)
>>> results = mice.fit(10, 10)
>>> print(results.summary())
Run Code Online (Sandbox Code Playgroud)
但是,MiceData实例中的估算值并不固定.我的意思是,如果
imp = mice.MICEData(data)
Run Code Online (Sandbox Code Playgroud)
每次通话
imp.update('x1')
Run Code Online (Sandbox Code Playgroud)
(假设数据有一列'x1')使用"预测均值匹配"为缺失值绘制一个新样本.如果我将MICEDdata与MICE.fit()一起使用,这一切都很好.但是,假设我想使用此程序包将值重写一次,然后使用另一个程序包中的预测程序(例如来自sklearn)来拟合数据.我想知道,什么是合理的方法.我可以多次运行更新并对每个缺失值进行平均预测.或者,我可以创建具有不同插补值的多个数据集并适合每个集合.但是,如果我的数据集很大,那么它可能会非常昂贵.
我正在使用带有 Patsy 包的 R 风格公式来处理 statsmodels,并收到一个我无法理解的错误,任何提示或技巧将不胜感激。
PatsyError:数据参数和 C('Industry_Banking&CapitalMarkets') 之间的行数不匹配(8137 与 1)
DataFrame 有 8137 行并且没有丢失数据
完整代码如下
mixed = smf.mixedlm("""count_SoldServiceName ~ date_int + AzureActiveEngagementCount + AzureEngagementPartnerCount
+ DCount_learning_path_name + Industry_Automotive + C('Industry_Banking&CapitalMarkets') + C('Industry_Chemicals&Agrochemicals') + Industry_CivilianGovernment
+ Industry_ConsumerGoods + C('Industry_Defense&Intelligence') + Industry_DiscreteManufacturing + Industry_Energy + Industry_Gaming
+ Industry_HealthPayor + Industry_HealthProvider + Industry_HigherEducation + Industry_Insurance + C('Industry_Media&Entertainment') + Industry_Nonprofit
+ Industry_PartnerProfessionalServices + Industry_Pharmaceuticals + C('Industry_Primary&SecondaryEdu/K-12') + Industry_ProfessionalServices
+ C('Industry_PublicSafety&Justice') + Industry_Retailers + Industry_SmartSpaces + Industry_Telecommunications + C('Industry_Travel,Transport&Hospitality')
+ Industry_other + InvestmentArea_AA + …Run Code Online (Sandbox Code Playgroud) 我想通过statsmodels STL方法进行分解
我的时间序列数据如下所示:
success.rate
Date
2020-09-11 24.735701
2020-09-14 24.616301
2020-09-15 24.695900
2020-09-16 24.467051
2020-09-17 24.118799
Run Code Online (Sandbox Code Playgroud)
当我把它放入STL中时
STL(sdf, seasonal=20, robust=True)
Run Code Online (Sandbox Code Playgroud)
我总是收到这样的错误:
--------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/mnt/d/mywork/test
STL(sdf,seasonal=20, robust=True)
----> 1 STL(sdf, seasonal=20, robust=True)
statsmodels/tsa/_stl.pyx in statsmodels.tsa._stl.STL.__init__()
ValueError: Unable to determine period from endog
Run Code Online (Sandbox Code Playgroud) statsmodels ×10
python ×7
numpy ×3
pandas ×3
patsy ×2
scipy ×2
statistics ×2
time-series ×2
distribution ×1
imputation ×1
python-2.7 ×1
scikit-learn ×1
singular ×1