【问题标题】:R - loess curve not fitted correctly through pointsR - 没有通过点正确拟合的黄土曲线
【发布时间】:2017-03-17 17:57:47
【问题描述】:

我正在尝试过滤掉太靠近或低于黄土曲线的点:

结果如下:

显然不是预期的结果。

但是,如果我使用 scatter.smooth 函数,我会得到正确的曲线:

如何通过我的数据正确拟合黄土曲线?

【问题讨论】:

    标签: r regression curve loess


    【解决方案1】:

    主要是检查predict函数返回的内容:

    head(predict(afit))
    [1] 0.8548271 0.8797704 0.8584954 0.8031563 0.9012096 0.8955874
    

    它是一个向量,所以当我们将它传递给lines 时,R 会说,“好吧,你没有指定 x 值,所以我将只使用 x 值的索引”(试试@ 987654326@ 了解我的意思)。

    所以,我们需要做的是指定一个 2 列矩阵传递给lines,而不是:

    cbind(sort(means), predict(afit, newdata = sort(means)))

    应该可以解决问题。你的函数可以写成:

    FilterByVariance<-function(dat, threshold = 0.90, span = 0.75){
    means <- apply(dat,1,mean) 
    sds <- apply(dat,1,sd) 
    cv <- sqrt(sds/means)
    
    afit<-loess(cv~means, span = span)
    resids<-afit$residuals
    # good<-which(resids >= quantile(resids, probs = threshold)) 
    # points above the curve will have a residual > 0
    good <- which(resids > 0)
    #plots
    
    plot(cv~means)
    lines(cbind(sort(means), predict(afit, newdata = sort(means))), 
          col="blue",lwd=3)
    points(means[good],cv[good],col="red",pch=19)
    
    }
    

    【讨论】:

    • 非常感谢!这绝对解决了错误绘制曲线的问题。然而,红点仍然沿着错误的黄土曲线分散。我可以将它们拟合到绘制的黄土曲线上吗?
    • 你的意思是他们散落在错误的曲线上?您想看到黄土上方的点吗?
    • 选中的点仍然“随机”散布在曲线周围。 imgur.com/a/fmKXm 我只想选择曲线上方的那些数据点。
    • 曲线上方的点残值 > 0。我已经更新了函数。
    • 所以我发现它基本上是一个视觉错误。如果我选择矩阵的一个子集,它会正确显示。感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    相关资源
    最近更新 更多