【问题标题】:Predicting via Lowess in R (OR reconciling Loess & Lowess)通过 R 中的 Lowess 进行预测(或调和 Loess 和 Lowess)
【发布时间】:2015-03-25 18:48:56
【问题描述】:

我正在尝试内插/本地外推一些工资数据以填写数据集。

这是数据集和可用数据的图表:

    experience   salary
 1:          1 21878.67
 2:          2 23401.33
 3:          3 23705.00
 4:          4 24260.00
 5:          5 25758.60
 6:          6 26763.40
 7:          7 27920.00
 8:          8 28600.00
 9:          9 28820.00
10:         10 32600.00
11:         12 30650.00
12:         14 32600.00
13:         15 32600.00
14:         16 37700.00
15:         17 33380.00
16:         20 36784.33
17:         23 35600.00
18:         25 33590.00
19:         30 32600.00
20:         31 33920.00
21:         35 32600.00

鉴于明显的非线性,我希望通过局部线性估计器进行插值和外推(我想填写 0 到 40 年的经验),所以我默认为 lowess,它给出了这个:

这在绘图上很好,但是缺少原始数据——R 的绘图设备已经为我们填补了空白。我还没有找到这个函数的predict 方法,因为似乎R 正在转向使用loess,据我所知这是一个概括。

但是,当我使用具有标准predict 方法的loess(设置surface="direct" 以便能够推断,如?loess 中所述)时,拟合不太令人满意:

(有强有力的理论理由说工资应该不降低——这里有一些噪音/可能的错误测量驱动了 U 形)

而且我似乎无法摆弄任何参数来恢复lowess 给出的非递减拟合。

有什么建议吗?

【问题讨论】:

    标签: r interpolation predict loess extrapolation


    【解决方案1】:

    我不知道如何“协调”这两个函数,但我已经使用 cobs 包(COnstrained B-Splines Nonparametric Regression Quantiles)在类似任务中取得了一些成功。默认分位数是(本地)中位数或 0.5 分位数。在这个数据集中,跨度或内核宽度的默认选择似乎非常合适。

    require(cobs)
    Loading required package: cobs
    Package cobs (1.3-0) attached.  To cite, see citation("cobs")
    
     Rbs <- cobs(x=dat$experience,y=dat$salary, constraint= "increase")
    qbsks2():
    # Performing general knot selection ...
    #
    # Deleting unnecessary knots ...
     Rbs
    #COBS regression spline (degree = 2) from call:
    #    cobs(x = dat$experience, y = dat$salary, constraint = "increase")
    #{tau=0.5}-quantile;  dimensionality of fit: 5 from {5}
    #x$knots[1:4]:  0.999966,  5.000000, 15.000000, 35.000034
    plot(Rbs, lwd = 2.5)
    

    它确实有一个 predict 方法,尽管您需要使用特殊参数,因为它不支持通常的 data= 形式:

     help(predict.cobs)
     predict(Rbs, z=seq(0,40,by=5))
           z      fit
     [1,]  0 21519.83
     [2,]  5 25488.71
     [3,] 10 30653.44
     [4,] 15 32773.21
     [5,] 20 33295.84
     [6,] 25 33669.14
     [7,] 30 33893.12
     [8,] 35 33967.78
     [9,] 40 33893.12
    

    【讨论】:

    • 太棒了!如何找到所有这些插值方法,我想知道......
    • 在这种情况下,它是通过处理 Roger Koenker 的 quantreg-package 附带的小插图。
    猜你喜欢
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2013-01-03
    • 2017-07-27
    相关资源
    最近更新 更多