2017-08-02 2 views
0

私はRで2つの大きなデータセットを持っています。実際の測定値の1つと、これらの測定値についての予測値の1つです。私の予測の傾向は正確だが、振幅は消えていた。私は、予測で定数を乗算したときに、実数と予測の間の誤差を最小限にするRの定数を見つける方法があるかどうか疑問に思っています。例えば定数(R)を乗算して見積もりと実績の誤差を最小限にするにはどうすればよいですか?

predictions <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 
actuals <- c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20) 

私はこのケースで生成したい定数が2

だろう、私はOPTIM()関数を使用してに見えたが、警告メッセージが表示されます」といういますNelder-Meadの1次元最適化は信頼できません.Brentやoptimize()を直接使用してください。

f <- function(p) cor(p*observed, actual) 

optim(
c(1), 
f, 
control = list(fnscale = -1) 
) 

私は最適化に精通していないので、間違った方法でこの問題に近づいている可能性があります。私は助けに感謝します!

答えて

1

まずは最小限に抑えるために、誤差関数を定義してみましょう:

MultError <- function(constant, predictions, actuals) { 

    return(sum((constant*predictions - actuals)^2)) 

} 

これは、二乗誤差の合計である...あなたは別のものを使用することができます!

optimize()は、関数、検索する間隔(最小値と最大値を調べることによって得ることができます)(predictions/actuals)と追加のパラメータが必要です。これは、デフォルトでは最小限に抑えられます

optimize(MultError, interval=c(0, 5), predictions=predictions, actuals=actuals) 

これは、それぞれ最小の値と誤差関数の値が、ある

$minimum 
[1] 2 

$objective 
[1] 0 

を返します。

おそらく、あなたの試合は完璧ではありませんので、私はまた、人工的なノイズで

set.seed(1) 
actuals <- rnorm(length(predictions), 2, 0.4) * predictions 

それを試してみましたそして、それはかなり良い

$minimum 
[1] 2.087324 

$objective 
[1] 22.21434 

を返します!

EDIT:

ため、私はタイトルとOPが行っていたが、難しく考えでは、それはそれはやり過ぎかもしれないように思えた方向の最適化使用して、この質問に答えました。 mean(actuals/predictions)をとるだけで何が問題になりますか?私は...万可能なデータセットのために

set.seed(1) 
arithmetic <- opt <- numeric(10000) 

for (trial in 1:10000) { 

    actuals <- rnorm(length(predictions), 2, 0.4) * predictions 
    arithmetic[trial] <- mean(actuals/predictions) 
    opt[trial] <- optimize(MultError, interval=c(0, 5), predictions=predictions, actuals=actuals)$minimum 

} 

をそれらの両方をテストすることを決めたので、私たちは平均して二乗誤差の和を最小化することによりを使用して定数を回復してきました

。推定値の平均値と分散は何ですか?

> mean(arithmetic) 
[1] 1.999102 
> mean(opt) 
[1] 1.998695 

両方とも平均でかなり良好です。

> var(arithmetic) 
[1] 0.0159136 
> var(opt) 
[1] 0.02724814 

しかし、算術平均推定量はより厳密に広がります。だから私はあなたが平均を取るべきだと主張するだろう!

0

線形回帰lm()関数を使用すると、かなり良い近似を得ることができます。

m = lm(actuals ~ predictions)

m線形回帰モデルを格納するオブジェクトです。

coef(m)は、オフセットにプラスを掛ける定数を与えます。

+1

フォーミュラに '+ 0'を追加すると、インターセプトに適合しないので、' predictions'を掛け合わせる単一の係数(つまり、OPが要求するもの)があります。 – Gregor

+0

良い点、OPは前提条件としてそれを入れました。 (私は-1を使用して傍受を取り除き、+0は同じことを達成したことを知らなかった)。数式(たとえば、actuals〜predictions + predictions^2)を使って遊ぶことができます。あなたは基本的に数学的関係を推測しようとしています。 – rdodhia

関連する問題