You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中使用lowess平滑data.table列出现异常结果的问题咨询

Q1:lowess平滑结果不符合预期的原因

  • lowess函数返回的平滑结果是按x值升序排序后的坐标对,若输入的原数据x不是严格升序排列,直接将返回的$y赋值给原数据表会出现值错位,导致平滑线完全偏离原始点(你当前测试数据的x是升序的,所以没有触发这个问题)。
  • 你设置的窗口参数f=0.1过小,该参数控制每次拟合的邻域样本占总样本的比例,61个样本时仅用6个左右的点做局部拟合。边界点(尤其是右边界)只能使用单侧邻域点拟合,邻域样本量不足导致拟合结果波动极大,出现了不符合趋势的尖峰。

Q2:替代平滑方案推荐

你可以选择以下两种常用的平滑函数,都能有效避免边界尖峰问题:

方案1:loess函数(局部加权回归的升级版)

loess支持直接按原数据顺序返回预测值,不需要担心排序问题,边界鲁棒性更好:

library(data.table)
library(ggplot2)
# 拟合loess模型,span参数对应lowess的f参数,调整到0.15左右兼顾贴合度和平滑性
loess_mod <- loess(y ~ x, data = test_dt, span = 0.15)
test_dt[, z := predict(loess_mod, newdata = test_dt)]
# 绘图验证
ggplot(test_dt) + geom_point(aes(x, y)) + geom_line(aes(x, z), color = "red")

方案2:smooth.spline平滑样条

平滑样条通过惩罚项控制平滑度,对边界的处理天然更稳定,不需要手动设置窗口大小:

# 拟合平滑样条,spar参数控制平滑程度,数值越大越平滑
spline_mod <- smooth.spline(x = test_dt$x, y = test_dt$y, spar = 0.5)
test_dt[, z := predict(spline_mod, x = test_dt$x)$y]

内容的提问来源于stack exchange,提问作者Saurabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 08:27:00