1

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

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

    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,这给出了:

具有与上述相同的标题、轴和散点图点的图,叠加了一条红线,给出了 lowess 函数的拟合,该函数通常很好地遵循数据。

这在情节上很好,但是缺少原始数据——R 的绘图设备已经为我们填补了空白。我一直无法找到predict此功能的方法,因为它似乎R正在朝着 using 的方向发展loess,据我所知,这是一种概括。

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

另一个具有相同基线数据的图,这次显示了一条叠加的蓝线,显示了 loess 函数的拟合; 这种拟合呈 U 形,大约 20 年后先增加后减少

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

而且我似乎无法摆弄任何参数来恢复由lowess.

有什么建议吗?

4

1 回答 1

3

我不知道如何“协调”这两个函数,但我已经使用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
于 2015-03-25T19:07:09.580 回答