R'de sürekli bir yanıt değişkeni için sıfır şişirilmiş bir regresyon çalıştırmaya çalışıyorum. Gamlss uygulamasının farkındayım, ancak kavramsal olarak biraz daha basit olan Dale McLerran tarafından bu algoritmayı denemek istiyorum. Ne yazık ki, kod SAS ve nasıl nlme gibi bir şey için yeniden yazmak emin değilim.
Kod aşağıdaki gibidir:
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;
Gönderen: http://listserv.uga.edu/cgi-bin/wa?A2=ind0805A&L=sas-l&P=R20779
EKLE:
Not: Burada karışık efektler yoktur - sadece düzeltildi.
Bu uydurmanın avantajı (katsayılar, P (y = 0) 'a lojistik regresyonu ve E (y | y> 0) log bağlantısı olan bir gama hata regresyonu ile aynı şekilde otursa bile, sıfırları içeren birleşik E (y) fonksiyonunu tahmin edin. Bu değeri SAS kullanarak (CI ile) çizgiyi kullanarak tahmin edebilirsiniz predict (1 - p_yEQ0)*mu
.
Ayrıca, öngörücü değişkenlerin E (y) üzerindeki önemini test etmek için özel kontrast ifadeleri yazılabilir. Örneğin, burada kullandığım SAS kodunun başka bir sürümü:
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;
Sonra "gift1" ile "gift2" (b1'e karşı b2) tahmin etmek için bu tahmin ifadesini yazabiliriz:
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 bunu yapabilir mi?