1

私は需要モデルを推定しようとしています:

d_t^k = a_t - b^k p_t^k + e_t^k

インデックスtは週番号、k製品番号です。各製品の需要はd_t^k、すべての製品に共通する一般的な季節性に依存し、a_tその週の製品の価格のアフィン関数とp_t^k通常のランダム誤差を加えたものe_t^kです。

ただし、次のlm関数呼び出しを使用すると、 の積ごとに 1 つの係数が必要な場合に、のb1つの係数が得られます。priceb^kprice^k

lm(demand ~ factor(week) + price, data = df)

モデルを表現する正しい方法は何ですか?

lm(demand ~ factor(week) + factor(product) * price, data = df)

上記が機能すると推測していますが、そこで何が起こっているかを示すドキュメントが見つかりません。

具体的な例として、わずかに異なる需要モデル d_t^k = a_t + a^k - b^k p_t^k + e_t^k で実行される次のコードがあります。

# Generate fake prices and sales, and estimate the coefficients of
# the demand model.

number.of.items <- 20 # Must be a multiple of 4
number.of.weeks <- 5
coeff.item.min <- 300
coeff.item.max <- 500
coeff.price.min <- 1.4
coeff.price.max <- 2
normal.sd <- 40
set.seed(200)

# Generate random coefficients for the items
coeff.item <- runif(number.of.items, coeff.item.min, coeff.item.max)
coeff.price <- runif(number.of.items, coeff.price.min, coeff.price.max)
coeff.week <- 50 * 1:number.of.weeks

# Row is item, column is week
week.id.matrix <- outer(rep(1, number.of.items), 1:number.of.weeks)
item.id.matrix <- outer(1:number.of.items, rep(1, number.of.weeks))
price.matrix <- rbind(
  outer(rep(1, number.of.items / 4), c(100, 100, 90, 90, 80)),
  outer(rep(1, number.of.items / 4), c(100, 90, 90, 80, 60)),
  outer(rep(1, number.of.items / 4), c(100, 85, 85, 60, 60)),
  outer(rep(1, number.of.items / 4), c(100, 75, 60, 45, 45))
)
coeff.week.matrix <- outer(rep(1, number.of.items), coeff.week)
coeff.price.matrix <- outer(coeff.price, rep(1, number.of.weeks))
coeff.item.matrix <- outer(coeff.item, rep(1, number.of.weeks))
sales.matrix <- coeff.week.matrix +
  coeff.item.matrix -
  coeff.price.matrix * price.matrix +
  matrix(rnorm(number.of.weeks * number.of.items, 0, normal.sd),
         number.of.items, number.of.weeks)


df <- data.frame(item = factor(as.vector(item.id.matrix)),
                 week = factor(as.vector(week.id.matrix)),
                 price = as.vector(price.matrix),
                 sales = as.vector(sales.matrix))

model <- lm(sales ~ week + item + price, data = df)
model <- lm(sales ~ week + item + factor(item) * price, data = df)

print(summary(model))
4

1 に答える 1

0

いろいろ実験した結果、どうやら

lm(demand ~ factor(week) + factor(product) * price, data = df)

動作します。

なぜ以前にうまくいくと思わなかったのかわかりません。

于 2013-04-14T21:25:46.783 に答える