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でいるように見えるため、この関数のメソッドを見つけることができませんでした。Rloess

ただし、標準的な方法を使用する (で説明したように、外挿できるようにloess設定) を使用すると、適合はあまり満足できません。surface="direct"?loesspredict

同じベースライン データを使用した別のプロット。今回は、黄土関数からの適合を示す重ね合わせた青い線を示しています。 このフィット感は U 字型で、最初は増加してから約 20 年後に減少します

(給与が減らないようにするべきであるという強い理論的理由があります。ここでは、U 字型を駆動するノイズ/測定ミスの可能性があります)。

そして、 によって与えられた減少しない適合を取り戻すために、どのパラメータもいじることができないようですlowess

何をすべきかについて何か提案はありますか?

4

1 に答える 1

3

これら2つの関数を「調整」する方法はわかりませんが、cobsパッケージ(COstrained 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)

ここに画像の説明を入力

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 に答える