Я намагаюся запустити нульову завищену регресію для змінної безперервної відповіді в Р. Я знаю про реалізацію ігор, але мені дуже хотілося б спробувати цей алгоритм Дейлом Маклерраном, який концептуально трохи простіший. На жаль, код є в SAS, і я не впевнений, як переписати його на щось на зразок nlme.
Код такий:
proc nlmixed data=mydata;
parms b0_f=0 b1_f=0
b0_h=0 b1_h=0
log_theta=0;
eta_f = b0_f + b1_f*x1 ;
p_yEQ0 = 1 / (1 + exp(-eta_f));
eta_h = b0_h + b1_h*x1;
mu = exp(eta_h);
theta = exp(log_theta);
r = mu/theta;
if y=0 then
ll = log(p_yEQ0);
else
ll = log(1 - p_yEQ0)
- lgamma(theta) + (theta-1)*log(y) - theta*log(r) - y/r;
model y ~ general(ll);
predict (1 - p_yEQ0)*mu out=expect_zig;
predict r out=shape;
estimate "scale" theta;
run;
Від: http://listserv.uga.edu/cgi-bin/wa?A2=ind0805A&L=sas-l&P=R20779
ДОДАТИ:
Примітка. Тут немає присутніх змішаних ефектів - лише фіксований.
Перевага цього пристосування полягає в тому, що (навіть якщо коефіцієнти такі ж, як якщо б ви окремо підходили логістичну регресію до P (y = 0) і регресію помилки гамми з посиланням на журнал на E (y | y> 0)) ви можете Оцініть комбіновану функцію E (y), яка включає нулі. Можна передбачити це значення в SAS (з ІС), використовуючи рядок predict (1 - p_yEQ0)*mu
.
Крім того, можна написати індивідуальні контрастні висловлювання для перевірки значущості змінних предиктора на E (y). Наприклад, ось інша версія коду SAS, який я використав:
proc nlmixed data=TestZIG;
parms b0_f=0 b1_f=0 b2_f=0 b3_f=0
b0_h=0 b1_h=0 b2_h=0 b3_h=0
log_theta=0;
if gifts = 1 then x1=1; else x1 =0;
if gifts = 2 then x2=1; else x2 =0;
if gifts = 3 then x3=1; else x3 =0;
eta_f = b0_f + b1_f*x1 + b2_f*x2 + b3_f*x3;
p_yEQ0 = 1 / (1 + exp(-eta_f));
eta_h = b0_h + b1_h*x1 + b2_h*x2 + b3_h*x3;
mu = exp(eta_h);
theta = exp(log_theta);
r = mu/theta;
if amount=0 then
ll = log(p_yEQ0);
else
ll = log(1 - p_yEQ0)
- lgamma(theta) + (theta-1)*log(amount) - theta*log(r) - amount/r;
model amount ~ general(ll);
predict (1 - p_yEQ0)*mu out=expect_zig;
estimate "scale" theta;
run;
Тоді, щоб оцінити "gift1" порівняно з "gift2" (b1 проти b2), ми можемо написати цю заяву про оцінку:
estimate "gift1 versus gift 2"
(1-(1 / (1 + exp(-b0_f -b1_f))))*(exp(b0_h + b1_h)) - (1-(1 / (1 + exp(-b0_f -b2_f))))*(exp(b0_h + b2_h)) ;
Чи може це зробити R?