|
I was a bit too quick with my previous response. To fit a
multinomial discrete choice model with NLMIXED where each selection
has its own set of covariates, the data must be structured in wide
form with all brand-specific information in a single record. Thus,
for the yogurt data where there are up to four brands and each brand
has its own price and feature values, we would require a data set
with brand selected (whether Yoplait, Dannon, Weight Watchers,
or local brand), price for each brand, feature status for each
brand, and a choice set variable. As before, let BRAND take on
the value 1 for Yoplait, 2 for Dannon, 3 for Weight Watchers,
and 4 for the local brand. We would also have variables PY, PD,
PWW, PLB, FY, FD, FWW, and FLP corresponding to price and feature
for each brand.
With those variables, code for the two MDC models previously
discussed (with local brand drawing proportionately or
disproportionately from the other three brands) fitted employing
NLMIXED would be
/* code for local brand drawing proportionately from others */
proc nlmixed data=mydata;
parms a2 a3 a4=0;
a1=0;
array _a {4} a1-a4;
array _p {4} PY PD PWW PLB;
array _f {4} FY FD FWW FLB;
if SET=3 then do;
denom=0;
do i=1 to 3;
denom + exp(_a{i} + b1*_p{i} + b2*_f{i});
end;
p = exp(_a{brand} + b1*_p{brand} + b2*_f{brand}) / denom;
end;
if SET=4 then do;
denom=0;
do i=1 to 4;
denom + exp(_a{i} + b1*_p{i} + b2*_f{i});
end;
p = exp(_a{brand} + b1*_p{brand} + b2*f{brand}) / denom;
end;
log_like = log(p);
model brand ~ general(log_like);
run;
/* code for local brand drawing DISproportionately from others */
proc nlmixed data=mydata;
parms a3_2 a3_3 a4_2 a4_3 a4_4=0;
a1=0;
array _a3 {3} a1 a3_2 a3_3;
array _a4 {4} a1 a4_2-a4_4;
array _p {4} PY PD PWW PLB;
array _f {4} FY FD FWW FLB;
if SET=3 then do;
denom=0;
do i=1 to 3;
denom + exp(_a3{i} + b1*_p{i} + b2*_f{i});
end;
p = exp(_a3{brand} + b1*_p{brand} + b2*_f{brand}) / denom;
end;
if SET=4 then do;
denom=0;
do i=1 to 4;
denom + exp(_a4{i} + b1*_p{i} + b2*_f{i});
end;
p = exp(_a4{brand} + b1*_p{brand} + b2*_f{brand}) / denom;
end;
log_like = log(p);
model brand ~ general(log_like);
run;
Sorry for any confusion that may have occurred from the code of
the previous post.
Dale
---------------------------------------
Dale McLerran
Fred Hutchinson Cancer Research Center
mailto: dmclerra@NO_SPAMfhcrc.org
Ph: (206) 667-2926
Fax: (206) 667-5977
---------------------------------------
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
|