я нашел следующий код в интернетеКакова функция I()?
mod1 <- lm(mpg ~ weight + I(weight^2) + foreign, auto)
Что такое функция I()
? Кажется, что результат weight^2
такой же, как I(weight^2)
.
я нашел следующий код в интернетеКакова функция I()?
mod1 <- lm(mpg ~ weight + I(weight^2) + foreign, auto)
Что такое функция I()
? Кажется, что результат weight^2
такой же, как I(weight^2)
.
Функция I()
является изолировать терминов в формулах от обычной формулы синтаксического анализа & синтаксиса. В кадрах данных используются другие виды использования I()
, где он помогает создавать объекты, которые имеют или наследуют от класса "AsIs"
, который позволяет встраивать объекты без обычного преобразования, которое имеет место.
В формуле случае, как это то, что вы конкретно спросить, ^
специальная формула оператор, который указывает на пересечение условий к n
й степени, где n
дается после оператора, как так: ^n
. Таким образом, ^
не имеет обычной арифметической интерпретации в формуле. (Точно так же, как -
, +
, /
и *
операторы также имеют специальную формулу значения и в результате I()
требуется, чтобы использовать их, чтобы изолировать их от формулы разборе инструментов.)
В конкретном примере, вы даете (я 'проиллюстрируем использование встроенного набора данных trees
), если вы забудете использовать I()
вокруг квадратичного члена, R в этом случае полностью игнорирует этот термин, так как Volume
(weight
в вашем примере) уже находится в модели и вы запрашиваете многопоточные взаимодействия переменной с самим собой, что не является квадратичным термином.
Сначала без I()
:
> lm(Height ~ Volume + Volume^2, data = trees)
Call:
lm(formula = Height ~ Volume + Volume^2, data = trees)
Coefficients:
(Intercept) Volume
69.0034 0.2319
Обратите внимание, как только Volume
член в формуле? Правильная спецификация для квадратичной модели (на самом деле это не может быть, смотри ниже) является
> lm(Height ~ Volume + I(Volume^2), data = trees)
Call:
lm(formula = Height ~ Volume + I(Volume^2), data = trees)
Coefficients:
(Intercept) Volume I(Volume^2)
65.33587 0.47540 -0.00314
Я сказал, что это не может быть правильным; это связано с корреляцией между Volume
и Volume^2 . An identical but more stable fit can be achieved by the use of orthogonal polynomials, which
poly() `может производить для вас. Таким образом, более стабильный Speficiation будет:
> lm(Height ~ poly(Volume, 2), data = trees)
Call:
lm(formula = Height ~ poly(Volume, 2), data = trees)
Coefficients:
(Intercept) poly(Volume, 2)1 poly(Volume, 2)2
76.000 20.879 -5.278
Обратите внимание, что подгонка идентична предыдущей модели, хотя с различными оценки коэффициентов в качестве входных данных разные (ортогональные полиномы против исходных многочленов). Вы можете увидеть это их summary()
выход, если вы не верите мне:
> summary(lm(Height ~ poly(Volume, 2), data = trees))
Call:
lm(formula = Height ~ poly(Volume, 2), data = trees)
Residuals:
Min 1Q Median 3Q Max
-11.2266 -3.6728 -0.0745 2.4073 9.9954
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 76.0000 0.9322 81.531 < 2e-16 ***
poly(Volume, 2)1 20.8788 5.1900 4.023 0.000395 ***
poly(Volume, 2)2 -5.2780 5.1900 -1.017 0.317880
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.19 on 28 degrees of freedom
Multiple R-squared: 0.3808, Adjusted R-squared: 0.3365
F-statistic: 8.609 on 2 and 28 DF, p-value: 0.001219
> summary(lm(Height ~ Volume + I(Volume^2), data = trees))
Call:
lm(formula = Height ~ Volume + I(Volume^2), data = trees)
Residuals:
Min 1Q Median 3Q Max
-11.2266 -3.6728 -0.0745 2.4073 9.9954
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 65.335867 4.110886 15.893 1.52e-15 ***
Volume 0.475398 0.246279 1.930 0.0638 .
I(Volume^2) -0.003140 0.003087 -1.017 0.3179
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.19 on 28 degrees of freedom
Multiple R-squared: 0.3808, Adjusted R-squared: 0.3365
F-statistic: 8.609 on 2 and 28 DF, p-value: 0.001219
Обратите внимание на разницу в т для-тестов линейных и квадратичных членов в моделях. Именно здесь помогает ортогональность входных полиномиальных членов.
Для того чтобы действительно увидеть, что ^
делает в формуле (в случае терминология в ?formula
не то, что вы знакомы с, рассмотрит эту модель:
> lm(Height ~ (Girth + Volume)^2, data = trees)
Call:
lm(formula = Height ~ (Girth + Volume)^2, data = trees)
Coefficients:
(Intercept) Girth Volume Girth:Volume
75.40148 -2.29632 1.86095 -0.05608
Как есть два члена в (...)^2
, формула разбор код преобразует это в основные эффекты двух переменных плюс их взаимодействие 2-го порядка. Эта модель может быть более лаконично записана как Height ~ Girth * Volume
, но ^
помогает, когда вы хотите взаимодействия более высокого порядка или взаимодействия между большим числом переменных.
Вы читали 'help (I)'? Если нет, прочитайте. Если да, сообщите нам, что вы не понимаете. –
Обратите внимание, что просто сравнение «weight^2» с 'I (вес^2)' ** в командной строке ** не является подходящим критерием для их подобия при использовании в формуле. Там, поскольку применяются дополнительные формулы синтаксического анализа и интерпретации, два вызова * отличаются друг от друга. –
'? Formula' - еще один дополнительный хороший ресурс с примерами использования' I() 'в формуле. – Alex