【问题标题】:How to fit a smooth line to some points but preserve monotonicity如何将平滑线拟合到某些点但保持单调性
【发布时间】:2015-04-19 08:49:07
【问题描述】:

我有以下数据点

example<-structure(list(y = c(1, 0.961538461538462, 0.923076923076923, 
0.884615384615385, 0.846153846153846, 0.807692307692308, 0.769230769230769, 0.730769230769231, 0.730769230769231, 0.730769230769231, 0.687782805429864, 0.687782805429864, 0.641930618401207, 0.596078431372549, 0.596078431372549, 0.54640522875817, 0.496732026143791, 0.496732026143791, 0.496732026143791, 
0.496732026143791, 0.496732026143791, 0.496732026143791, 0.496732026143791, 0.496732026143791, 0.496732026143791, 0.496732026143791, 0.496732026143791
), x = c(0, 59, 115, 156, 268, 329, 353, 365, 377, 421, 431, 
448, 464, 475, 477, 563, 638, 744, 769, 770, 803, 855, 1040, 
1106, 1129, 1206, 1227)), .Names = c("y", "x"), row.names = c(NA, 
-27L), class = "data.frame")

我想拟合一条平滑的线。 R中有几种方法可以做到这一点,使用loessksmoothlocpoly等。

有什么方法可以确保强制生成的平滑线将是单调(在本示例的情况下是单调的)减少?)

【问题讨论】:

    标签: r smoothing kernel-density


    【解决方案1】:

    您可以使用 scam 包中的scam() 函数来进行带约束的单变量或多变量平滑。帮助文件?scam:::shape.constrained.smooth.terms 显示了所有可用的选项。例如,用于平滑的 B 样条基可以被惩罚以产生单调递减的系数 scam(y~s(x,bs="mpd"))

    require(scam)   
    
    attach(example)
    
    yhat <- predict(scam(y~s(x,bs="mpd")),se=TRUE)
    
    plot(x,y)
    lines(x,y=yhat$fit)
    lines(x,y=yhat$fit+1.96*yhat$se.fit,lty=2)
    lines(x,y=yhat$fit-1.96*yhat$se.fit,lty=2)
    

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多