[英]How to fitted a linear regression model using different parameters in SAS
我有一個包含三個自變量的線性模型。 我在下面有最終模型。 我想使用increas_po和reducing_po變量來重新估計回歸模型中的y值。
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
我想使用這些參數中的每一個來重新擬合模型並獲得估計的y值。
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)
....................
因此,即使不使用宏和循環,也很難甚至不可能。
我看到了您的其他主題,但想在這里發布。
如果我理解正確:您已經為數據擬合了3個模型,並且每個模型都使用相同的三個獨立變量/預測變量。 您已經顯示了對應於3個模型的每個預測變量的beta參數。 您要通過從3個原始模型開始並一次僅更改一個beta參數來創建6個新模型。
以下是一些我想可以做您想要的SAS代碼。
但是,您的3個原始模型中的beta估算值都非常相似! 因此,我不知道此練習可以揭示“最佳”模型方面的任何內容。
祝好運!
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 ***;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.