Как я могу предсказать значения в факторных экспериментах (2 ^ k) с центральными точками в R? - PullRequest
0 голосов
/ 28 июня 2018

Как я могу предсказать значения в факторных экспериментах с центральными точками в R, используя пакет FrF2 с функцией predict или пакет broom?

Мой код:

library(FrF2)
plan.person = FrF2(nfactors = 5, resolution = 5, replications = 2,
               ncenter = 1, randomize = FALSE,
               factor.names = list(
                 A = c(8, 5),
                 B = c(70, 30),
                 C = c(0.5, 0),
                 D = c(1000, 700),
                 E = c(70, 10)))

resp  <- c(84.55, 66.34, -1, 69.18, 73.01, 64.52, 0.73, 47.61, 68.18, 59.87, 
       26, 72.57, 78.08, 73.81, 26, 59.38, 71.41, 88.64, 64.92, 4, 68.81, 
       80, 69.66, -1.36, 54.50, 79.24, 78.53, -1, 72.63, 89.97, 87.98, 
       -11, 65.68, 82.46)

newplan <- add.response(design = plan.person, response = resp)

model <- lm(newplan, use.center = T)
# summary(model)

d <- within(newplan, {
  A <- as.numeric(as.character(A))
  B <- as.numeric(as.character(B))
  C <- as.numeric(as.character(C))
  D <- as.numeric(as.character(D))
  E <- as.numeric(as.character(E)) })

A = seq(5, 8, 1)
B = seq(30, 70, length.out = length(A))
C = seq(0, 0.5, length.out = length(A))
D = seq(700, 1000, length.out = length(A))
E = seq(10, 70, length.out = length(A))

data <- expand.grid(A = A, B = B,
                C = C, D = D,
                E = E)  

dados$p <- predict(model, newdata=data)

Из-за центральной точки появляется следующее сообщение.

Ошибка в model.frame.default (Условия, новые данные, na.action = na.action, xlev = object $ xlevels): длины переменных различаются (в «центре»)

Ответы [ 2 ]

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

Если вы удалите центральное значение, вы можете сделать это после model <- lm(newplan, use.center = T) :

1 - Фильтр значений <0,05 </p>

coe <- broom::tidy(model) %>% 
  slice(-7) %>%   #remove center
  filter(p.value < 0.05)   

m_beta <- coe$estimate

2 - сделать сетку:

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

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

3: сделать регрессию:

reg <- t(m_beta %*% t(exp)) 

exp <- cbind(exp, reg) %>% 
  as.data.frame() %>% 
  rename(reg = V5)

Но я считаю, что это только решает вычислительную проблему или упрощает ее. Я считаю, что линейная регрессия также должна быть переделана. Но с помощью этого кода вы можете исследовать и увидеть, какие существуют другие ошибки.

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

«Двухуровневый эксперимент с центральными точками может обнаруживать, но не соответствовать квадратичным эффектам». (https://www.itl.nist.gov/div898/handbook/pri/section3/pri336.htm)

То есть R не может предсказать эти значения, потому что вам нужно сделать дополнительные предположения о том, как выглядит кривая, чтобы предсказать точки не в ваших точках проектирования.

Обратите внимание, что в вычислительном отношении вы можете заставить программное обеспечение работать, добавив center термин. Ошибка в том, что этот термин находится в регрессии, но не в наборе данных. Вы можете добавить один с data$center <- FALSE (потому что ни одна из точек в data не находится в центре), но это не сделает правильно, так как это не будет учитывать потенциальную кривизну, когда предсказывая нецентральные точки, он просто предсказывал бы искривленную плоскость (то есть линейную с взаимодействиями) с единственным выступом в центре.

Конечно, это также эквивалентно подгонке модели к use.center=FALSE, так как центральная точка не влияет на подгонку других точек.

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