我有一些代码用于将回归输出提取到一个列表中,我可以将其从控制台复制出来并粘贴到某个位置,该列表可以很好地处理 33 个气象站的 1052 条记录,每个气象站都有 18-33 年的数据(按站 ID)。在没有真正理解如何实现的情况下,我让它发挥了作用。现在尝试使用 rtrends::mkTrend 出于相同目的对其进行修改,它输出七个参数的列表。
数据样本:
x y grp
1990 188 CDO
1991 164 CDO
1992 159 CDO
1993 219 CDO
1994 202 CDO
1995 249 CDO
1996 243 CDO
1997 220 CDO
1998 186 CDO
1999 187 CDO
1990 188 Key
1991 207 Key
1992 211 Key
1993 183 Key
1994 171 Key
1995 215 Key
1996 184 Key
1997 202 Key
1998 186 Key
1999 168 Key
可恶的代码:
dat_sample[, list(p.value=mkTrend(y)[2],
p_val_corr=mkTrend(y)[4],
tau=mkTrend(y)[5],
Sens=mkTrend(y)[7],
by=format(grp,justify = "r"))]
所需输出:
p.value p_val_corr tau Sens by
1: 0.5915050 0.591505 0.1555556 4 CDO
2: 0.3710934 0.3710934 -0.2444444 -1.8 Key
实际产量
p.value p_val_corr tau Sens by
1: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
2: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
3: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
4: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
5: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
6: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
7: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
8: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
9: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
10: 0.3981742 0.3981742 -0.1421053 -0.6 CDO
11: 0.3981742 0.3981742 -0.1421053 -0.6 Key
12: 0.3981742 0.3981742 -0.1421053 -0.6 Key
13: 0.3981742 0.3981742 -0.1421053 -0.6 Key
14: 0.3981742 0.3981742 -0.1421053 -0.6 Key
15: 0.3981742 0.3981742 -0.1421053 -0.6 Key
16: 0.3981742 0.3981742 -0.1421053 -0.6 Key
17: 0.3981742 0.3981742 -0.1421053 -0.6 Key
18: 0.3981742 0.3981742 -0.1421053 -0.6 Key
19: 0.3981742 0.3981742 -0.1421053 -0.6 Key
20: 0.3981742 0.3981742 -0.1421053 -0.6 Key
前面:这里使用
as.list
而不是 list
。
我没有安装 fftw,所以无法尝试
rtrend::mkTrend(.)
,但我可以使用 mkTrend_r
(和 slope_sen_r
)。
本身,
mkTrend_r
返回一个向量,并且data.table
高兴地假设它应该是“长”格式:
dat_sample[, mkTrend_r(y), by="grp"]
# Warning in lm(y ~ I(1:n))$resid :
# partial match of 'resid' to 'residuals'
# Warning in lm(y ~ I(1:n))$resid :
# partial match of 'resid' to 'residuals'
# grp V1
# <char> <num>
# 1: CDO 0.5366563
# 2: CDO 0.5915050
# 3: CDO 0.5366563
# 4: CDO 0.5915050
# 5: CDO 3.1428571
# 6: CDO 184.4142857
# 7: Key -0.8944272
# 8: Key 0.3710934
# 9: Key -0.8944272
# 10: Key 0.3710934
# 11: Key -1.8000000
# 12: Key 201.4000000
我们可以用
as.list
来解决这个问题:
dat_sample[, as.list(mkTrend_r(y)), by="grp"]
# Warning in lm(y ~ I(1:n))$resid :
# partial match of 'resid' to 'residuals'
# Warning in lm(y ~ I(1:n))$resid :
# partial match of 'resid' to 'residuals'
# grp z0 pval0 z pval slp intercept
# <char> <num> <num> <num> <num> <num> <num>
# 1: CDO 0.5366563 0.5915050 0.5366563 0.5915050 3.142857 184.4143
# 2: Key -0.8944272 0.3710934 -0.8944272 0.3710934 -1.800000 201.4000
由于您只需要几列,我们可以进行子集化:
dat_sample[, as.list(mkTrend_r(y)[c("pval0", "pval", "z", "slp")]), by="grp"]
# Warning in lm(y ~ I(1:n))$resid :
# partial match of 'resid' to 'residuals'
# Warning in lm(y ~ I(1:n))$resid :
# partial match of 'resid' to 'residuals'
# grp pval0 pval z slp
# <char> <num> <num> <num> <num>
# 1: CDO 0.5915050 0.5915050 0.5366563 3.142857
# 2: Key 0.3710934 0.3710934 -0.8944272 -1.800000
您可以通过在
c("p.value", "p_val_corr", ...) :=
左侧添加 as.list
来重命名,也可以在完整表达式后使用 setnames
。
我不知道哪个值是
tau
,是z
还是z0
?
顺便说一句:我认为该包可能需要一些注意:警告是因为代码中的缩写列名(草率),并且文档说返回的值名称是
Z
和 Z0
,而不是 z
和 z0
。当然是小事,但让我想知道......