Регрессия SAS с конкретными параметрами в переменных

Добрый день.

Можно ли регрессировать переменные с конкретными параметрами, такими как Y = X1 (между Q1 и Q3) X2 (X2 > 100) X3? Я не хочу регрессировать все данные в X1 или X2, только данные в параметрах, которые я определяю.

Как насчет регрессии всех переменных между квантилями Q3 и Q4?

Правильно ли я подхожу к этому?

Спасибо за поддержку.

 *Regression output;
 ods graphics on;
 proc reg data=mydata PLOTS(ONLY)=(DIAGNOSTICS FITPLOT RESIDUALS);
 model Y = X1 X2 X3; 
 title 'Working Regression Model';
 run;
 ods graphics off;

person Starbucks    schedule 04.01.2016    source источник
comment
Откуда взялись Q1 и Q3?   -  person Dirk Horsten    schedule 04.01.2016
comment
Первый и третий квантили.   -  person Starbucks    schedule 06.01.2016
comment
Итак, Q1 это P25 это 25-й процентиль, верно? Есть как минимум два способа их создания: proc univariate и proc means.   -  person Dirk Horsten    schedule 06.01.2016
comment
Внимание: если вы создаете отдельные регрессии для x ниже его первого квантиля P25, x между его первым и третьим квантилем P25 и P75 и x выше его третьего квантиля, ваша модель не будет непрерывной. Это проблема?   -  person Dirk Horsten    schedule 06.01.2016


Ответы (1)


Если вы хотите выполнить регрессию, используя только часть ваших данных, вы можете отфильтровать ее в самом proc reg:

proc reg data=mydata (where=(X1 Between Q1 and Q3 and X2 > 100))
    PLOTS(ONLY)=(DIAGNOSTICS FITPLOT RESIDUALS);
model Y = X1 X2 X3; 

То есть, если Q1 и Q3являются полями в myData. Если нет, вы можете создать для них макропеременные. Например

%let Q1 = 50;
%let Q3 = 250;
proc reg data=mydata (where=(X1 Between &Q1. and &Q3. and X2 > 100))
    PLOTS(ONLY)=(DIAGNOSTICS FITPLOT RESIDUALS);
model Y = X1 X2 X3; 

Это если вы заранее знаете Q1 и Q3.

Если Q1 и Q3являются полями в другом наборе данных, proc sql с select Q1, Q3. into :Q1, :Q3 или шаг данных с call symput('Q1', Q1); call symput('Q3', Q3); могут выполнить эту работу.

Отредактируйте после прочтения вашего комментария, объясняющего, что Q1 и т. д. являются квантилями:

Следующий пример может содержать все необходимые строительные блоки.

ods graphics on;
proc means data=SASHELP.CLASS noprint;
    var Height Weight;
    output out=CLASS_Q
        P25(Height Weight)=Height_Q1 Weight_Q1
        P75(Height Weight)=Height_Q3 Weight_Q3;
run;
data _NULL_;
    set CLASS_Q;
    call symput('Height_Q1', Height_Q1);
    call symput('Height_Q3', Height_Q3);
    call symput('Weight_Q1', Weight_Q1);
    call symput('Weight_Q3', Weight_Q3);
run;
%put _user_; *just to debug;
proc reg data=SASHELP.CLASS 
    (where=(Height Between &Height_Q1. and &Height_Q3. and Weight > &Weight_Q1.))
    PLOTS(ONLY)=(DIAGNOSTICS FITPLOT RESIDUALS);
    model Age = Height Weight;
run;
person Dirk Horsten    schedule 04.01.2016
comment
Привет, Дирк, спасибо за отзыв. Я пробую эти команды прямо сейчас. Шкалы для каждой из переменных разные. Разве это не имеет значения при использовании макроса? - person Starbucks; 06.01.2016
comment
Спасибо за пример кода. Я попробую это на выходных! - person Starbucks; 08.01.2016