如何将R中多类别通胀数据集转为时间序列以使用tseries分析
解决方案:导入通胀率数据并使用tseries做时间序列分析
1. 先修正原始数据的格式问题
你的原始数据里存在两类格式错误,会直接导致导入失败或数据异常:
- 类别名称末尾多余的点(
Gas.、Rent.) - 数值里的多余小数点(比如
1.2.、2.0.)
修正后的数据应该是:
Category 2020 2021 2022 Food 1.5 2.0 3.0 Gas 1.0 1.2 2.5 Rent 2.0 3.0 2.8
2. 导入数据到R
推荐用read.table()处理空格分隔的数据,两种导入方式可选:
方式1:从本地文件导入
假设你把修正后的数据保存为inflation_data.txt并放在R的工作目录下:
inflation_df <- read.table("inflation_data.txt", header = TRUE, stringsAsFactors = FALSE) # 检查导入结果 str(inflation_df)
方式2:直接导入文本内容
不想存文件的话,用textConnection()直接读入:
data_text <- "Category 2020 2021 2022 Food 1.5 2.0 3.0 Gas 1.0 1.2 2.5 Rent 2.0 3.0 2.8" inflation_df <- read.table(textConnection(data_text), header = TRUE, stringsAsFactors = FALSE)
3. 转换为标准时间序列对象(ts)
你的数据是宽格式(一行一个类别,一列一个年份),需要调整结构适配ts()的要求:
# 提取数值部分,把类别设为行名 inflation_matrix <- as.matrix(inflation_df[, -1]) rownames(inflation_matrix) <- inflation_df$Category # 转置后转换为时间序列:起始年份2020,年度数据频率设为1 inflation_ts <- ts(t(inflation_matrix), start = 2020, frequency = 1) # 查看最终时间序列 inflation_ts
4. 用tseries包做时间序列分析
先确保包已安装并加载:
install.packages("tseries") library(tseries)
示例1:单位根检验(ADF检验)
检验各部门通胀率序列是否平稳:
# 检验Food序列 adf.test(inflation_ts[, "Food"]) # 检验Gas序列 adf.test(inflation_ts[, "Gas"]) # 检验Rent序列 adf.test(inflation_ts[, "Rent"])
示例2:协整检验(Johansen检验)
分析多部门通胀率之间是否存在长期均衡关系:
johansen_result <- ca.jo(inflation_ts, type = "trace", ecdet = "trend", K = 2) summary(johansen_result)
示例3:ARCH效应检验
检验通胀率是否存在异方差性:
# 以Food序列为例,先拟合AR(1)模型再检验残差 arch.test(residuals(arima(inflation_ts[, "Food"], order = c(1,0,0))))
关于之前失败的原因
read.ts()仅适用于时间点为行、变量为列的长格式时间序列数据,你的宽格式数据不匹配。- 直接用
ts()转换原始数据框会因为包含字符型的Category列报错,必须先提取数值部分并调整结构。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

