如何从R中的线性模型生成特定X的随机Y?

时间:2013-04-08 20:29:59

标签: r

假设我们有一个适合某些f1x数据点的线性模型y

f1 <- lm(y ~ x,data=d)

如何以新y值生成新的x值(与旧x值不同但在旧x值的范围内)使用此f1适合 R

4 个答案:

答案 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")

enter image description here

(原始数据为黑色,模拟为红色)

答案 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)函数,应该为你做。