그리고 예측 :
그럼 우리가 가진 모델에 딱 맞는
X.predict <- data.frame(x1=runif(10), x2=runif(10), x1x2=runif(10)
당신이 상호 작용에 관여 범주 변수가 있다면 ...
범주 형 변수와 관련된 상호 작용이있을 때 모델은 참조 레벨에 속하는 것과 관련하여 각 레벨에 속하는 효과.(
절편을 : 그래서 예를 들면 우리는 기술, 하나 개의 연속 예측 (x1
)와 하나 개의 범주 예측 (수준 a
, b
와 x2
, 및 c
), 다음 모델 y ~ x1 * x2
여섯 개 계수를 추정 할있는 경우 즉, x1
이 0이고 관측치가 x2
의 참조 레벨에 속할 때, y
의 예측치);
관찰이 기준 레벨 x2
(즉, 참조 레벨 x2
에 대한 기울기)에 속할 때 변화하는 효과는 x1
이다.
제 2 레벨에 속하는 효과 (즉, 기준 레벨에 속하는 것에 비해 제 2 레벨에 속하는 것에 의한 절편의 변화);
제 3 레벨에 속하는 효과 (즉, 기준 레벨에 속하는 것에 비해 제 3 레벨에 속하는 것에 의한 절편의 변화);
기준 레벨에 속하는 것에 비해, 제 2 레벨에 속하는 것으로 인한 x1
의 효과 변화 (즉, 기울기 변화);
기준 레벨에 속하는 것에 비해, 제 3 레벨에 속하는 것으로 인한 x1
의 효과 변화 (즉, 기울기 변화).
당신이 적합하고 상호 작용을 설명/위해 미리 계산 된 데이터와 모델을 예측하려는 경우, 당신은 열이 포함 된 dataframe 만들 수 있습니다 x1
을; x2b
(이진, 관찰이 수준 b
에 속하는지 여부를 나타냄); x2c
(이진, 관측치가 레벨 c
에 속하는지 여부를 나타냄); x1x2b
(x1
및 x2b
의 생성물); 및 x1x2c
(x1
및 x2c
의 제품).
이 작업을 수행하는 빠른 방법은 model.matrix
함께 :
set.seed(1)
n <- 1000
d <- data.frame(x1=runif(n), x2=sample(letters[1:3], n, replace=TRUE))
head(d)
# x1 x2
# 1 0.2655087 b
# 2 0.3721239 c
# 3 0.5728534 b
# 4 0.9082078 c
# 5 0.2016819 a
# 6 0.8983897 a
X <- model.matrix(~x1*x2, d)
head(X)
# (Intercept) x1 x2b x2c x1:x2b x1:x2c
# 1 1 0.2655087 1 0 0.2655087 0.0000000
# 2 1 0.3721239 0 1 0.0000000 0.3721239
# 3 1 0.5728534 1 0 0.5728534 0.0000000
# 4 1 0.9082078 0 1 0.0000000 0.9082078
# 5 1 0.2016819 0 0 0.0000000 0.0000000
# 6 1 0.8983897 0 0 0.0000000 0.0000000
b <- rnorm(6) # coefficients
y <- X %*% b + rnorm(n, sd=0.1)
당신은 한 이후 새로운 데이터 모델을 보내고 때 predict
일관된 이름을 사용하여, 당신이 원하는대로에 X
의 열 이름을 바꿀 수 있습니다.
이제 모델에 적합합니다. 여기에서는 변수 값 (Intercept)
이 이미 X
에 있고 계산 된 계수를 갖기 때문에 lm
은 절편 (-1
)을 계산하지 않는다고 말합니다.
(M <- lm(y ~ . - 1, as.data.frame(X)))
# Call:
# lm(formula = y ~ . - 1, data = as.data.frame(X))
#
# Coefficients:
# `(Intercept)` x1 x2b x2c `x1:x2b` `x1:x2c`
# 1.14389 1.09168 -0.88879 0.20405 0.09085 -1.63769
에 예측하고, 예측을 수행하는 몇 가지 새로운 데이터를 생성합니다 :
d.predict <- expand.grid(x1=seq(0, 1, 0.1), x2=letters[1:3])
X.predict <- model.matrix(~x1*x2, d.predict)
y.predict <- predict(M, as.data.frame(X.predict))
을''이름에 사용할 수 있습니다, 예를 들어, 우리는 또한 데이터
as.data.frame(X[, -1])
에 장착하여이 작업을 할 수 있었다 'd <- data.frame ('a : b'= 1 : 3, check.names = FALSE)'. – jbaumsahh 감사합니다. 답장을 위해 시간을내어 주셔서 감사합니다. – JSB89