수색…


수식의 기초

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 또는 -1formula 에 포함하여 제외되거나 강제 될 수 있습니다.

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))

통계적으로 볼 때 주 효과가없는 모델에서 상호 작용을하지 않는 것이 일반적이므로 formulaa + 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 ).

  1. 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 을 사용하십시오.

polyI(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>


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow