Re: [問題] SAS排列組合
在提供這幾天排列組合的處理方法前,有些事情要先解釋一下
如果你只想看怎麼寫程式,請直接按END
一、排列組合與抽樣的差異
之所以需要產出排列組合,並不是因為要pdf
pdf是抽樣所產出,但是排列組合是要產出所有的可能性且一個不能漏
例如銅板丟100次,
我想問的是總共有多少可能的結果,而不是問正面出現30次的機率有多少
二、原始問題
之所以要產出排列組合
是因為在modeling的過程中,所有流程都是環環相扣
以最單純的Logistic而言
或許stepwise,backward,forward的篩選方法可以產出一組效度最高的模型
但這個的模型有些問題
1.不保證其他統計測試過的了
例如變數間的相關性與方向性、無母數檢定、穩定性相關測試
2.實務應用
就實務而言,End User並非會挑效度最高的模型
有些變數湊在一起應用實務上的解釋互相衝突,
或是變數集中於某個面向而忽略某個面向
3.業界採Try Error尋求最適模型
一般業界的作法是用stepwise,backward,forward先尋求出一組變數組合後
在用try error的方式加入新變數或剔除原有變數
然後再去檢視各流程與最終user的意見
但假設候選變數有20個要產出一個變數數量介於10~12個模型
不管try erro多少組
對這個天文數字的變數組合來說根本是過於稀少
三、規劃
1.原始構想
專案時程規劃而言
以try error的方式一次產出一個符合各項統計指標的模型
然後再跟End User確認
一個Cycle跑下來少說也兩個禮拜,
那倒不如花一個禮拜寫個能夠測試所有變數組合的自動篩選程式
然後End User從中挑選一個較能接受的最佳模型
2.挑戰
統計結果的產出與連結,以及條件自動判斷只是coding時間上的問題
比較大的挑戰在於如何從多個變數中產出變數組合,這包括了:
(1)抑制排列組合的數目
假設有20個變數,要從中挑出10個變數的排列組合就有C(20,10)=184,756種
更別說有更多的候選變數,以及挑出更多不同樣本數
我的解法是先分群,例如先依照變數性質拆分成5群
C(4,2)^5=7,776種
(2)產出變數組合
呼~~終於說到重點了
請先參考SAS得這份官方文件
http://goo.gl/aSWaQ (請注意SAS 9.2後才有這FUNCTION)
SAS基本上是以ARRAY的方式來處理輸入與輸出的問題
輸入部分要先將你要候選變數變成一串ARRAY
輸出部分SAS不會一開始就給你一整個排列組合的TABLE
而是一次只產出一個排列組合,然後你得用迴圈的方式取出各種排列組合
範例:將A、B、C、D、E五個變數中取出三個的變數組合
data TEST;
array x[5] $3 ('A' 'B' 'C' 'D' 'E'); /*以ARRAY輸入變數*/
n=dim(x); /*總共有多少個變數*/
k=3; /*抽幾個變數*/
ncomb=comb(n,k); /*總共會有多少總排列組合*/
do j=1 to ncomb+1; /*以迴圈方式堆疊各個組合的ARRAY*/
call allcomb(j, k, of x[*]);
OUTPUT;
end;
run;
感覺上有點不方便啦
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.71.218.254
※ 編輯: liton 來自: 210.71.218.254 (11/11 19:54)
推
11/11 22:49, , 1F
11/11 22:49, 1F
推
11/12 00:51, , 2F
11/12 00:51, 2F
→
11/12 00:51, , 3F
11/12 00:51, 3F
→
11/12 02:54, , 4F
11/12 02:54, 4F
推
11/14 11:56, , 5F
11/14 11:56, 5F
推
11/14 18:16, , 6F
11/14 18:16, 6F
討論串 (同標題文章)