如何在R语言中定义并计算数据序列的上升与下降趋势
R语言序列趋势判定实现方案
实现思路
通过拟合x与y的线性回归模型提取趋势斜率,再对斜率做归一化处理,将输出值映射到要求的[-1,1]区间:
- 输出值落在[-1,0)区间:判定为下降趋势
- 输出值落在(0,1]区间:判定为上升趋势
- 输出值为0:判定为无趋势
测试代码
基础数据与可视化代码
# 构造测试输入输出序列 x <- c(1:8) y <- c(99, 104, 108, 100, 86, 64, 35, 15) # 序列可视化 plot(x, y) lines(x, y)
趋势判定核心代码
# 拟合线性回归模型提取斜率 trend_fit <- lm(y ~ x) raw_slope <- coef(trend_fit)[["x"]] # 计算归一化因子,将斜率映射到[-1,1]区间 x_span <- diff(range(x)) y_span <- diff(range(y)) max_possible_slope <- y_span / x_span normalized_trend <- raw_slope / max_possible_slope # 输出判定结果 trend_result <- ifelse(normalized_trend < 0, "下降", ifelse(normalized_trend > 0, "上升", "无趋势"))
结果说明
本次测试数据计算得到的normalized_trend约为-0.97,落在[-1,0)区间,判定结果为下降,符合预期要求。
内容的提问来源于stack exchange,提问作者Andrii
相关产品推荐
相关产品推荐

