수색…
수식의 기초
R의 통계 함수는 소위 Wilkinson-Rogers 수식 표기법 1 을 많이 사용합니다.
Linear Regressions의 lm
과 같은 모델 함수를 실행할 때 formula
필요합니다. 이 formula
은 추정 할 회귀 계수를 지정합니다.
my_formula1 <- formula(mpg ~ wt)
class(my_formula1)
# gives "formula"
mod1 <- lm(my_formula1, data = mtcars)
coef(mod1)
# gives (Intercept) wt
# 37.285126 -5.344472
~
(LHS)의 왼쪽에는 종속 변수가 지정되고 오른쪽 (RHS)에는 독립 변수가 포함됩니다. 위의 formula
호출은 물결 모양 연산자가 수식 클래스가있는 개체를 반환하는 중위 함수이기 때문에 위의 formula
호출은 중복됩니다.
form <- mpg ~ wt
class(form)
#[1] "formula"
formula
함수의 장점은 ~
에 대한 평가 환경을 지정할 수 있다는 것입니다.
form_mt <- formula(mpg ~ wt, env = mtcars)
이 경우 출력은 wt
대한 회귀 계수뿐만 아니라 절편 매개 변수 (기본값)를 추정합니다. 절편은 0
또는 -1
을 formula
에 포함하여 제외되거나 강제 될 수 있습니다.
coef(lm(mpg ~ 0 + wt, data = mtcars))
coef(lm(mpg ~ wt -1, data = mtcars))
변수 간의 상호 작용 및 a
b
포함하여 추가 할 수 a:b
받는 formula
:
coef(lm(mpg ~ wt:vs, data = mtcars))
통계적으로 볼 때 주 효과가없는 모델에서 상호 작용을하지 않는 것이 일반적이므로 formula
을 a + b + a:b
로 확장하는 것이 좋습니다. 이것은 작동하지만 a*b
를 쓰면 간단해질 수 있습니다. 여기서 *
연산자는 두 요소 열 사이의 인수 교차 또는 하나 또는 두 열이 모두 숫자 일 때 곱셈을 나타냅니다.
coef(lm(mpg ~ wt*vs, data = mtcars))
*
표기법을 사용하면 다음과 같이 모든 하위 효과를 포함하는 용어가 확장됩니다.
coef(lm(mpg ~ wt*vs*hp, data = mtcars))
절편 이외에 7 개의 회귀 계수를 줄 것입니다. 하나는 3 방향 상호 작용을위한 것이고, 다른 하나는 양방향 상호 작용을위한 것이고, 다른 하나는 주요 효과를위한 것입니다.
예를 들어 3 자 상호 작용을 제외하고 모든 양방향 상호 작용을 유지하려는 경우 두 개의 축약이 있습니다. 먼저 -
를 사용하여 특정 용어를 뺄 수 있습니다.
coef(lm(mpg ~ wt*vs*hp - wt:vs:hp, data = mtcars))
또는 ^
표기법을 사용하여 필요한 상호 작용 수준을 지정할 수 있습니다.
coef(lm(mpg ~ (wt + vs + hp) ^ 2, data = mtcars))
이 두 수식 사양은 동일한 모델 행렬을 만들어야합니다.
마침내 .
가능한 모든 변수를 주 효과로 사용하는 것이 속기입니다. 이 경우 data
인수는 사용 가능한 변수 (LHS에없는 변수)를 가져 오는 데 사용됩니다. 따라서:
coef(lm(mpg ~ ., data = mtcars))
절편과 10 개의 독립 변수에 대한 계수를 제공합니다. 이 표기법은 예측 또는 분류에 모든 변수를 사용하려는 기계 학습 패키지에서 자주 사용됩니다. 의 의미에 유의하십시오 .
문맥에 달려있다 (다른 의미는 ?update.formula
를 ?update.formula
).
- GN Wilkinson과 CE Rogers. 왕립 통계 학회지. 시리즈 C (응용 통계) Vol. 22, No.3 (1973), pp. 392-399
선형, 2 차 및 2 차 상호 작용 조건 작성
y ~ .
여기 .
모델을 맞추는 데 사용 된 데이터 프레임에서 y
를 제외한 모든 변수로 해석됩니다. 이는 예측 변수의 선형 조합과 동일합니다. 예를 들어 y ~ var1 + var2 + var3+...+var15
y ~ . ^ 2
는 데이터 프레임에서 변수의 모든 선형 (주 효과) 및 2 차 상호 작용 용어를 제공합니다. y ~ var1 + var2 + ...+var15 + var1:var2 + var1:var3 + var1:var4...and so on
y ~ var1 + var2 + ...+var15 + I(var1^2) + I(var2^2) + I(var3^2)...+I(var15^2)
: 여기서 I(var^2)
데이터 프레임에서 한 변수의 2 차 다항식을 나타냅니다.
y ~ poly(var1, degree = 2) + poly(var2, degree = 2)+...poly(var15, degree = 2)
또는
y ~ poly(var1, var2, var3, ....var15, degree = 2)
는 위의 표현식과 같습니다.
poly(var1, degree = 2)
는 var1 + I(var1^2)
.
3 차 다항식을 얻으려면 poly()
에서 degree = 3
을 사용하십시오.
poly
대 I(var, 2)
를 사용할 때주의해야 할 점은 모델을 피팅 한 후에 각각 다른 계수를 생성하지만 피팅 된 값은 동일한 모델의 다른 매개 변수화를 나타내므로 동일합니다. 사용을 권장합니다 I(var, 2)
를 통해 poly()
에서 볼 수있는 요약 효과 피하기 위해 poly()
.
요약하면 선형, 2 차 및 2 차 상호 작용 용어를 얻으려면 다음과 같은 표현식을 사용하게됩니다.
y ~ .^2 + I(var1^2) + I(var2^2)+...I(var15^2)
4 가지 변수에 대한 데모 :
old <- reformulate( 'y ~ x1+x2+x3+x4' )
new <- reformulate( " y ~ .^2 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) ")
tmp <- .Call(stats:::C_updateform, old, new)
terms.formula(tmp, simplify = TRUE )
# ~y ~ x1 + x2 + x3 + x4 + I(x1^2) + I(x2^2) + I(x3^2) + I(x4^2) +
# x1:x2 + x1:x3 + x1:x4 + x2:x3 + x2:x4 + x3:x4
# attr(,"variables")
# list(~y, x1, x2, x3, x4, I(x1^2), I(x2^2), I(x3^2), I(x4^2))
# attr(,"factors")
# x1 x2 x3 x4 I(x1^2) I(x2^2) I(x3^2) I(x4^2) x1:x2 x1:x3 x1:x4 x2:x3 x2:x4 x3:x4
# ~y 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# x1 1 0 0 0 0 0 0 0 1 1 1 0 0 0
# x2 0 1 0 0 0 0 0 0 1 0 0 1 1 0
# x3 0 0 1 0 0 0 0 0 0 1 0 1 0 1
# x4 0 0 0 1 0 0 0 0 0 0 1 0 1 1
# I(x1^2) 0 0 0 0 1 0 0 0 0 0 0 0 0 0
# I(x2^2) 0 0 0 0 0 1 0 0 0 0 0 0 0 0
# I(x3^2) 0 0 0 0 0 0 1 0 0 0 0 0 0 0
# I(x4^2) 0 0 0 0 0 0 0 1 0 0 0 0 0 0
# attr(,"term.labels")
# [1] "x1" "x2" "x3" "x4" "I(x1^2)" "I(x2^2)" "I(x3^2)" "I(x4^2)"
# [9] "x1:x2" "x1:x3" "x1:x4" "x2:x3" "x2:x4" "x3:x4"
# attr(,"order")
# [1] 1 1 1 1 1 1 1 1 2 2 2 2 2 2
# attr(,"intercept")
# [1] 1
# attr(,"response")
# [1] 1
# attr(,".Environment")
# <environment: R_GlobalEnv>