确定用于生成lm()模型的数据集

时间:2018-09-07 15:15:32

标签: r linear-regression

假设我得到了一个多元线性回归模型,例如:
y = B0 + B1x1 + B2x2

给出该模型的截距/系数值:
B0 = 0.005275169B1
B1 = 0.067347131
B2 = -0.207909721

但是...。我没有生成该模型的原始数据集(x / y值)。无论如何,有没有生成一个 new 数据集,然后将其馈送到lm()中,在此生成的lm()$ coef调用将吐出与上述相同的BO,B1,B2值?总而言之,我想生成一个数据集,当将其输入lm()时,会产生一个与上述100%完全相同的系数的模型。

2 个答案:

答案 0 :(得分:1)

在上面的评论中,我将继续介绍一个使用mtcars数据集的示例,在此示例中,我们拟合了mpg = beta0 + beta1 * disp形式的线性模型。

fit <- lm(mpg ~ disp, data = mtcars)
summary(fit)
#
#Call:
#lm(formula = mpg ~ disp, data = mtcars)
#
#Residuals:
#    Min      1Q  Median      3Q     Max
#-4.8922 -2.2022 -0.9631  1.6272  7.2305
#
#Coefficients:
#             Estimate Std. Error t value Pr(>|t|)
#(Intercept) 29.599855   1.229720  24.070  < 2e-16 ***
#disp        -0.041215   0.004712  -8.747 9.38e-10 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 3.251 on 30 degrees of freedom
#Multiple R-squared:  0.7183,   Adjusted R-squared:  0.709
#F-statistic: 76.51 on 1 and 30 DF,  p-value: 9.38e-10

我们为disp生成了一些新数据,并使用模型系数来预测mpg的响应。

df <- data.frame(disp = seq(1, 1000, length.out = 20))
df$mpg <- predict(fit, newdata = df)

我们现在将相同的模型拟合到新数据中。

fit.new <- lm(mpg ~ disp, data = df)
#
#Call:
#lm(formula = mpg ~ disp, data = df)
#
#Residuals:
#       Min         1Q     Median         3Q        Max
#-1.720e-14 -3.095e-15  1.302e-15  3.618e-15  5.719e-15
#
#Coefficients:
#              Estimate Std. Error    t value Pr(>|t|)
#(Intercept)  2.960e+01  2.235e-15  1.325e+16   <2e-16 ***
#disp        -4.122e-02  3.819e-18 -1.079e+16   <2e-16 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 5.178e-15 on 18 degrees of freedom
#Multiple R-squared:      1,    Adjusted R-squared:      1
#F-statistic: 1.165e+32 on 1 and 18 DF,  p-value: < 2.2e-16
#
#Warning message:
#In summary.lm(fit.new) : essentially perfect fit: summary may be unreliable

请注意估计值如何相同(但标准差和t统计量不一样!)。还要注意第二个模型配合底部的警告。


更新

如果您有系数beta0beta1,则只需将响应计算为

beta0 <- coef(fit)[1]
beta1 <- coef(fit)[2]
df <- data.frame(disp = seq(1, 1000, length.out = 20))
df$mpg <- beta0 + df$disp * beta1

答案 1 :(得分:0)

我认为您正在寻找lm对象中的url(r'^flow_processes', AllProcessListView.as_view(), name='flow_processes'), url(r'^flow_queues', AllQueueListView.as_view(), name='flow_queues'), 字段。这是一个可复制的示例

model