2014-10-09 52 views
0

我有一個包含三個獨立變量的線性模型。我有下面的最後一個模型。我想使用increase_po和decrease_po變量重新估計迴歸模型中的y值。如何擬合SAS中使用不同參數的線性迴歸模型

Dependent Variable Estimate increase_po decrease_po 
Rate  Rate_lag1 0.54  0.60   0.49 
Rate  UN   0.07  0.08   0.06 
Rate  SQ   0.03  0.03   0.02 

我想要做的就是寫一個DO循環生產的六個可能的組合:

comb1 comb2 comb3 comb4 comb5 comb6 
0.60 0.49 0.08 0.06 0.03 0.02 
0.07 0.07 0.54 0.54 0.54 0.54 
0.03 0.03 0.03 0.03 0.07 0.07 

我想用這些參數來重新擬合模型,並得到估計ÿ值。

fitted y1= b0 + 0.60*Rate_lag1 + 0.07*UN + 0.03*SQ (only Rate_lag1 change parameter) 

fitted y2= b0 + 0.49*Rate_lag1 + 0.07*UN + 0.03*SQ (only Rate_lag1 change parameter) 

fitted y3= b0 + 0.54*Rate_lag1 + 0.08*UN + 0.03*SQ (only UN change parameter) 

....................

因此,如果不使用宏循環是很難甚至是不可能的。

+0

你的問題是重複的,仍然不完全清楚。看看proc分數。 – Reeza 2014-10-09 04:18:58

+0

第一個數據集來自哪裏?什麼是增加 - 減少和減少?我不能說這是否簡單地嘗試用不同的x值或改裝模型來估計y以獲得不同的參數估計值。 – Reeza 2014-10-09 05:50:35

+0

我簡化了這裏的問題:從SAS中的不同變量生成不同的組合,我的意思是你可以在Stackoverflow中搜索。當問題解決後,我會關閉這個問題。你可以看看這個問題嗎? – 2014-10-09 05:52:34

回答

1

我看到你的其他線程,但想在這裏發佈。

如果我理解正確: 您已經爲您的數據擬合了3個模型,並且每個模型使用相同的三個獨立變量/預測變量。 您已經顯示了與3個模型的每個預測變量相對應的beta參數。 您想從3個原始模型開始創建6個新模型,並且一次只更改一個β參數。

下面是我認爲會做你想做的一些SAS代碼。

但是,您的3個原始模型中的測試版估計都非常相似!所以我不知道這個練習揭示了什麼是「最佳」模型。

祝你好運!

data have; 
    infile cards; 
    input Dependent $ Variable $ Estimate increase_po decrease_po; 
    cards; 
Rate  Rate_lag1 0.54  0.60   0.49 
Rate  UN   0.07  0.08   0.06 
Rate  SQ   0.03  0.03   0.02 
; 
run; 

*** TRANSPOSE SO EACH PREDICTOR VARIABLE IS A COLUMN AND EACH MODEL IS A ROW ***; 
*** NOTE: RATE_LAG1 CHANGES TO RATE_LAG IN THE TRANSPOSE ***; 
proc transpose data=have out=have_transpose; 
    id variable; 
    var Estimate increase_po decrease_po; 
run; 

*** CREATE VARIABLE FOR MODEL NUMBERS 1-3 ***; 
data have_transpose; 
    set have_transpose; 
    modelnum=_N_; 
run;  

proc print data=have_transpose; 
run; 

*** PUT EACH COLUMN INTO A SEPARATE DATASET AND KEEP ORIGINAL MODEL NUMBER IN EACH DATASET ***; 
data col1(keep=rate_lag modelnum rename=(modelnum=rate_lag_num)) 
     col2(keep=un modelnum rename=(modelnum=un_num)) 
     col3(keep=sq modelnum rename=(modelnum=sq_num)) 
    ; 
    set have_transpose; 
run; 

*** USE SQL TO DO A MANY-TO-MANY MERGE FOR ALL THREE DATASETS ***; 
*** THE CREATED DATASET WILL CONTAIN ALL POSSIBLE COMBINATIONS OF PARAMETER ESTIMATES FROM ALL MODELS ***; 
*** IN THIS CASE THERE WILL BE 3x3x3 = 27 RECORDS ***; 
proc sql; 
    create table col123 as 
    select * 
    from col1, col2, col3 
; 
quit; 

data almost; 
    set col123; 
    *** FOR EACH POSSIBLE COMBINATION, COUNT HOW MANY PARAMETERS ARE UNCHANGED FROM MODEL 1 ***; 
    flag = (rate_lag_num=1) + (un_num=1) + (sq_num=1); 
run; 

proc print data=almost; 
run; 

*** WANT TO ONLY KEEP MODELS WHERE TWO PARAMETERS ARE UNCHANGED ESTIMATES (WHERE FLAG=2) ***; 
data want; 
    set almost; 
    if flag=2; 
    keep rate_lag un sq ; 
run; 

*** THIS DATASET CONTAINS 6 RECORDS ***; 
proc print data=want; 
run; 


*** FROM HERE YOU CAN USE SQL TO DO A MANY-TO-MANY MERGE WITH YOUR 6 NEW MODELS AND DATASET WITH THE PREDICTOR VARIABLES ***; 
*** AND THEN CREATE YOUR NEW ESTIMATES FOR EACH MODEL ***; 
*** SOMETHING LIKE THIS BELOW ***; 
/* 

*** RENAME VARIABLES AND CREATE NEW MODEL NUMBER ***; 
data betas; 
    set want; 
    new_model_num = _N_; 
    rename rate_lag=rate_lag_beta un=un_beta sq=sq_beta ; 
run; 

proc sql; 
    create table all as 
    select * 
    from betas, ORIGINAL_DATA; *** CHANGE "ORIGINAL_DATA" TO YOUR DATA SET NAME ***; 
run; 

data new_model; 
    set all; 
    fitted = b0 + (Rate_lag_beta * Rate_lag1) + (un_beta * un) + (sq_beta * sq); 
run; 
*/ 

*** NOTE: IN YOUR EXAMPLE, YOU ASSUME THE SAME B0 FOR ALL MODELS 
*** HOWEVER, YOUR THREE STARTER MODELS MAY HAVE DIFFERENT B0 ESTIMATES ***; 
*** SO YOU WILL HAVE TO THINK ABOUT THE BEST WAY TO HANDLE THAT ***; 
相關問題