В формулах R, почему я должен использовать функцию I() на степенных членах, например, y ~ I(x^3)
Я пытаюсь разобраться с использованием оператора тильды и связанных с ним функций. Мой первый вопрос почему I()
нужно использовать для указания арифметических операторов? Например, эти 2 графика дают разные результаты (первый имеет прямую линию, а второй - ожидаемую кривую)
x <- c(1:100)
y <- seq(0.1,10,0.1)
plot(y~x^3)
plot(y~I(x^3))
кроме того, оба следующих графика также дают ожидаемый результат
plot(x^3, y)
plot(I(x^3), y)
Мой второй вопрос: возможно, примеры, которые я использовал, слишком просты, но я не понимаю, где ~
на самом деле должен быть использован.
1 ответ
Вопрос в том, как интерпретировать формулы. В формуле тильда отделяет левую сторону от правой. В формулах ^
оператор для построения взаимодействий так, чтобы x
знак равно x^2
знак равно x^3
а не, возможно, ожидаемая математическая сила. Если бы вы набрали (x+y)^2
интерпретатор R произвел бы (для собственного хорошего внутреннего использования), а не математическое: x^2 +2xy +y^2
Скорее символично: x + y +x:y
где x:y
это термин взаимодействия.
?formula
I()
Функция действует для преобразования аргумента в "as.is", то есть то, что вы ожидаете. Поэтому я (x^2) вернул бы вектор значений, возведенных во вторую степень.
~
Следует понимать, что выражение "распределяется как" или "зависит от" при рассмотрении в регрессионных функциях. Это подразумевает термин ошибки в описании модели, который обычно помечается как "(Перехват)", и контекст функции и аргументы могут также дополнительно определять функцию связи, такую как log() или logit().
В plot()-ting функции в основном обращают обычное ( x, y )
порядок аргументов, который обычно принимает функция plot. Был разработан метод plot.formula, так что формулы можно было использовать как более "математический" способ общения с R. graphics::plot.formula
, curve
и функции "решетка" и "ggplot" определяют, как несколько факторов или числовых векторов будут отображаться и "фасетироваться".
Позже я узнал, что ~
на самом деле является примитивной функцией с инфиксом (или префиксом), которая создает R 'call', к которому можно обращаться с помощью операторов извлечения списка. Все это скрыто от обычного пользователя, но это может быть средство, используемое более продвинутыми авторами функций.
Перегрузка оператора "+" обсуждается в комментариях ниже и также выполняется в пакетах для построения графиков: ggplot2 и gridExtra, где он разделяет функции, которые доставляют результаты объекта, поэтому он действует и как сквозной и многоуровневый оператор. Функции агрегирования, которые имеют метод формулы, используют "+" в качестве "оператора компоновки" и группировки.