R语言seasonal包做季节调整时X-13运行失败问题求助
问题根源
- 核心问题1:原始数据的数值列带千分位逗号,
read.csv读取时默认识别为字符/分类值,转换为时间序列时被转为分类编码,数值完全失真(你输出的df_ts最大值仅196,原始数据实际是几万的销售额,明显数值错误) - 衍生问题2:数据异常波动叠加默认参数限制,X13自动识别的离群点数量超过默认80个的回归效应上限,导致程序报错。
解决步骤
- 新增千分位逗号处理逻辑,修复数值列读取错误
- 调整
seas函数参数,适配离群点识别需求
修改后可运行代码
library(lubridate) library(seasonal) library(xts) df <- read.csv(input_file, sep = ",", na.strings = "NA", strip.white = TRUE, stringsAsFactors = FALSE) # 处理数值列的千分位逗号,转换为数值型 df[,-1] <- lapply(df[,-1], function(x) as.numeric(gsub(",", "", x))) df$Date <- as.Date(df$Date, format="%Y-%m-%d") start_month <- month(df$Date[1]) start_year <- year(df$Date[1]) df_ts <- ts(df[-1], start=c(start_year,start_month), freq=12) m <- seas(cbind(df_ts), xreg = genhol(cny, start = 0, end = 0, center = "calendar"), regression.aictest = "td", x11 = "", regression.usertype = "holiday", # 调高回归效应上限为100,同时调高离群点识别临界值减少冗余离群点 regression.maxregeffect = 100, outlier.critical = 3.5 ) df_sa <- as.xts(final(m)) names(df_sa)<-c(colnames(df)[-1]) index(df_sa) <- as.Date(index(df_sa), format="%b %Y") write.csv(df_sa,output_file, row.names = index(df_sa))
若运行后仍有离群点相关报错,可再添加outlier.types = "AO"参数,限制仅识别加性离群点,进一步减少识别到的离群点数量。
内容的提问来源于stack exchange,提问作者paul
相关产品推荐
相关产品推荐

