Logistic

如何以正確的方式減少邏輯回歸模型的預測變量

  • March 21, 2019

所以我一直在閱讀一些關於建模的書籍(或其中的一部分)(F. Harrell 的“回歸建模策略”等),因為我現在的情況是我需要基於二進制響應數據做一個邏輯模型。我的數據集中既有連續數據、分類數據和二進制數據(預測變量)。基本上我現在有大約 100 個預測變量,這對於一個好的模型來說顯然太多了。此外,這些預測變量中有許多是相關的,因為它們通常基於相同的指標,儘管有些不同。

無論如何,我一直在閱讀的內容,使用單變量回歸和逐步技術是您可以做的一些最糟糕的事情,以減少預測變量的數量。我認為 LASSO 技術非常好(如果我理解正確的話),但顯然你不能在 100 個預測變量上使用它,並認為它會帶來任何好處。

那麼我在這裡有什麼選擇?我真的只需要坐下來,與我所有的主管和工作中的聰明人交談,並真正思考前 5 個最佳預測指標可能/應該是什麼(我們可能錯了),或者我應該採用哪種方法考慮一下?

是的,我也知道這個話題被大量討論(在線和書籍),但是當你是這個建模領域的新手時,它有時似乎有點壓倒性。

編輯:

首先,我的樣本量是 +1000 名患者(這在我的領域中很多),其中有 70-170 名陽性反應(即 170 名有反應,而其中一個病例大約有 900 名無反應) . 基本上,這個想法是預測放射治療後的毒性。我有一些預期的二元響應數據(即毒性,要么你有它(1),要么你沒有(0)),然後我有幾種類型的指標。一些指標是患者特定的,例如年齡、使用的藥物、器官和目標體積、糖尿病等,然後我有一些基於目標模擬治療領域的治療特定指標。從中我可以檢索到幾個預測因子,這些預測因子通常與我的領域高度相關,因為大多數毒性與接受的輻射量(iedose)高度相關。因此,例如,如果我治療肺部腫瘤,一定量的劑量就有可能擊中心臟。然後我可以計算出多少 x 量的心臟體積接受了 x 量的劑量,例如“ 不只是選擇一個開始(儘管這是過去的實驗當然嘗試過的,也是我希望做的),因為我需要“確切地”知道在何種程度上心臟毒性之間實際上存在很大的相關性和體積劑量(再次作為示例,還有其他類似的指標,其中應用了相同的策略)。所以是的,這就是我的數據集的樣子。一些不同的指標,以及一些有些相似的指標。不只是選擇一個開始(儘管這是過去的實驗當然嘗試過的,也是我希望做的),因為我需要“確切地”知道在何種程度上心臟毒性之間實際上存在很大的相關性和體積劑量(再次作為示例,還有其他類似的指標,其中應用了相同的策略)。所以是的,這就是我的數據集的樣子。一些不同的指標,以及一些有些相似的指標。s 幾乎是我的數據集的樣子。一些不同的指標,以及一些有些相似的指標。s 幾乎是我的數據集的樣子。一些不同的指標,以及一些有些相似的指標。

然後我想做的是建立一個預測模型,這樣我就可以有希望地預測哪些患者會有出現某種毒性的風險。由於響應數據是二元的,我的主要想法當然是使用邏輯回歸模型。至少這是其他人在我的領域所做的。然而,在閱讀這些已經完成的許多論文時,其中一些似乎是錯誤的(至少在閱讀這些特定類型的建模書籍時,如 F. Harrel 的)。許多人使用單變量回歸分析來選擇預測變量,並將它們用於多變量分析(如果我沒記錯的話,建議不要這樣做),還有許多人使用逐步技術來減少預測變量的數量。當然,也不全是壞事。許多使用 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 個。

您收到的一些關於推送功能選擇的答案是錯誤的。

套索或更好的彈性網絡將進行特徵選擇,但如上所述,您將對“選定”特徵集的波動性感到非常失望。我相信在你的情況下唯一真正的希望是數據縮減,即無監督學習,正如我在書中所強調的那樣。數據縮減帶來了更多的可解釋性,尤其是更高的穩定性。我非常推薦稀疏主成分,或變量聚類,然後是集群上的常規主成分。

數據集中的信息內容太少,以至於任何特徵選擇算法都不可靠。

引用自:https://stats.stackexchange.com/questions/398638

comments powered by Disqus