Re: [問題] SAS排列組合

看板Statistics作者 (歐吉桑留學生)時間12年前 (2011/11/11 19:52), 編輯推噓4(402)
留言6則, 4人參與, 最新討論串4/4 (看更多)
在提供這幾天排列組合的處理方法前,有些事情要先解釋一下 如果你只想看怎麼寫程式,請直接按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
推!!不過我有一個小疑問,為什麼要ncomb+1,看官網的範例
11/12 00:51, 2F

11/12 00:51, , 3F
一的output最後一個好像是redundant的@@
11/12 00:51, 3F

11/12 02:54, , 4F
那一段我也看不懂,我在寫的時候會把最後一比刪掉
11/12 02:54, 4F

11/14 11:56, , 5F
單純是要demo當count大於C(m,n)的產出?
11/14 11:56, 5F

11/14 18:16, , 6F
感謝liton的回答,bugle的說法看來是目前最合理的解釋@@
11/14 18:16, 6F
文章代碼(AID): #1ElGo5s4 (Statistics)
文章代碼(AID): #1ElGo5s4 (Statistics)