2016-10-30 1 views
0

私はターゲット変数が左に歪んでいるデータセットを持っています。この変数のログのヒストグラムをプロットすると、普通の見栄えの良い分布になります。だから私はそれを変換するログを取るべきだと思いますか?モデルをlog(ターゲット)を使って予測するとき、予測関数を変更する必要がありますか?

私はそれを以下のmy_modelで試しました。しかし、Mean Absolute Errorを調べて評価したところ、変換されていないログに対しては実行されませんでした。

my_model <- lm(target ~ ,var1+var2+var3, data=ptrain) 
my_model_log <- lm(log(target) ~ ,var1+var2+var3, data=ptrain) 

my_predictions <- predict(my_model_log, interval="prediction", newdata=test_submission) 

ログモデルを使用すると、my_predictionsのパフォーマンスが低下しました。

これは予想されますか?予測を行う前にターゲットがログを変換したことを伝えるために、predict()に追加する必要があるパラメータはありますか?

+0

?dput "RオブジェクトのASCIIテキスト表現をファイルまたは接続に書き込むか、または1つを使用してオブジェクトを再作成します。"データのファイルを作成したいのですか?よくわかりません? –

+0

ああ。おそらくptrainは300kレコードと132バース以上のサンプルを持っています。 100または1000と言う小さなサンプルが使えますか? –

+0

私が提供できるものは他にありますか? str(ptrain)、サンプル?ヒストグラムのビジュアル? –

答えて

1

predict()の場合、log(target)の見積もりが返されます。ターゲットの見積もりが必要な場合は、逆変換、exp()を予測に適用する必要があります。予測間隔には興味深い特性があるかもしれません。

+0

私はそれを読んでいるので、それは本当に明白に聞こえる!ありがとうございました。 "予測区間には興味深い特性があるかもしれません。"どういう意味ですか? –

+0

@ ZheyuanLiこれは答えだと思います。いいえ、私はexp()を使用しませんでした –

+0

暗黙の前提は、変換された値の誤差が正規分布していることです。さまざまな前提のために準疑似声でglmを使うことができます。 –

1

これは実際には統計の質問、実際にプログラミングではありません...二つの独立した、潜在的に相反する問題

あります

  • は、あなたのデータは、通常のように見えるのでしょうか? (あなたのものは対数正規のように見えます)
  • あなたの説明変数は、加法的または乗法的に良く働きますか?したがって、あなたが使用することをお勧めします

    x1 <- runif(1000) 
    x2 <- runif(1000) 
    y <- 10*x1 + 10*x2 + rlnorm(1000, mean=0, sd=1) 
    dat <- data.frame(y, x1, x2) 
    

    をモデルが添加剤(Y = X1 + X2)である:

例えば対数正規妨害と添加物データを作成する(あなたのケースの添加剤には良いかもしれ)ちょうど lm(y~ ...)です。

ログバージョン

m <- lm(log(y)~x1 + x2, data=dat) 
mean(abs(dat$y - exp(predict(m) + 0.208^2/2))) 
[1] 1.579968 

非ログバージョン

m <- lm(y~x1 + x2, data=dat) 
mean(abs(dat$y - predict(m))) 
[1] 1.198665 

ようだ:あなたは lm(log(y)~ ...)

テストモデルを実行することもできますので、しかし、それはまた、非正規障害を持っています非ログモデルのように間違っても 妨害にもかかわらずより良い性能を発揮するので、 正しい構造。 $ E EXP(X)= EXP(ミュー+シグマ^ 2)$ $ X \ simのN(0、シグマ^ 2)$ので

注私はexp(predict(m) + sigma^2/2)として、ログのバージョンを予測します。

関連する問題