如何从ur.df的ADF检验中提取p值?R代码问题求助
解决ur.df提取ADF检验p值的问题
问题原因
urca包的ur.df函数返回的summary对象中,p值并不存储在@pval属性里,而是存放在辅助回归结果@testreg的系数表中——你看到的0.0165其实是ADF检验核心系数(滞后水平项)的t检验p值。
正确提取方法
修改循环中的p值提取代码,直接从summary的@testreg属性中获取对应p值:
# 初始化结果表 results_table <- data.frame(Lag = integer(), p_value = numeric(), test_statistic = numeric()) for (p in 1:5) { # 执行ADF检验 R.urdf_IND <- ur.df(L.ts$m_IND, type = "trend", lags = p) # 提取tau3检验统计量 test_statistic <- R.urdf_IND@teststat[1, "tau3"] # 提取对应p值:从辅助回归的系数表中取第一行第四列(滞后水平项的p值) sum_urdf <- summary(R.urdf_IND) p_value <- sum_urdf@testreg$coefficients[1, 4] # 合并结果 results_table <- rbind(results_table, data.frame(Lag = p, p_value = p_value, test_statistic = test_statistic)) } print(results_table)
替代方案(更简洁)
如果习惯用tidy风格的结果,可以用broom包的tidy()函数直接提取结构化结果,避免手动索引:
library(broom) results_table <- data.frame() for (p in 1:5) { R.urdf_IND <- ur.df(L.ts$m_IND, type = "trend", lags = p) # tidy提取结果,筛选tau3对应的行 tidy_result <- tidy(R.urdf_IND) %>% filter(term == "tau3") results_table <- rbind(results_table, data.frame(Lag = p, p_value = tidy_result$p.value, test_statistic = tidy_result$statistic)) }
内容的提问来源于stack exchange,提问作者Sim Kn
相关产品推荐
相关产品推荐

