Python 反转对数/微分变换以进行打印 tl-dr;
如何反转以进行绘图 全文 我在反转日志换位以消除平稳性方面遇到了问题。这里是转置:Python 反转对数/微分变换以进行打印 tl-dr;,python,pandas,statsmodels,Python,Pandas,Statsmodels,如何反转以进行绘图 全文 我在反转日志换位以消除平稳性方面遇到了问题。这里是转置: series = u[columns].copy() endogdiffs = [] for app in endog: min_nonzero = series[series[app] > 0].min()[0] series.loc[series[app] == 0, app] = min_nonzero series[app + '_log'] = np.log(series
series = u[columns].copy()
endogdiffs = []
for app in endog:
min_nonzero = series[series[app] > 0].min()[0]
series.loc[series[app] == 0, app] = min_nonzero
series[app + '_log'] = np.log(series[app])
series[app + '_log_diff'] = series[app + '_log'].diff()
endogdiffs.append(app + '_log_diff')
series = series.replace([np.inf, -np.inf], np.nan).dropna()
那么我就在为应用程序建模。我的系列被分成训练组和测试组,预测结果被加载回一个称为y的DF
据我所知,.diff()被.cumsum()反转。这给了我日志。log()由.exp()反转
在输出方面,我认为我应该这样绘制:
绘制输出
但是——我的初始值(所有的,不仅仅是内生的)都在0-1之间。我的输出值大约是1-50或60左右的y预测值
如何反转变换
预测部分的详细信息:
训练并运行模型
series = u[columns].copy()
endogdiffs = []
for app in endog:
min_nonzero = series[series[app] > 0].min()[0]
series.loc[series[app] == 0, app] = min_nonzero
series[app + '_log'] = np.log(series[app])
series[app + '_log_diff'] = series[app + '_log'].diff()
endogdiffs.append(app + '_log_diff')
series = series.replace([np.inf, -np.inf], np.nan).dropna()
for i, app in enumerate(endog):
plt.plot(np.exp(train[app + '_log_diff'].append(y[app + '_log_diff']).cumsum()), color=[(i/10)+0.5, (i/10)+0.5, (i/10)+0.5])
plt.plot(np.exp(train[app + '_log_diff'].append(test[app + '_log_diff']).cumsum()), color=appColors[i])
train, test = series[:size], series[size:size+(28*4*24)]
train = train.loc[:, (train != train.iloc[0]).any()] # https://stackoverflow.com/questions/20209600/panda-dataframe-remove-constant-column
test = test.loc[:, (test != test.iloc[0]).any()]
#print(train.var(), X.info())
# train autoregression
model = VARMAX(train[endogdiffs], exog=train[exog])
model_fit = model.fit(model='cg')
#print(model_fit.mle_retvals)
model_fit.plot_diagnostics()
##window = model_fit.k_ar
coef = model_fit.params
predictions = pd.DataFrame()
predictions = model_fit.forecast(steps=len(test), exog=test[exog])
y = predictions.copy()