以下是我使用vars包创建的用于测试平稳性的示例代码:
library(vars)
data(Canada)
Canada <- data.frame(Canada)
test = function(x) {
adf <- ur.df(x, type = "trend", selectlags = "BIC")
adf.out <- format(round(c(adf@teststat[1], head(adf@cval,1)[,c(1,2,3)]), 2), nsmall = 3)
adf.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}
kpss <- ur.kpss(x, type ="tau", use.lag = adf@lags)
kpss.out <- format(round(c(kpss@teststat[1],head(kpss@cval, 1)[,c(4,2,1)]), 2), nsmall = 3)
kpss.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}
out <- c(adf.out, adf.comment, kpss.out, kpss.comment)
out
}
test(Canada["prod"][,1])
输出:
> test(Canada["prod"][,1])
1pct 5pct 10pct 1pct 5pct 10pct
"-2.020" "-4.040" "-3.450" "-3.150" "No" "0.490" "0.220" "0.150" "0.120" "No"
为什么数字周围有“”,我该如何删除它们?
答案 0 :(得分:0)
您在一个对象string
和numeric
中混合了两种R数据类型。 R不能在一个简单对象中携带两种数据类型。结果是它将numeric
转换为string
- 这由引号显示。当您将string
转换为为numeric
创建的NA
时,这意味着信息丢失,因此R选择转换string
中的所有内容。
您可以将数据转换为data.frame
(见下文)。因为data.frame
是一种复杂的数据类型,它可以为每列保留不同的data.types。我不建议您使用data.frame
进行光学目的。如果您想使用此数字进行计算,稍后可以使用函数string
将numeric
转换为as.numeric(out)
。
test = function(x) {
adf <- ur.df(x, type = "trend", selectlags = "BIC")
adf.out <- format(round(c(adf@teststat[1], head(adf@cval,1)[,c(1,2,3)]), 2), nsmall = 3)
adf.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}
kpss <- ur.kpss(x, type ="tau", use.lag = adf@lags)
kpss.out <- format(round(c(kpss@teststat[1],head(kpss@cval, 1)[,c(4,2,1)]), 2), nsmall = 3)
kpss.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}
out <- c(adf.out, adf.comment, kpss.out, kpss.comment)
out <- data.frame(matrix(out, nrow=1, dimnames=list(NULL, names(out))))
return(out)
}
test(Canada["prod"][,1])[,-1]