로지스틱 회귀 모델에 적합한 방법으로 예측 변수를 줄이는 방법


9

따라서 현재 모델링 상황에 대한 일부 책 (또는 그 일부)을 읽었습니다 (F. Harrell의 "회귀 모델링 전략"). 현재 상황은 이진 반응 데이터를 기반으로 로지스틱 모델을 수행해야하기 때문입니다. 내 데이터 세트에 연속, 범주 및 이진 데이터 (예측 자)가 있습니다. 기본적으로 저는 현재 약 100 개의 예측 변수를 가지고 있으며, 이는 좋은 모형을 만들기에는 너무 많은 것입니다. 또한 이러한 예측 변수 중 많은 부분은 약간 다르지만 종종 동일한 메트릭을 기반으로하기 때문에 서로 관련이 있습니다.

어쨌든, 내가 읽은 것은 일 변량 회귀 및 단계별 기술을 사용하여 예측 변수의 양을 줄이기 위해 할 수있는 최악의 일입니다. LASSO 기술은 꽤 괜찮다고 생각하지만 (정확히 이해하면) 100 명의 예측 자에서 사용할 수 없으며 좋은 결과가 올 것이라고 생각합니다.

그래서 내 옵션은 무엇입니까? 실제로 앉아서 모든 감독관과 현명한 사람들과 대화하고 최고 예측자가 가장 잘 예측할 수있는 5 가지 (우리가 틀렸을 수도 있음) 또는 어떤 접근 방식을 생각해야합니까? 대신 고려?

그리고 네,이 주제가 온라인과 책에서 많이 논의되고 있음을 알고 있습니다. 그러나이 모델링 분야에서 새로운 사람이 될 때 때로는 다소 압도적 인 것처럼 보입니다.

편집하다:

우선, 내 샘플 크기는 +1000 명의 환자이며 (내 분야에서 많이 있음) 70-170 사이의 긍정적 인 반응이있는 사람들 (즉 170 건의 응답 대 약 900 개의 응답이없는 경우) . 기본적으로 아이디어는 방사선 치료 후 독성을 예측하는 것입니다. 예상되는 이진 반응 데이터 (예 : 독성, 데이터가 있거나 (1)가 없거나 (0)가 아님) 몇 가지 유형의 메트릭이 있습니다. 나이, 사용한 약물, 장기 및 목표량, 당뇨병 등과 같은 일부 지표는 환자에 따라 다르며, 목표에 대한 시뮬레이트 된 치료 필드를 기반으로 한 일부 치료 관련 지표가 있습니다. 그로부터 나는 대부분의 독성이 방사선 량 (이도 스)과 밀접한 관련이 있기 때문에 종종 여러 분야의 관련성있는 예측 변수를 검색 할 수 있습니다. 예를 들어, 폐 종양을 치료하면 약간의 복용량으로 심장을 때릴 위험이 있습니다. 그런 다음 심장 용량의 x- 양이 x- 용량을 얼마나 받는지 계산할 수 있습니다 (예 : " (심지어 과거의 실험은 물론 시도하고 싶은 것이지만, 내가하고 싶은 것이지만) 시작하기 위해 하나를 고르십시오. 왜냐하면 실제로 심장 독성 사이에 어느 정도의 상관 관계가 있는지 "정확하게"알아야합니다. 그리고 용적 선량 (예를 들어, 동일한 전략이 적용되는 다른 유사한 측정법이 있습니다). 그래서, 그것은 내 데이터 세트의 모양과 거의 같습니다. 일부 다른 측정 항목 및 다소 유사한 일부 측정 항목 (심지어 과거의 실험은 물론 시도하고 싶은 것이지만, 내가하고 싶은 것이지만) 시작하기 위해 하나를 고르십시오. 왜냐하면 실제로 심장 독성 사이에 어느 정도의 상관 관계가 있는지 "정확하게"알아야합니다. 그리고 용적 선량 (예를 들어, 동일한 전략이 적용되는 다른 유사한 측정법이 있습니다). 그래서, 그것은 내 데이터 세트의 모양과 거의 같습니다. 일부 다른 측정 항목 및 다소 유사한 일부 측정 항목 내 데이터 세트의 모양이 거의 비슷합니다. 일부 다른 측정 항목 및 다소 유사한 일부 측정 항목 내 데이터 세트의 모양이 거의 비슷합니다. 일부 다른 측정 항목 및 다소 유사한 일부 측정 항목

내가하고 싶은 것은 예측 모델을 만들어 어떤 환자가 어떤 종류의 독성에 걸릴 위험이 있는지 예측할 수있게하는 것입니다. 그리고 응답 데이터가 이진이기 때문에 필자의 주요 아이디어는 물론 로지스틱 회귀 모델을 사용하는 것이 었습니다. 적어도 그것은 다른 사람들이 내 분야에서 한 일입니다. 그러나이 논문이 이미 완성 된 많은 논문을 검토 할 때 일부 논문은 잘못된 것 같습니다. 많은 사람들이 단 변량 회귀 분석을 사용하여 예측 변수를 선택하고이를 다변량 분석 (실수하지 않은 경우 권장되는 방법)에 사용하며, 예측 변수의 양을 줄이기 위해 단계별 기술을 사용합니다. 물론 나쁘지는 않습니다. 많은 사람들이 LASSO, PCA, 교차 검증, 부트 스트래핑 등을 사용하지만, 내가 본 것은

기능 선택과 관련하여 아마도 내가 지금 여기에있을 것입니다. 내 모델에 사용할 올바른 예측 변수를 어떻게 선택 / 찾기합니까? 나는이 단 변량 / 단계별 접근 방식을 시도했지만, 생각할 때마다 "왜 틀렸을까요?" 그러나 적어도 결국에는 올바른 방법으로 수행 한 "좋은 모델"이 잘못된 방법으로 수행 된 "나쁜 모델"에 대해 어떻게 진행되는지를 보여주는 좋은 방법 일 수 있습니다. 따라서 지금은 다소 잘못된 방법으로 할 수 있습니다. 도움이 필요한 것은 올바른 방법으로 방향을 잡는 것입니다.

편집 해 주셔서 죄송합니다. 너무 깁니다.

편집 2 : 내 데이터가 어떻게 보이는지에 대한 간단한 예 :

'data.frame':   1151 obs. of  100 variables:
 $ Toxicity              : Factor w/ 2 levels "0","1": 2 1 1 1 1 1 1 1 1 1 ...
 $ Age                   : num  71.9 64 52.1 65.1 63.2 ...
 $ Diabetes              : Factor w/ 2 levels "n","y": 1 1 1 1 1 1 1 1 1 1 ...
 $ Risk.Category         : Ord.factor w/ 3 levels "LOW"<"INTERMEDIATE"<..: 1 1 1 1 2 1 1 1 1 3 ...
 $ Organ.Volume.CC       : num  136.1 56.7 66 136.6 72.8 ...
 $ Target.Volume.CC      : num  102.7 44.2 58.8 39.1 56.3 ...
 $ D1perc                : num  7961 7718 7865 7986 7890 ...
 $ D1.5CC                : num  7948 7460 7795 7983 7800 ...
 $ D1CC                  : num  7996 7614 7833 7997 7862 ...
 $ D2perc                : num  7854 7570 7810 7944 7806 ...
 $ D2.5CC                : num  7873 7174 7729 7952 7604 ...
 $ D2CC                  : num  7915 7313 7757 7969 7715 ...
 $ D3perc                : num  7737 7379 7758 7884 7671 ...
 $ D3.5CC                : num  7787 6765 7613 7913 7325 ...
 $ D3CC                  : num  7827 6953 7675 7934 7480 ...
 $ D4perc                : num  7595 7218 7715 7798 7500 ...
 $ D5perc                : num  7428 7030 7638 7676 7257 ...
 $ DMEAN                 : num  1473 1372 1580 1383 1192 ...
 $ V2000CGY              : num  24.8 23.7 25.9 22.3 19.3 ...
 $ V2000CGY_CC           : num  33.7 13.4 17.1 30.4 14 ...
 $ V2500CGY              : num  22.5 21.5 24 20.6 17.5 ...
 $ V2500CGY_CC           : num  30.7 12.2 15.9 28.2 12.7 ...
 $ V3000CGY              : num  20.6 19.6 22.4 19.1 15.9 ...
 $ V3000CGY_CC           : num  28.1 11.1 14.8 26.2 11.6 ...
 $ V3500CGY              : num  18.9 17.8 20.8 17.8 14.6 ...
 $ V3500CGY_CC           : num  25.7 10.1 13.7 24.3 10.6 ...
 $ V3900CGY              : num  17.5 16.5 19.6 16.7 13.6 ...
 $ V3900CGY_CC           : num  23.76 9.36 12.96 22.85 9.91 ...
 $ V4500CGY              : num  15.5 14.4 17.8 15.2 12.2 ...
 $ V4500CGY_CC           : num  21.12 8.18 11.76 20.82 8.88 ...
 $ V5000CGY              : num  13.9 12.8 16.4 14 11 ...
 $ V5000CGY_CC           : num  18.91 7.25 10.79 19.09 8.03 ...
 $ V5500CGY              : num  12.23 11.14 14.84 12.69 9.85 ...
 $ V5500CGY_CC           : num  16.65 6.31 9.79 17.33 7.17 ...
 $ V6000CGY              : num  10.56 9.4 13.19 11.34 8.68 ...
 $ V6000CGY_CC           : num  14.37 5.33 8.7 15.49 6.32 ...
 $ V6500CGY              : num  8.79 7.32 11.35 9.89 7.44 ...
 $ V6500CGY_CC           : num  11.96 4.15 7.49 13.51 5.42 ...
 $ V7000CGY              : num  6.76 5.07 9.25 8.27 5.86 ...
 $ V7000CGY_CC           : num  9.21 2.87 6.1 11.3 4.26 ...
 $ V7500CGY              : num  4.61 2.37 6.22 6.13 4 ...
 $ V7500CGY_CC           : num  6.27 1.34 4.11 8.38 2.91 ...
 $ V8000CGY              : num  0.7114 0.1521 0.0348 0.6731 0.1527 ...
 $ V8000CGY_CC           : num  0.9682 0.0863 0.023 0.9194 0.1112 ...
 $ V8200CGY              : num  0.087 0 0 0 0 ...
 $ V8200CGY_CC           : num  0.118 0 0 0 0 ...
 $ V8500CGY              : num  0 0 0 0 0 0 0 0 0 0 ...
 $ V8500CGY_CC           : num  0 0 0 0 0 0 0 0 0 0 ...
 $ n_0.02                : num  7443 7240 7371 7467 7350 ...
 $ n_0.03                : num  7196 6976 7168 7253 7112 ...
 $ n_0.04                : num  6977 6747 6983 7055 6895 ...
 $ n_0.05                : num  6777 6542 6811 6871 6693 ...
 $ n_0.06                : num  6592 6354 6649 6696 6503 ...
 $ n_0.07                : num  6419 6180 6496 6531 6325 ...
 $ n_0.08                : num  6255 6016 6350 6374 6155 ...
 $ n_0.09                : num  6100 5863 6211 6224 5994 ...
 $ n_0.1                 : num  5953 5717 6078 6080 5840 ...
 $ n_0.11                : num  5813 5579 5950 5942 5692 ...
 $ n_0.12                : num  5679 5447 5828 5809 5551 ...
 $ n_0.13                : num  5551 5321 5709 5681 5416 ...
 $ n_0.14                : num  5428 5201 5595 5558 5285 ...
 $ n_0.15                : num  5310 5086 5485 5439 5160 ...
 $ n_0.16                : num  5197 4975 5378 5324 5039 ...
 $ n_0.17                : num  5088 4868 5275 5213 4923 ...
 $ n_0.18                : num  4982 4765 5176 5106 4811 ...
 $ n_0.19                : num  4881 4666 5079 5002 4702 ...
 $ n_0.2                 : num  4783 4571 4985 4901 4597 ...
 $ n_0.21                : num  4688 4478 4894 4803 4496 ...
 $ n_0.22                : num  4596 4389 4806 4708 4398 ...
 $ n_0.23                : num  4507 4302 4720 4616 4303 ...
 $ n_0.24                : num  4421 4219 4636 4527 4210 ...
 $ n_0.25                : num  4337 4138 4555 4440 4121 ...
 $ n_0.26                : num  4256 4059 4476 4355 4035 ...
 $ n_0.27                : num  4178 3983 4398 4273 3951 ...
 $ n_0.28                : num  4102 3909 4323 4193 3869 ...
 $ n_0.29                : num  4027 3837 4250 4115 3790 ...
 $ n_0.3                 : num  3955 3767 4179 4039 3713 ...
 $ n_0.31                : num  3885 3699 4109 3966 3639 ...
 $ n_0.32                : num  3817 3633 4041 3894 3566 ...
 $ n_0.33                : num  3751 3569 3975 3824 3496 ...
 $ n_0.34                : num  3686 3506 3911 3755 3427 ...
 $ n_0.35                : num  3623 3445 3847 3689 3361 ...
 $ n_0.36                : num  3562 3386 3786 3624 3296 ...
 $ n_0.37                : num  3502 3328 3725 3560 3233 ...
 $ n_0.38                : num  3444 3272 3666 3498 3171 ...
 $ n_0.39                : num  3387 3217 3609 3438 3111 ...
 $ n_0.4                 : num  3332 3163 3553 3379 3053 ...
 $ n_0.41                : num  3278 3111 3498 3321 2996 ...
 $ n_0.42                : num  3225 3060 3444 3265 2941 ...
 $ n_0.43                : num  3173 3010 3391 3210 2887 ...
 $ n_0.44                : num  3123 2961 3339 3156 2834 ...
 $ n_0.45                : num  3074 2914 3289 3103 2783 ...
 $ n_0.46                : num  3026 2867 3239 3052 2733 ...
 $ n_0.47                : num  2979 2822 3191 3002 2684 ...
 $ n_0.48                : num  2933 2778 3144 2953 2637 ...
 $ n_0.49                : num  2889 2734 3097 2905 2590 ...

그리고 table(data$Toxicity)출력을 실행 하면 다음과 같습니다.

> table(data$Toxicity)
   0    1 
1088   63 

다시 한 번, 이것은 한 가지 유형의 독성에 해당됩니다. 나는 다른 3 명도있다.


1
무엇을 목표로하고 있습니까? 예측이나 추론 또는 다른 것?
Stephan Kolassa

이것을 기능 선택 이라고 합니다 . 회귀를 사용해야하는 경우 범주 형 피처는 원샷으로 표시되지만 트리 메서드의 경우 그대로 사용할 수 있습니다. 가장 예측 가능한 n-way 상호 작용 또는 연관 용어를 찾아서 사용할 수도 있습니다.
smci

"정말 앉아서 앉아서 사람들과 대화하고 최고 예측 자들에 대해 생각하고 추론해야합니까?" 아니, 직관은 시작점이지만, 기능 선택 방법이있는 이유입니다. 많은 실험 결과가 직관을 능가합니다.
smci

1
@smci 불분명해서 죄송합니다. 내 분야 (방사선 종양학)에서 우리는 치료 계획을 세웁니다. 이것은 기본적으로 대상 주위에 방사선 / 복용량이 어떻게 분포되어 있는지에 대한 3D 표현입니다. 불행히도, 이것은 최소한 소량의 건강한 조직에 부딪치지 않고는 할 수 없습니다. 예를 들어,이 3D 맵에서, 예를 들어, 부피가 x- 방사선 량 / 선량을받는 양에 대한 정보를 얻을 수 있습니다. 그러나 당신이 상상할 수 있듯이, 나는 "이 구조 체적의 1 %가 얼마나 많은 방사선을 받는가"와 같은 단계에서 "요구"할 수 있고, 그런 다음 2 %, 3 %가 될 수 있습니다. 원칙적으로 값은 다소 비슷합니다.
Denver Dang

1
@smci, 예측이 영업 목표라면 상관 관계는 중요하지 않습니다. 변수 사이의 높은 상관 관계는 모델에 포함 된 변수를 해석 할 때 실제로 큰 관심사입니다.
통계 학생

답변:


4

푸시 기능 선택에 대한 답변 중 일부는 기본이 아닙니다.

올가미 또는 더 나은 탄성 그물은 기능 선택을 할 것입니다하지만 위의 지적 밖으로 꽤 "선택"기능 세트의 변동성에 실망 될 것이다. 나는 당신의 상황에서 유일한 진정한 희망은 내 책에서 강조하는 것처럼 데이터 축소, 즉 감독되지 않은 학습이라고 생각합니다. 데이터 축소는 해석 성과 안정성을 향상시킵니다. 희소 주체 구성 요소 또는 가변 클러스터링 다음에 클러스터의 일반 주체 구성 요소를 권장합니다.

데이터 세트의 정보 내용이 기능 선택 알고리즘이 신뢰할 수 없을 정도로 너무 낮습니다.


우선, 의견을 보내 주셔서 감사합니다. 둘째, 내가 실수하지 않으면 비지도 학습은 반응 변수의 특정 반응 (예 : 1 또는 0)을 사용하지 않거나 가지고 있지 않고 컴퓨터를 "추측하는 것"입니다 "분포를 나누는 방법. 그러나 로지스틱 회귀 (및 선형)는 내가 아는 한 감독됩니다. 따라서 그 방법론을 포기하는 것이 좋습니다? 한편으로는 아이디어가 마음에 들지만 다른 한편으로는 로지스틱 및 프로 빗 회귀 분석은 내 분야의 거의 모든 모델링 용지 (내와 비슷한 데이터)가 지금까지 수행 한 방식입니다.
Denver Dang

그래서 내가 여기서 사지에 나가지 않겠습니까, 아니면 다른 사람들이 영원히 "잘못"하고 있다고 가정해야합니까?
Denver Dang

3
모든 사람이 아니라 대부분의 사람들이 분명히 잘못하고 있습니다. 이것은 회귀 모델링 전략 을 작성하는 주요 동기였습니다 . 데이터 축소의 목표는 로지스틱 회귀가 요구하는 감독 학습의 양을 줄이는 것입니다. 예를 들어 100 개의 후보 기능을 효과적으로 5 개의 클러스터 점수로 줄인 다음 5 개의 매개 변수 + 절편 만 추정해야합니다.
Frank Harrell

2
이 경우 (응답에 추가 된) 다양한 계수 모델에 대해 어떻게 생각하십니까?
벤 Bolker

@FrankHarrell 다소 흥미있는 것 같습니다. 그러나 묻는 것에 대해 유감스럽게 생각합니다. 감독하는 학습이 왜 암묵적으로 보이는 것처럼 나쁜지, 아니면 적어도 어느 정도 나쁜지는?
Denver Dang

8

"때로는 약간 압도적"인 +1. 실제로 할 것인지에 따라 달라집니다 (Harrell이 명확하게 설명합니다. 4 장 끝 부분 참조).

  • 확인 분석 ( PCA 또는 주제 영역 고려 사항에 따라 응답을 보지 않고도 예측 변수의 복잡성을 합리적인 수준으로 줄이거 나 ...)
  • 예측 분석 (적절한 처벌 방법을 사용하십시오). 상당히 큰 표본이있는 경우 올가미는 100 개의 예측 변수로 잘 작동 할 수 있습니다. 지형지 물 선택은 불안정하지만, 관심있는 모든 것이 예측이라면 괜찮습니다. 기술적으로 "특징을 선택하지"않는 (같은 매개 변수를 정확히 0으로 줄이지 않기 때문에) 능선과 유사한 접근 방식을 선호하지만 작동하는 것은 무엇이든 ...

    최첨단 고차원 추론 방법 (예 : Dezeure et al 2015 ; I 한 하지 이러한 접근을 시도하지만 그들은 분별있는 것 같다 ...)

  • 탐색 적 분석 : 재미 있고 투명하고 정직하며 p- 값을 인용하지 마십시오.

지금까지 설명한 특정 유스 케이스 (여러 예측 변수는 본질적으로 다른 부분의 심장이받는 선량의 누적 분포를 나타냄)의 경우, 다양한 계수 모델 을 살펴보고 싶을 수 있습니다 (조금 찾기가 조금 어려움) CDF의 효과를 위해 기본적으로 부드러운 곡선에 맞습니다 (R mgcv패키지 로 구현 가능 ).


내 샘플 크기는 +1000이며 어떤 응답 변수 (4가 있는지)에 따라 +1000의 75-170 긍정적 (또는 네가 보는 방식에 따라 음) 응답이 있습니다. 나는 그것이 더 쉬운 일인지 아닌지 모른다. 즉, 샘플 세트가 다소 크다 (적어도 내 분야에서는).
Denver Dang

교차 검증은 추론 능력을 파괴합니까? 아마도. 교차 검증 전에 예측에 대한 신뢰 구간을 얻기 위해 부트 스트랩 할 수 있다고 생각합니다. 이것은 1000 번의 관측으로 가능할 수 있습니다.
JTH

선택 후 추론은 정말 어렵다; 전체 데이터 세트를 사용하여 하이퍼 파라미터 (예 : 벌칙 강도)를 조정하면 같은 상황에 처하게됩니다. 그것이 효과가 있다고 생각되면 부트 스트랩 + CV 접근 방식을 설명해야합니다.
Ben Bolker

0

많은 다른 접근 방식이 있습니다. 내가 권장하는 것은 다음 순서로 간단한 것을 시도하는 것입니다.


1
이 세 가지 방법 모두 불안정하다고 생각합니다.
Frank Harrell

불안정성을 정의하는 방법에 따라 다릅니다. 실제로는 일반적으로 k-fold 또는 leave-one-out과 같은 일종의 교차 검증을 사용하고 전체 성능 + 분산 (일명 1SE 방법)을 기반으로 판단합니다.
21:39에

부트 스트랩 및 교차 유효성 검사 는 모델을 생성하는 프로세스에 대한 일부 예측 색인의 유효성 만 검사 합니다. 결과적으로 해당 프로세스를 사용하여 선택한 모델에 대한 해당 인덱스의 추정치는 양호 하지만 한 번 개발 된 모델 의 구조 , 즉 전체 모델에 대한 편의는 제공하지 않습니다 . 변동성을 확인하려면 재 샘플에서 선택한 구조 (예 : 선택된 기능)를 확인하십시오.
Frank Harrell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.