당신이 원하는 것을 얻을 관련된 몇 가지 기본적인 단계에있다
:
- 는
- 모델 (
- 이 기준을 사용하여 예측의 모든 잠재적 인 조합을 실행하는 모든 잠재적 인 예측 인자 조합의 모델 그리드를 정의 또는 여러 기준 집합)을 사용하여 최상의 예측 집합을 선택할 수 있습니다.
모델 그리드는 다음 f 조동 :
예를 들어 4 개의 변수를 사용하면 n^2 또는 16 개의 조합이됩니다.
model.grid(4)
Var1 Var2 Var3 Var4
1 0 0 0 0
2 1 0 0 0
3 0 1 0 0
4 1 1 0 0
5 0 0 1 0
6 1 0 1 0
7 0 1 1 0
8 1 1 1 0
9 0 0 0 1
10 1 0 0 1
11 0 1 0 1
12 1 1 0 1
13 0 0 1 1
14 1 0 1 1
15 0 1 1 1
16 1 1 1 1
내가 그 아래에 또 다른 기능은 모든 모델 조합을 실행 제공 : 1의 값은 모델의 예측이 켜져 있고 0의 값은 예측이 꺼져 있음을 나타냅니다 나타냅니다. 또한 5 가지 기준을 사용하여 서로 다른 모델에 맞는 순위가 매겨진 정렬 된 데이터 프레임 테이블을 생성합니다. 테이블의 맨 위에있는 예측 콤보는 학습 데이터 주어진 "최고"의 부분 집합이며, 예측이 제공 :
# function for best subset regression
# ranks predictor combos using 5 selection criteria
best.subset <- function(y, x.vars, data){
# y character string and name of dependent variable
# xvars character vector with names of predictors
# data training data with y and xvar observations
require(dplyr)
reguire(purrr)
require(magrittr)
require(forecast)
length(x.vars) %>%
model.grid %>%
apply(1, function(x) which(x > 0, arr.ind = TRUE)) %>%
map(function(x) x.vars[x]) %>%
.[2:dim(model.grid(length(x.vars)))[1]] %>%
map(function(x) tslm(paste0(y, " ~ ", paste(x, collapse = "+")), data = data)) %>%
map(function(x) CV(x)) %>%
do.call(rbind, .) %>%
cbind(model.grid(length(x.vars))[-1, ], .) %>%
arrange(., AICc)
}
당신은 TSLM() 함수는 지정된 볼 수 있습니다 ... 다른 사람은 사용할 수 vglm() 등등. 원하는 모델 함수를 바꾸면됩니다.
이 기능을 사용하려면 4 개의 패키지가 설치되어 있어야합니다. 이 함수는 단순히 데이터를 구성하고 map() 함수를 사용하여 모든 모델 조합을 반복합니다 (예 : for 루프). 그러면 예측 패키지는 예측 지표 하위 집합의 순위를 매기는 5 가지 지표 또는 선택 기준이있는 교차 유효성 검사 함수 CV()를 제공합니다.
다음은 "예측 원리 및 실습"책의 응용 사례입니다. 또한이 예제는 fpp2 패키지에있는 책의 데이터를 사용합니다.
library(fpp2)
# test the function
y <- "Consumption"
x.vars <- c("Income", "Production", "Unemployment", "Savings")
best.subset(y, x.vars, uschange)
결과 테이블은 AICc 메트릭에 따라 정렬됩니다.가장 좋은 부분 집합 메트릭 (CV, AIC, AICC 및 BIC)의 값을 최소화 조정 된 R 제곱 극대화하고 목록의 상단에 발견된다 :
Var1 Var2 Var3 Var4 CV AIC AICc BIC AdjR2
1 1 1 1 1 0.1163 -409.3 -408.8 -389.9 0.74859
2 1 0 1 1 0.1160 -408.1 -407.8 -391.9 0.74564
3 1 1 0 1 0.1179 -407.5 -407.1 -391.3 0.74478
4 1 0 0 1 0.1287 -388.7 -388.5 -375.8 0.71640
5 1 1 1 0 0.2777 -243.2 -242.8 -227.0 0.38554
6 1 0 1 0 0.2831 -237.9 -237.7 -225.0 0.36477
7 1 1 0 0 0.2886 -236.1 -235.9 -223.2 0.35862
8 0 1 1 1 0.2927 -234.4 -234.0 -218.2 0.35597
9 0 1 0 1 0.3002 -228.9 -228.7 -216.0 0.33350
10 0 1 1 0 0.3028 -226.3 -226.1 -213.4 0.32401
11 0 0 1 1 0.3058 -224.6 -224.4 -211.7 0.31775
12 0 1 0 0 0.3137 -219.6 -219.5 -209.9 0.29576
13 0 0 1 0 0.3138 -217.7 -217.5 -208.0 0.28838
14 1 0 0 0 0.3722 -185.4 -185.3 -175.7 0.15448
15 0 0 0 1 0.4138 -164.1 -164.0 -154.4 0.05246
만 15 예측 조합이에 프로파일된다 모든 예측 변수가 해제 된 모델 조합이 삭제 된 이후로 테이블을 보면, 가장 좋은 부분 집합은 모든 예측자를 켠 부분 집합입니다. 그러나 두 번째 행은 4 개의 변수 중 3 개만 사용하며 성능 결과는 거의 같습니다. 또한 4 행 이후에 모델 결과가 저하되기 시작합니다. 소득과 저축이 소비의 핵심 동력 인 것처럼 보입니다. 이 두 변수가 예측 변수에서 제외되면 모델 성능이 크게 떨어집니다.
여기에 표시된 결과가 참조 된 책의 결과와 일치하므로 사용자 지정 함수의 성능은 견고합니다.
좋은 하루 되십시오.
대부분의 모델링 함수가 다항 모델을 처리 할 수 있지만 R을 처음 사용하는 경우 데이터가 어셈블되는 방식이나 모델 사양/해석에 문제가있을 수 있습니다. 예를 들어,'glmnet'은 가장 좋은 모델이 모든 요인이라고 말할 수 있지만 합리적인 람다를 사용하여 결과를 올바르게 해석하지 않을 가능성이 더 큽니다. 모델 선택에서 이해해야 할 것이 많고 많은 함정이 있기 때문에 통계학 자와 이야기해야합니다. R 코드가 맞더라도 모델 선택은 초보자를위한 통계가 아닙니다. – David