假设我们有一个适合某些f1
和x
数据点的线性模型y
:
f1 <- lm(y ~ x,data=d)
如何以新y
值生成新的x
值(与旧x
值不同但在旧x
值的范围内)使用此f1
适合 R ?
答案 0 :(得分:1)
您可以使用predict
:
x <- runif(20, 0, 100)
y <- 5*x + rnorm(20, 0, 10)
df <- data.frame(x, y)
df
plot(df)
mod <- lm(y ~ x, data = df)
x_new <- 1:100
pred <- predict(mod, newdata=data.frame(x = x_new))
plot(df)
points(x_new, pred)
答案 1 :(得分:1)
stats:::simulate.lm
允许您从装有lm
的线性模型中进行采样(与the approach of @Bulat相比,它使用残差的无偏估计)。为了模拟自变量的不同值,您可以像下面这样乱搞:
# simulate example data
x <- runif(20, 0, 100)
y <- 5*x + rnorm(20, 0, 10)
df <- data.frame(x, y)
# fit linear model
mod <- lm(y ~ x, data = df)
# new values of the independent variable
x_new <- 1:100
# replaces fitted values of the model object with predictions for new data,
mod$fitted.values <- predict(mod, data.frame(x=x_new)) # "hack"
# simulate samples appropriate noise and adds it the models `fitted.values`
y_new <- simulate(mod)[, 1] # simulate can return multiple samples (as columns), we only need one
# visualize original data ...
plot(df)
# ... alongside simulated data at new values of the independent variable (x)
points(x_new, y_new, col="red")
(原始数据为黑色,模拟为红色)
答案 2 :(得分:0)
可能是Stack Overflow的更好问题,但查找predict
。
答案 3 :(得分:0)
我正在看同样的问题。
简单来说,可以使用残差样本来完成:
mod <- lm(y ~ x, data = df)
x_new <- c(5) # value that you need to simulate for.
pred <- predict(mod, newdata=data.frame(x = x_new))
err <- sample(mod$residuals, 1)
y <- pred + err
有一个simulate(fit, nsim = 10, XX = x_new)
函数,应该为你做。