# expand the yd variable
truck_7990[, yd := as.factor(year - min(year) + 1)]
truck_7990_dummy <- model.matrix(~ yd - 1, data = truck_7990)
truck_7990_dummy <- as.data.table(truck_7990_dummy)
truck_7990[, names(truck_7990_dummy) := truck_7990_dummy]
# generate the cyd and tyd variables
truck_7990[, `:=`(
cyd2 = fifelse(type == "JT", 0, yd2),
cyd3 = fifelse(type == "JT", 0, yd3),
cyd4 = fifelse(type == "JT", 0, yd4),
cyd5 = fifelse(type == "JT", 0, yd5),
cyd6 = fifelse(type == "JT", 0, yd6),
cyd7 = fifelse(type == "JT", 0, yd7),
tyd2 = fifelse(type != "JT", 0, yd2),
tyd3 = fifelse(type != "JT", 0, yd3),
tyd4 = fifelse(type != "JT", 0, yd4),
tyd5 = fifelse(type != "JT", 0, yd5),
tyd6 = fifelse(type != "JT", 0, yd6),
tyd7 = fifelse(type != "JT", 0, yd7)
)]
# fit the models
initial_values <- list(
a3 = 1, a4 = 1, a5 = 1, a6 = 1, a7 = 1,
b2 = 0.1, b3 = 0.1, b4 = 0.1, b5 = 0.1, b6 = 0.1, b7 = 0.1,
c1 = 0.1, c2 = 0.1, c3 = 0.1, c4 = 0.1, c5 = 0.1, c6 = 0.1, c7 = 0.1,
c8 = 0.1, c9 = 0.1,
d1 = 0.1, d2 = 0.1, d3 = 0.1, d4 = 0.1, d5 = 0.1, d6 = 0.1, d7 = 0.1,
d8 = 0.1
)
fit <- nlsLM(
price ~ a3 * cyd3 + a4 * cyd4 + a5 * cyd5 + a6 * cyd6 + a7 * cyd7 +
exp(b2 * cyd2 + b3 * cyd3 + b4 * cyd4 + b5 * cyd5 + b6 * cyd6 + b7 * cyd7 +
c1 * wght_c + c2 * wdth_c + c3 * hght_c + c4 * hp_c + c5 * tran_c +
c6 * ps_c + c7 * ac_c + c8) +
exp(b2 * tyd2 + (b3 + 0.16) * tyd3 + (b4 + 0.16) * tyd4 +
(b5 + 0.16) * tyd5 + (b6 + 0.16) * tyd6 + c9 * tyd7 +
d1 * wght_t + d2 * wdth_t + d3 * hght_t + d4 * hp_t + d5 * tran_t +
d6 * ps_t + d7 * four_t + d8),
data = truck_7990,
start = initial_values
)
summary(fit)