Python中ARCH模型拟合报错:Buffer dtype mismatch, expected 'double' but got 'float'
解决ARCH模型fit方法的Buffer dtype mismatch报错
这个报错的核心原因是输入数据的 dtype 为 float32,而ARCH库底层要求使用 float64(即double类型)。yfinance下载的股指数据默认可能是float32,计算出的对数收益率继承了该类型,导致拟合时出现类型不匹配。
修改方案
显式将对数收益率数据转换为float64类型后再传入arch_model:
import yfinance as yf from arch import arch_model import numpy as np SPX = yf.download('^GSPC', start='2005-01-01', interval='1d') SPX['log_returns'] = np.log(SPX['Adj Close']) - np.log(SPX['Adj Close'].shift(1)) # 转换数据类型为float64,解决类型不匹配问题 processed_returns = (SPX['log_returns'][1:] * 100).astype('float64') arch_mSPX = arch_model(processed_returns, mean='Zero', vol='GARCH') arch_mSPX = arch_mSPX.fit()
也可以将转换步骤直接合并到模型初始化中:
arch_mSPX = arch_model((SPX['log_returns'][1:] * 100).astype('float64'), mean='Zero', vol='GARCH')
转换后数据类型符合ARCH库的要求,即可正常完成GARCH模型拟合,之后就能对比自研代码与第三方库的计算结果。
内容的提问来源于stack exchange,提问作者arthurp36
相关产品推荐
相关产品推荐

