乘法回归

时间:2016-09-20 10:18:02

标签: r non-linear-regression

我试图用一个连续因变量(y)和三个分类独立变量(x1,x2,x3)来估计数据集上的回归模型。例如,假设y是您为智能手机支付的价格,x是三个功能(比如颜色,大小和存储空间)。

我的假设是每个特征代表相对于(未知)基线价格的乘法因子。因此,如果您的手机的基准价格为100,红色会使此增加25%,大尺寸会减少50%,高存储空间会增加75%。这意味着手机的最终价格为100 x(1 + 0.25)x(1-0.50)x(1 + 0.75)= 109.375。

问题是我只知道最终价格(不是基线价格)和个别特征。我如何估计与这些特征一起出现的乘法因子?我在下面的R中写了一个简短的模拟来说明这个问题。

感谢您对此的帮助,

迈克尔

x_fun   <- function() {
    tmp1                <- runif(N)
    tmp2                <- cut(tmp1, quantile(tmp1, probs=c(0, 1/3, 2/3, 3/3)))
    levels(tmp2)        <- seq(1:length(levels(tmp2)))
    tmp2[is.na(tmp2)]   <- 1
    as.factor(tmp2)}

N       <- 1000

x1      <- x_fun()
x2      <- x_fun()
x3      <- x_fun()

f1      <- 1+0.25*(as.numeric(x1)-2)
f2      <- 1+0.50*(as.numeric(x2)-2)
f3      <- 1+0.75*(as.numeric(x3)-2)

y_Base  <- runif(min=0, max=1000, N)
y       <- y_Base*f1*f2*f3

output  <- data.frame(y, x1, x2, x3)
rm(y_Base, f1, f2, f3, N, y, x_fun, x1, x2, x3)

1 个答案:

答案 0 :(得分:0)

我认为你可以这样做如果你知道你的因素的基本水平

N       <- 1000
set.seed(42)
x1      <- x_fun()
x2      <- x_fun()
x3      <- x_fun()

f1      <- 1+0.25*(as.numeric(x1)-2)
f2      <- 1+0.50*(as.numeric(x2)-2)
f3      <- 1+0.75*(as.numeric(x3)-2)

y_Base  <- runif(min=0, max=1000, N)
y       <- y_Base*f1*f2*f3

str(x1)

output  <- data.frame(y, x1, x2, x3)
#rm(y_Base, f1, f2, f3, N, y, x_fun, x1, x2, x3)


output[, c("x1", "x2", "x3")] <- lapply(output[, c("x1", "x2", "x3")], relevel, ref = "2")

fit <- glm(y ~ x1 + x2 + x3, data = output, family = gaussian(link = "log"))
summary(fit)
predbase <- exp(log(output$y) - predict(fit, type = "link") + coef(fit)["(Intercept)"])


library(ggplot2)
ggplot(data.frame(x = y_Base, y = predbase, output[, c("x1", "x2", "x3")]),
       aes(x = x, y = y)) +
  geom_point() +
  facet_wrap( ~ x1 + x2 + x3) +
  geom_abline(slope = 1, color = "dark red")

resulting plot