2013-08-19 2 views
7

私は、独立変数の1つが因子であり、新しい因子レベルを含むデータセットに対して予測をしようとしている線形モデルを持っていますモデルが推定されたデータセットには存在しません)。ファクターに適用される係数を手動で指定することによって、新しいファクターレベルでの観測値の予測を可能にしたいと考えています。たとえば、3種類の店舗の1日あたりの販売数量を見積もり、データセットに4種類目の店舗を導入するとします。私はそれのための歴史的なデータはありませんが、私はそれがモデル係数を持っている他の店舗のいくつかの加重組み合わせのように振る舞うだろうと仮定するかもしれません。予測するときに新しい因子レベルの係数を手動で設定する

新しいデータにpredict.lm()を適用しようとすると、その要素に新しいレベルがあることを伝えるエラーが表示されます(これは意味があります)。

df <- data.frame(y=rnorm(100), x1=factor(rep(1:4,25))) 
lm1 <- lm(y ~ x1, data=df) 
newdata <- data.frame(y=rnorm(100), x1=factor(rep(1:5,20))) 
predict(lm1, newdata) 

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
    factor x2 has new levels 5 

係数をdata.frameの個々の列に単純に乗算することで予測を手動で行うことができました。しかし、実際のモデルでは変数や相互作用の項が多く、モデル式を変更することでさまざまなモデル仕様を簡単に循環させたいと考えているので、これは面倒です。基本的にモデルオブジェクトに新しい係数を追加し、それを使って予測を行う方法はありますか?そうでない場合は、予測ステップ全体を手動で設定するよりも煩雑ではない別のアプローチがありますか?

+0

'?update'では、文字列を使用せずにプログラムを使って数式を操作する方法を紹介しています。 – dardisco

+0

新しいレベルをどのように予測するかについての詳細は良いでしょう。 「いくつかの重み付けされた組み合わせ」はあまり正確ではありません。 –

+0

これを多くのモデルで試したい場合や、追加の係数レベルの係数値が異なる場合は、これを行う関数を書くことができます。私は、lmオブジェクトから 'model.matrix'と' coefficients'を抽出し、因子レベルと係数を挿入して、行列の乗算を使って予測を取得しようとします。 – Edwin

答えて

1

あなたはレベル5が均等に重み付けすることにしたいAssumming、あなたは、行列に変換し、25%のプラグイン、およびモデルからの係数を掛けすることができます...

n.mat <- model.matrix(~x1, data=newdata) 
n.mat[n.mat[,5] == 1, 2:4] <- .25 
n.mat <- n.mat[,-5] 
n.prediction <- n.mat %*% coef(lm1) 
0

ここでは何がありますできるだけ:

  1. rbindを使用して、トレーニングとテストのデータセットをスタックします。
  2. 予測子を分解する。
  3. スタックをトレーニングデータセットとテストデータセットに分割します。

このようにして、すべてのレベルが両方のデータセットに存在します。

関連する問題