Почему установленные значения с функцией в R получают отличные значения от идеальных? - PullRequest
0 голосов
/ 29 июня 2018

При тестировании функции для вычисления некоторых значений регрессии я заметил, что значения, прогнозируемые function, не являются такими, какими они должны быть. Когда я выполняю подгонку значений другим способом, я получаю правильные значения.

  • Мое уравнение регрессии (A = x1; B = x2):

enter image description here

Как мне написать функцию f для правильного вычисления значений?

Мой код для function:

A = seq(5, 8, 0.2)
B = seq(30, 70, length.out = length(A))

f <- function(A,B) 281.5786111-39.2014931*A-2.9013646*B+0.5666979*A*B

dadosz <- list(A = A, B = B)
gridz <- expand.grid(dadosz)
gridz[, "fit"] <- f(A, B)

library(lattice)
wireframe(fit ~ A * B, data = gridz,
      panel.aspect = 0.5,
      zoom = 0.8,
      screen = list(z = 215, x = -60),
      scales=list(arrows = FALSE),
      drape = TRUE, 
      col.regions = heat.colors(100, alpha = 1))

enter image description here

Использование пакета и манипуляций с данными для выполнения той же работы, но с целью сделать код воспроизводимым. Обратите внимание, что приведенные здесь значения являются правильными.

library(dplyr)
library(purrr)
library(broom)

term <- c("(Intercept)", "A", "B", "A:B")
estimate <- c(281.5786111, -39.2014931, -2.9013646, 0.5666979)
std.error <- c(58.35909505, 7.47207607, 0.63829627, 0.05755324)
statistic <- c(4.824931, -5.246399, -4.545483, 9.846500)
p.value <- c(1.583042e-04, 6.565454e-05, 2.865084e-04, 1.941398e-08)

coe <- data.frame(term, estimate, std.error, statistic, p.value)

exp <- expand.grid(A = A, B = B) %>% 
  mutate(bo = as.numeric(1)) %>% 
  mutate(ult = A*B) %>% 
  select(bo, A, B, ult) %>% 
  as.matrix()

m_beta <- coe$estimate
reg <- t(m_beta %*% t(exp)) 
exp <- cbind(exp, reg) %>% 
  as.data.frame() %>% 
  rename(reg = V5)

wireframe(reg ~ A * B, data = exp,
      panel.aspect = 0.5,
      zoom = 0.8,
      screen = list(z = 310, x = -70),
      scales=list(arrows = FALSE),
      drape = TRUE, 
      col.regions = heat.colors(100, alpha = 1))

enter image description here

Поскольку у меня возникли сомнения, я протестировал его в Excel и на интернет-сайте и снова проверил, что ошибка в function.

enter image description here

1 Ответ

0 голосов
/ 29 июня 2018

Если мы посмотрим на линии

dadosz <- list(A = A, B = B)
gridz <- expand.grid(dadosz)
gridz[, "fit"] <- f(A, B)

Вы можете видеть, что использовали expand.grid для создания всех комбинаций A и B, но вы не использовали эти значения при вызове f(), вместо этого вы использовали исходные значения A и B. Вы должны были сделать

gridz[, "fit"] <- f(gridz$A, gridz$B)

Это дает сюжет

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...