在python中使用rugarch成功创建ARMAX-ARCH模型
亲爱的stackoverflow读者您好(希望还有评论) 我正在尝试用python创建ARMAX-ARCH模型。然而,我发现Pyton中缺少库。通过大量的谷歌搜索,我在stackoverflow上找到了一个适用于零均值ARCH模型的有效解决方案,然而当我试图将其调整到ARMAX时,我遇到了一些困难。我是一个完全的R(和python)初学者,所以我真的被卡住了 在下面的代码中,我根据给定给arch模型对象的股票价格(在本例中为self.innovative)创建了一个临时数据框。然后,我将原始股票价格转换为对数回报。然而,在“mean_model=robjects.r”('list(armaOrder=c(0,0),external.regressors=self.exportional')步骤中,问题就出现了。如果运行此代码,则会收到以下错误消息: rpy2.rinterface.rrontimeerror:function(expr,envir=parent.frame(),enclose=if(is.list(envir)| |:未找到对象“self.existional” 因此,要么我没有正确地转换外生变量,要么我没有使用正确的表示法。如果我删除external.regressor部分,我的代码工作得很好。 基本上,我的问题归结为我应该如何将mean_过程的外生部分应用到rugarch中 提前谢谢你在python中使用rugarch成功创建ARMAX-ARCH模型,python,r,rpy2,Python,R,Rpy2,亲爱的stackoverflow读者您好(希望还有评论) 我正在尝试用python创建ARMAX-ARCH模型。然而,我发现Pyton中缺少库。通过大量的谷歌搜索,我在stackoverflow上找到了一个适用于零均值ARCH模型的有效解决方案,然而当我试图将其调整到ARMAX时,我遇到了一些困难。我是一个完全的R(和python)初学者,所以我真的被卡住了 在下面的代码中,我根据给定给arch模型对象的股票价格(在本例中为self.innovative)创建了一个临时数据框。然后,我将原始股票
def fit_arch_model(self):
df = DataFrame(columns=['daily_returns', 'monthly_std', 'annual_vol'])
df['daily_returns'] = np.log(self.endogenous['Close']).diff() # Daily log returns
df['monthly_std'] = df['daily_returns'].rolling(21).std() # Standard deviation across trading month
df['annual_vol'] = df['monthly_std'] * np.sqrt(252) # Convert monthly standard devation to annualized volatility
df = df.dropna().reset_index(drop=True)
forecast_horizon= 30
# Initialize R GARCH model
rugarch = importr('rugarch', lib_loc="C:/Users/Ruben/Documents/R/win-library/3.6")
garch_spec = rugarch.ugarchspec(
mean_model=robjects.r('list(armaOrder = c(0, 0), external.regressors = self.exogenous)'),
variance_model=robjects.r('list(garchOrder=c(1,1))'),
distribution_model='std')
# Used to convert training set to R list for model input
numpy2ri.activate()
# Train R GARCH model on returns as %
garch_fitted = rugarch.ugarchfit(
spec=garch_spec,
data=df['daily_returns'].values * 100,
out_sample=forecast_horizon
)
我也面临着同样的问题,并通过创造一个工作环境来解决它。 我创建了一个R函数,然后用它来拟合模型并生成预测
import rpy2.robjects as robjects
from rpy2.robjects.vectors import FloatVector
# X is a Panda Series that contains the returns I want to fit the model
returns = FloatVector(X.values)
robjects.r("""
f <- function (X) {
spec = ugarchspec(
variance.model=list(garchOrder=c(1,1)),
mean.model=list(armaOrder=c(1, 1), include.mean=T),
distribution.model="sged"
)
fit = tryCatch(
ugarchfit(
spec, X, solver = 'hybrid'
), error=function(e) e, warning=function(w) w
)
fore = ugarchforecast(fit, n.ahead=1)
ind = fore@forecast$seriesFor
ind
}""")
r_f = robjects.globalenv['f']
fore = r_f(returns)
fore
R object with classes: ('matrix',) mapped to:
<Matrix - Python:0x0000018D6760CB08 / R:0x0000018D76890AD0>
[0.001222]
将rpy2.robject作为robject导入
从rpy2.robjects.vectors导入FloatVector
#X是一个熊猫系列,包含我想要符合模型的回报
返回=FloatVector(X.values)
robjects.r(“”)
F