Определите набор данных, который использовался для генерации модели lm () - PullRequest
0 голосов
/ 07 сентября 2018

Допустим, мне была предоставлена ​​модель множественной линейной регрессии, например:
y = B0 + B1x1 + B2x2

А дано значения перехвата / коэффиция этой модели:
B0 = 0,005275169B1
B1 = 0,067347131
B2 = -0,207909721

НО .. У меня нет исходного набора данных (значения x / y), который сгенерировал эту модель. Есть ли какой-нибудь способ генерировать новый набор данных, а затем передать его в lm (), где результирующий вызов lm () $ coef затем выплюнет те же значения BO, B1, B2, которые указаны выше? Итак, я хочу сгенерировать набор данных, который при подаче в lm () создает модель со 100% -ной точностью, как указано выше.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я думаю, вы ищете поле model в объекте lm. Вот воспроизводимый пример

fit <- lm(mpg ~ disp, data = mtcars)    
newdata <- fit$model
#                      mpg  disp
# Mazda RX4           21.0 160.0
# Mazda RX4 Wag       21.0 160.0
# Datsun 710          22.8 108.0
# Hornet 4 Drive      21.4 258.0
# Hornet Sportabout   18.7 360.0
# Valiant             18.1 225.0
# ...
0 голосов
/ 07 сентября 2018

Чтобы расширить мой комментарий выше, вот пример, использующий набор данных 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 статистика не!). Также обратите внимание на предупреждение в нижней части подгонки второй модели.


Обновление

Если у вас есть коэффициенты beta0 и beta1, просто рассчитайте ответ как

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