작성자: admin 작성일시: 2016-10-03 16:21:58 조회수: 725 다운로드: 95
카테고리: R 태그목록:

R 모형 문자열

R 에서는 선형 모형 formualtion을 위한 문자열 문법이 있다.

기본적으로는

종속변수 ~ 독립변수

와 같은 형태이지만 독립변수가 복수일 때는 다음과 같은 추가적인 규칙이 있다.

기호 설명
~ 종속 - 독립 관계
+ 설명 변수 추가
- 설명 변수 제거
1, 0 intercept. (제거시 사용)
. 모든 설명 변수 사용
: interaction (곱)
* a*b = a + b + a:b
/ a/b = a + a:b

model.matrix 명령을 사용하면 실제 만들어지는 독립변수 행렬을 확인할 수 있다.

In:
x1 <- c(1, 2, 3, 4, 5)
x2 <- c(11, 12, 13, 14, 15)
df <- data.frame(x1, x2)
df
x1x2
1 11
2 12
3 13
4 14
5 15
In:
model.matrix(~ x1, df)
(Intercept)x1
111
212
313
414
515
In:
model.matrix(~ x1 + x2, df)
(Intercept)x1x2
11 1 11
21 2 12
31 3 13
41 4 14
51 5 15
In:
model.matrix(~ x1 + 0, df)
x1
11
22
33
44
55
In:
model.matrix(~ x1 - 1, df)
x1
11
22
33
44
55
In:
model.matrix(~ ., df)
(Intercept)x1x2
11 1 11
21 2 12
31 3 13
41 4 14
51 5 15
In:
model.matrix(~ x1:x2, df)
(Intercept)x1:x2
11 11
21 24
31 39
41 56
51 75
In:
model.matrix(~ x1*x2, df)
(Intercept)x1x2x1:x2
11 1 1111
21 2 1224
31 3 1339
41 4 1456
51 5 1575
In:
model.matrix(~ x1/x2, df)
(Intercept)x1x1:x2
11 1 11
21 2 24
31 3 39
41 4 56
51 5 75

변수 보호 I()

  • 다른 formula 기호로부터 보호
In:
model.matrix(~ I(x1 + x2), df)
(Intercept)I(x1 + x2)
11 12
21 14
31 16
41 18
51 20
In:
model.matrix(~ I(x1^2), df)
(Intercept)I(x1^2)
11 1
21 4
31 9
41 16
51 25

다항 선형 회귀

In:
model.matrix(~ x1 + I(x1**2) + I(x1**3) + I(x1**4), df)
(Intercept)x1I(x1^2)I(x1^3)I(x1^4)
11 1 1 1 1
21 2 4 8 16
31 3 9 27 81
41 4 16 64256
51 5 25 125625

변환(Transform)

  • 함수 이름 사용 가능
In:
model.matrix(~ abs(x1) + sin(log(x2)), df)
(Intercept)abs(x1)sin(log(x2))
11 1 0.6770137
21 2 0.6104955
31 3 0.5452131
41 4 0.4816490
51 5 0.4200881
In:
doubleit <- function(x) {
    return(2 * x)
}

model.matrix(~ doubleit(x1), df)
(Intercept)doubleit(x1)
11 2
21 4
31 6
41 8
51 10
In:
model.matrix(~ scale(x1) + scale(x2), df)
(Intercept)scale(x1)scale(x2)
11 -1.2649111-1.2649111
21 -0.6324555-0.6324555
31 0.0000000 0.0000000
41 0.6324555 0.6324555
51 1.2649111 1.2649111

카테고리 변수

In:
x1 <- c("a", "b", "c", "a", "b")
x2 <- c(1, 0, 2, 1, 0)
df <- data.frame(x1, x2)
df
x1x2
a1
b0
c2
a1
b0
In:
model.matrix(~ C(x1), df)
(Intercept)C(x1)bC(x1)c
1100
2110
3101
4100
5110
In:
model.matrix(~ factor(x2), df)
(Intercept)factor(x2)1factor(x2)2
1110
2100
3101
4110
5100

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!