R - 按组应用 adf.test - 将 p 值添加到 data.frame
R - apply adf.test by group - add p-values to data.frame
我正在使用
g <- lapply(split(bbm, list(bbm$variable, bbm$ticker)), function(x) testx(x$value))
分别用str(g)
和str(g[g != "NULL"] )
,其中testx
定义为
library(tseries) # for adf.test
##
testx <- function (x) {
return(tryCatch(adf.test(x), error=function(e) NULL))
}
从按 2 个变量 ticker
和 variable
.
分组的 Augmented Dickey-Fuller 检验中获取结果
如何提取 p 值并将它们作为列添加到我的初始 data.frame 中?
这是我的数据示例:
ticker variable value
1 1002Z AV Equity BS_CUSTOMER_DEPOSITS 29898.0
2 1002Z AV Equity BS_CUSTOMER_DEPOSITS 31302.0
3 1002Z AV Equity BS_CUSTOMER_DEPOSITS 29127.0
4 1002Z AV Equity BS_CUSTOMER_DEPOSITS 24056.0
5 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22080.0
6 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22585.0
7 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22674.0
8 1002Z AV Equity BS_CUSTOMER_DEPOSITS 21733.0
9 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22016.0
10 1002Z AV Equity BS_CUSTOMER_DEPOSITS 21999.0
11 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22013.0
12 1002Z AV Equity BS_CUSTOMER_DEPOSITS 21135.0
13 1002Z AV Equity BS_TOT_LOAN 28476.0
14 1002Z AV Equity BS_TOT_LOAN 29446.0
15 1002Z AV Equity BS_TOT_LOAN 29273.0
16 1002Z AV Equity BS_TOT_LOAN 27579.0
17 1002Z AV Equity BS_TOT_LOAN 20769.0
18 1002Z AV Equity BS_TOT_LOAN 21370.0
19 1002Z AV Equity BS_TOT_LOAN 22306.0
20 1002Z AV Equity BS_TOT_LOAN 21013.0
21 1002Z AV Equity BS_TOT_LOAN 21810.0
22 1002Z AV Equity BS_TIER1_CAP_RATIO 6.5
23 1002Z AV Equity BS_TIER1_CAP_RATIO 6.2
24 1002Z AV Equity BS_TIER1_CAP_RATIO 7.9
25 1002Z AV Equity BS_TIER1_CAP_RATIO 9.2
26 1002Z AV Equity BS_TIER1_CAP_RATIO 8.5
27 1002Z AV Equity BS_TIER1_CAP_RATIO 6.6
28 1002Z AV Equity BS_TIER1_CAP_RATIO 9.6
29 1002Z AV Equity BS_TOT_CAP_TO_RISK_BASE_CAP 11.5
30 1002Z AV Equity BS_TOT_CAP_TO_RISK_BASE_CAP 10.9
> dput(head(select(bbm, ticker, variable, value), 30))
structure(list(ticker = c("1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity"
), variable = structure(c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 8L, 8L, 8L, 8L,
8L, 8L, 8L, 9L, 9L), .Label = c("PX_LAST", "PE_RATIO", "VOL_MEAN",
"BS_CUSTOMER_DEPOSITS", "BS_TOT_LOAN", "*", "RN366", "BS_TIER1_CAP_RATIO",
"BS_TOT_CAP_TO_RISK_BASE_CAP", "RETURN_COM_EQY", "BS_LEV_RATIO_TO_TANG_CAP",
"NPLS_TO_TOTAL_LOANS"), class = "factor"), value = c(29898, 31302,
29127, 24056, 22080, 22585, 22674, 21733, 22016, 21999, 22013,
21135, 28476, 29446, 29273, 27579, 20769, 21370, 22306, 21013,
21810, 6.5, 6.2, 7.9, 9.2, 8.5, 6.6, 9.6, 11.5, 10.9)), .Names = c("ticker",
"variable", "value"), row.names = c(NA, 30L), class = "data.frame")
我们可以使用 data.table
。我们将 'data.frame' 转换为 'data.table' (setDT(bbm)
)。按 "ticker"、"variable" 分组,我们在 "value" 列上应用 testx
函数。我们得到 5 个新列的汇总输出,从中我们可以 select "p.value" (testx(value)$p.value
) 并赋值 (:=
) 创建一个新列 ("pval") 在原始数据集中。
library(data.table)
setDT(bbm)[,pval := testx(value)$p.value , by = .(ticker, variable)]
我正在使用
g <- lapply(split(bbm, list(bbm$variable, bbm$ticker)), function(x) testx(x$value))
分别用str(g)
和str(g[g != "NULL"] )
,其中testx
定义为
library(tseries) # for adf.test
##
testx <- function (x) {
return(tryCatch(adf.test(x), error=function(e) NULL))
}
从按 2 个变量 ticker
和 variable
.
如何提取 p 值并将它们作为列添加到我的初始 data.frame 中?
这是我的数据示例:
ticker variable value
1 1002Z AV Equity BS_CUSTOMER_DEPOSITS 29898.0
2 1002Z AV Equity BS_CUSTOMER_DEPOSITS 31302.0
3 1002Z AV Equity BS_CUSTOMER_DEPOSITS 29127.0
4 1002Z AV Equity BS_CUSTOMER_DEPOSITS 24056.0
5 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22080.0
6 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22585.0
7 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22674.0
8 1002Z AV Equity BS_CUSTOMER_DEPOSITS 21733.0
9 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22016.0
10 1002Z AV Equity BS_CUSTOMER_DEPOSITS 21999.0
11 1002Z AV Equity BS_CUSTOMER_DEPOSITS 22013.0
12 1002Z AV Equity BS_CUSTOMER_DEPOSITS 21135.0
13 1002Z AV Equity BS_TOT_LOAN 28476.0
14 1002Z AV Equity BS_TOT_LOAN 29446.0
15 1002Z AV Equity BS_TOT_LOAN 29273.0
16 1002Z AV Equity BS_TOT_LOAN 27579.0
17 1002Z AV Equity BS_TOT_LOAN 20769.0
18 1002Z AV Equity BS_TOT_LOAN 21370.0
19 1002Z AV Equity BS_TOT_LOAN 22306.0
20 1002Z AV Equity BS_TOT_LOAN 21013.0
21 1002Z AV Equity BS_TOT_LOAN 21810.0
22 1002Z AV Equity BS_TIER1_CAP_RATIO 6.5
23 1002Z AV Equity BS_TIER1_CAP_RATIO 6.2
24 1002Z AV Equity BS_TIER1_CAP_RATIO 7.9
25 1002Z AV Equity BS_TIER1_CAP_RATIO 9.2
26 1002Z AV Equity BS_TIER1_CAP_RATIO 8.5
27 1002Z AV Equity BS_TIER1_CAP_RATIO 6.6
28 1002Z AV Equity BS_TIER1_CAP_RATIO 9.6
29 1002Z AV Equity BS_TOT_CAP_TO_RISK_BASE_CAP 11.5
30 1002Z AV Equity BS_TOT_CAP_TO_RISK_BASE_CAP 10.9
> dput(head(select(bbm, ticker, variable, value), 30))
structure(list(ticker = c("1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity",
"1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity", "1002Z AV Equity"
), variable = structure(c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 8L, 8L, 8L, 8L,
8L, 8L, 8L, 9L, 9L), .Label = c("PX_LAST", "PE_RATIO", "VOL_MEAN",
"BS_CUSTOMER_DEPOSITS", "BS_TOT_LOAN", "*", "RN366", "BS_TIER1_CAP_RATIO",
"BS_TOT_CAP_TO_RISK_BASE_CAP", "RETURN_COM_EQY", "BS_LEV_RATIO_TO_TANG_CAP",
"NPLS_TO_TOTAL_LOANS"), class = "factor"), value = c(29898, 31302,
29127, 24056, 22080, 22585, 22674, 21733, 22016, 21999, 22013,
21135, 28476, 29446, 29273, 27579, 20769, 21370, 22306, 21013,
21810, 6.5, 6.2, 7.9, 9.2, 8.5, 6.6, 9.6, 11.5, 10.9)), .Names = c("ticker",
"variable", "value"), row.names = c(NA, 30L), class = "data.frame")
我们可以使用 data.table
。我们将 'data.frame' 转换为 'data.table' (setDT(bbm)
)。按 "ticker"、"variable" 分组,我们在 "value" 列上应用 testx
函数。我们得到 5 个新列的汇总输出,从中我们可以 select "p.value" (testx(value)$p.value
) 并赋值 (:=
) 创建一个新列 ("pval") 在原始数据集中。
library(data.table)
setDT(bbm)[,pval := testx(value)$p.value , by = .(ticker, variable)]