Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用rugarch成功创建ARMAX-ARCH模型_Python_R_Rpy2 - Fatal编程技术网

在python中使用rugarch成功创建ARMAX-ARCH模型

在python中使用rugarch成功创建ARMAX-ARCH模型,python,r,rpy2,Python,R,Rpy2,亲爱的stackoverflow读者您好(希望还有评论) 我正在尝试用python创建ARMAX-ARCH模型。然而,我发现Pyton中缺少库。通过大量的谷歌搜索,我在stackoverflow上找到了一个适用于零均值ARCH模型的有效解决方案,然而当我试图将其调整到ARMAX时,我遇到了一些困难。我是一个完全的R(和python)初学者,所以我真的被卡住了 在下面的代码中,我根据给定给arch模型对象的股票价格(在本例中为self.innovative)创建了一个临时数据框。然后,我将原始股票

亲爱的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中

提前谢谢你

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