使用funtimes包带自相关增强的Mann-Kendall检验报错求助
解决
notrend_test报错:missing values in 'filter' 问题根源
报错核心原因是样本量过小(仅8个观测值),但参数设置不符合小样本场景:
j = c(8:11):Sieve Bootstrap的阶数j不能超过样本量n,你设置的j最大值11远大于n=8,导致AR模型估计时产生缺失值,进而触发filter函数报错。- 同时,
factor.length设置为c("user.defined", "adaptive.selection")搭配过大的j,在小样本下会导致模型估计失败。
修正后的代码
针对你的小样本数据,调整参数如下:
library(funtimes) Refenu_summary_byyearoC <- data.frame( year = c(2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019), Total_Enucleation = c(748, 762, 817, 844, 891, 940, 911, 970) ) # 调整参数适配小样本:使用自适应阶数选择 apply(Refenu_summary_byyearoC["Total_Enucleation"], 2, function(x) { notrend_test(x, B = 1000, test = "MK", ar.method = "HVK", ar.order = NULL, factor.length = "adaptive.selection", q = 3/4)$p.value })
如果坚持手动设置阶数j,必须保证j的最大值小于样本量:
apply(Refenu_summary_byyearoC["Total_Enucleation"], 2, function(x) { notrend_test(x, B = 1000, test = "MK", ar.method = "HVK", ar.order = NULL, factor.length = "user.defined", j = c(2:4), # j的取值必须小于样本量n=8 q = 3/4)$p.value })
补充说明
- 小样本下使用Sieve Bootstrap建议优先选择自适应参数设置(
factor.length = "adaptive.selection"),让函数自动匹配合适的阶数,避免手动设置出错。 - 你的数据整体呈现上升趋势(仅2018年略有下降),检验结果需结合实际业务场景解读。
内容的提问来源于stack exchange,提问作者Nicolas Pensel
相关产品推荐
相关产品推荐

