2016-12-09 2 views
0

저는 새로운 R 사용자입니다. R에서 'vglm'함수를 사용하여 다항식 회귀 (예 : 2 개 이상의 클래스가있는 응답 변수가있는 회귀 회귀 분석)를 사용하고 있습니다. 제 데이터 세트에는 11 개의 연속 예측 변수가 있으며 1 응답 변수는 3 개의 클래스로 분류됩니다.R의 다항식 회귀에 대한 최상의 하위 집합을 얻는 방법은 무엇입니까?

회귀 분석에 가장 적합한 하위 집합을 얻고 싶지만 어떻게 해야할지 잘 모릅니다. 이 기능이 있습니까 아니면 수동으로해야합니다. 선형 함수가 적합하지 않기 때문에.

나는 bestglm 기능을 시도했지만 그 결과는 다항 회귀에 적합하지 않은 것 같습니다.

나는 또한 올가미를 기준으로 한 축소 방법 인 glmnet을 시도했습니다. 그것은 모델의 모든 변수를 선택합니다. 그러나 다른 한편으로는 vglm을 사용한 다항식 회귀는 일부 변수를 중요하지 않은 것으로보고합니다.

나는이 웹 사이트를 포함하여 인터넷에서 많은 것을 검색했지만 좋은 답변을 찾지 못했습니다. 그래서 나는 이것에 대해 정말로 도움이 필요하기 때문에 여기서 묻고 있습니다. 감사

+0

대부분의 모델링 함수가 다항 모델을 처리 할 수 ​​있지만 R을 처음 사용하는 경우 데이터가 어셈블되는 방식이나 모델 사양/해석에 문제가있을 수 있습니다. 예를 들어,'glmnet'은 가장 좋은 모델이 모든 요인이라고 말할 수 있지만 합리적인 람다를 사용하여 결과를 올바르게 해석하지 않을 가능성이 더 큽니다. 모델 선택에서 이해해야 할 것이 많고 많은 함정이 있기 때문에 통계학 자와 이야기해야합니다. R 코드가 맞더라도 모델 선택은 초보자를위한 통계가 아닙니다. – David

답변

0
당신이 원하는 것을 얻을 관련된 몇 가지 기본적인 단계에있다

:

  • 모델 (
  • 이 기준을 사용하여 예측의 모든 잠재적 인 조합을 실행하는 모든 잠재적 인 예측 인자 조합의 모델 그리드를 정의 또는 여러 기준 집합)을 사용하여 최상의 예측 집합을 선택할 수 있습니다.

모델 그리드는 다음 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 행 이후에 모델 결과가 저하되기 시작합니다. 소득과 저축이 소비의 핵심 동력 인 것처럼 보입니다. 이 두 변수가 예측 변수에서 제외되면 모델 성능이 크게 떨어집니다.

여기에 표시된 결과가 참조 된 책의 결과와 일치하므로 사용자 지정 함수의 성능은 견고합니다.

좋은 하루 되십시오.

관련 문제