Попытка подогнать поверхность отклика формулой R - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть набор из пары десятков числовых c переменных, и я пытаюсь выяснить, как компактно express квадратично c сформировать эти переменные. Я также хочу включить сами переменные. Идея здесь в том, что мы подбираем поверхность отклика, а не взаимодействуем с группой обработок, как, кажется, предполагает стандартная запись формулы R Я пытаюсь превратить соответствующие выражения в формулу R, подходящую для оценки различными методами, с разными наборами данных или в разные периоды. Я не смог найти его. Существует древняя статья, из которой R предположительно скопировал запись, но она ни в коем случае не идентична текущему использованию R. Любое другое описание, которое я нашел, просто приводит примеры, которые не охватывают каждый случай - даже близко не к каждому случаю.

Итак, в качестве примера, здесь я пытаюсь построить квадратичную форму c из трех переменных, не выписывая вручную все пары с I() вокруг каждой пары.

library(tidyverse)
A <- B <- C <- 1:10
LHS <- 1:10 * 600
tb <- tibble(LHS, A, B, C)
my_eq <- as.formula(LHS ~ I(A + B + C)*I(A + B + C))

Я не нашел способа сказать, добился ли я успеха. Ни my_form_eq, ни

terms(my_form_eq)

не кажутся вообще просветляющими.

Например, можно ли предсказать, является ли

identical(as.formula(LHS ~ I(A + B + C)*I(A + B + C)), as.formula(LHS ~ I((A + B + C)*(A + B + C)))

истинным или ложным? Я даже не могу догадаться. Или, если взять еще более простой случай, равен ~ A * I(A) A, I(A^2) или что-то еще? И как бы вы узнали?

Чтобы переформулировать мой вопрос, я хотел бы либо дать полное изложение того, как работает формула R, адекватно охватить каждый случай и предсказать, что каждый из них будет означать, либо, если этого не сделать, просто способ расширения любой существующей формулы на все атомы c, для которых будут оцениваться коэффициенты.

1 Ответ

0 голосов
/ 16 февраля 2020

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

Функция I запрещает интерпретацию таких операторов, как "+", поэтому ваша формула, вероятно, не будет делать то, что вы ожидаете. Например, результаты lm(my_eq) будут такими же, как и результаты следующих действий:

D <- A + B + C
lm(LHS ~ D * D)

И тогда вы можете просто сделать lm(LHS ~ D).

. Вопрос, я считаю, что Джон Майндональд написал хорошую книгу, которая объясняет формулы R для многих ситуаций. Но он у меня в офисе, а сегодня воскресенье.

Редактировать: Для расширения я считаю, что вы должны соответствовать модели, а затем посмотреть на вызов или условия:

> my_eq <- as.formula(LHS ~ (A + B + C) * (A + B + C))
> my_formula <- lm(my_eq)
> attr(terms(my_formula), "term.labels")
[1] "A"   "B"   "C"   "A:B" "A:C" "B:C"
...