শূন্য-স্ফীত গামা রিগ্রেশন এর জন্য এস এ এস এনএলএমআইএসইডি কোড রূপান্তর করুন


11

আমি আর এর ধারাবাহিক প্রতিক্রিয়া পরিবর্তনের জন্য শূন্য-স্ফীত রিগ্রেশন চালানোর চেষ্টা করছি a দুর্ভাগ্যক্রমে, কোডটি এসএএস-এ রয়েছে এবং এনএমএলএম-এর মতো কোনও কিছুর জন্য এটি কীভাবে পুনরায় লিখতে হবে তা আমি নিশ্চিত নই।

কোডটি নিম্নরূপ:

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

যোগ করুন

দ্রষ্টব্য: এখানে কোনও মিশ্র প্রভাব নেই - কেবলমাত্র স্থির।

এই ফিটিংয়ের সুবিধাটি হ'ল (সহগুণগুলি সমান হলেও আপনি পৃথকভাবে পি (y = 0) এ লজিস্টিক রিগ্রেশন এবং E (y | y> 0) এর লগ লিঙ্ক সহ একটি গামা ত্রুটি রিগ্রেশন ফিট করতে পারেন তবে সম্মিলিত ফাংশন E (y) অনুমান করুন যার মধ্যে শূন্য রয়েছে। লাইনটি ব্যবহার করে কেউ এসএএস (সিআই সহ) এই মানটির পূর্বাভাস দিতে পারে predict (1 - p_yEQ0)*mu

তদ্ব্যতীত, E (y) এ প্রেডিক্টর ভেরিয়েবলের তাত্পর্য পরীক্ষা করতে কেউ কাস্টম কনট্রাস্ট স্টেটমেন্ট লিখতে সক্ষম হয়। উদাহরণস্বরূপ, আমি যে এসএএস কোডটি ব্যবহার করেছি তার অন্য সংস্করণটি এখানে রয়েছে:

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; 

তারপরে "গিফট 1" বনাম "গিফট 2" (বি 1 বনাম বি 2) অনুমান করার জন্য আমরা এই অনুমানের বিবৃতিটি লিখতে পারি:

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)) ; 

আর কি এটা করতে পারে?


2
ব্যবহারকারী 779747 তার ক্রস পোস্টে রেলপকে নোট করেছিল যে এটি এখানে আগে পোস্ট করা হয়েছিল। আমি এসও তে এই ধরনের নোটিশ পোস্ট করার জন্য একটি নির্দিষ্ট অনুরোধ দেখিনি, তবে আমাদের মধ্যে কিছু (বেশিরভাগ?) সাহায্যপ্রাপ্তরা এটির প্রত্যাশা করেন কারণ এটিই আর মেইলিং তালিকাগুলিতে বর্ণিত প্রত্যাশা।
ডিউইন

উত্তর:


9

এই কোডটিতে কিছু সময় ব্যয় করে, এটি আমার কাছে মনে হয় এটি মূলত:

1) ডান হাতের সাথে b0_f + b1_f*x1এবং y > 0একটি টার্গেট ভেরিয়েবল হিসাবে লজিস্টিক রিগ্রেশন কি ,

2) যে সমস্ত পর্যবেক্ষণের জন্য y> 0, ডান হাতের সাথে b0_h + b1_h*x1একটি গেমার সম্ভাবনা এবং link=log,

3) গামা বিতরণের আকারের পরামিতিটিও অনুমান করে।

এটি সম্মিলিতভাবে সম্ভাবনা সর্বাধিক করে তোলে, যা দুর্দান্ত, কারণ আপনার কেবলমাত্র একটি ফাংশন কল করতে হবে। তবে সম্ভাবনা যাইহোক আলাদা হয়ে যায়, ফলে ফলস্বরূপ আপনি প্যারামিটারের উন্নত অনুমান পাবেন না।

এখানে কিছু আর কোড রয়েছে যা glmপ্রোগ্রামিংয়ের প্রচেষ্টা বাঁচাতে ফাংশনটি ব্যবহার করে । এটি আপনার পছন্দ মতো নাও হতে পারে, কারণ এটি অ্যালগরিদমকেই অস্পষ্ট করে। কোড অবশ্যই এটি হিসাবে পরিষ্কার হতে পারে / হতে পারে, হয়।

McLerran <- function(y, x)
{
  z <- y > 0
  y.gt.0 <- y[y>0]
  x.gt.0 <- x[y>0]

  m1 <- glm(z~x, family=binomial)
  m2 <- glm(y.gt.0~x.gt.0, family=Gamma(link=log))

  list("p.ygt0"=m1,"ygt0"=m2)
}

# Sample data
x <- runif(100)
y <- rgamma(100, 3, 1)      # Not a function of x (coef. of x = 0)
b <- rbinom(100, 1, 0.5*x)  # p(y==0) is a function of x
y[b==1] <- 0

foo <- McLerran(y,x)
summary(foo$ygt0)

Call:
glm(formula = y.gt.0 ~ x.gt.0, family = Gamma(link = log))

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-2.08888  -0.44446  -0.06589   0.28111   1.31066  

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.2033     0.1377   8.737 1.44e-12 ***
x.gt.0       -0.2440     0.2352  -1.037    0.303    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

(Dispersion parameter for Gamma family taken to be 0.3448334)

    Null deviance: 26.675  on 66  degrees of freedom
Residual deviance: 26.280  on 65  degrees of freedom
AIC: 256.42

Number of Fisher Scoring iterations: 6

গামা বিতরণের জন্য আকৃতির প্যারামিটার গামা পরিবারের জন্য 1 / ছড়িয়ে পড়া প্যারামিটারের সমান। সহগ এবং অন্যান্য স্টাফ যা আপনি প্রোগ্রামক্রমে অ্যাক্সেস করতে পছন্দ করতে পারেন তা ফেরতের মান তালিকার পৃথক উপাদানগুলিতে অ্যাক্সেস করা যেতে পারে:

> coefficients(foo$p.ygt0)
(Intercept)           x 
   2.140239   -2.393388 

পূর্বাভাস রুটিনের আউটপুট ব্যবহার করে করা যেতে পারে। এখানে আরও কিছু আর কোড রয়েছে যা দেখায় যে কীভাবে প্রত্যাশিত মান এবং কিছু অন্যান্য তথ্য উত্পন্ন করা যায়:

# Predict expected value
predict.McLerren <- function(model, x.new)
{
  x <- as.data.frame(x.new)
  colnames(x) <- "x"
  x$x.gt.0 <- x$x

  pred.p.ygt0 <- predict(model$p.ygt0, newdata=x, type="response", se.fit=TRUE)
  pred.ygt0 <- predict(model$ygt0, newdata=x, type="response", se.fit=TRUE)  

  p0 <- 1 - pred.p.ygt0$fit
  ev <- (1-p0) * pred.ygt0$fit

  se.p0 <- pred.p.ygt0$se.fit
  se.ev <- pred.ygt0$se.fit

  se.fit <- sqrt(((1-p0)*se.ev)^2 + (ev*se.p0)^2 + (se.p0*se.ev)^2)

  list("fit"=ev, "p0"=p0, "se.fit" = se.fit,
       "pred.p.ygt0"=pred.p.ygt0, "pred.ygt0"=pred.ygt0)
}

এবং একটি নমুনা রান:

> x.new <- seq(0.05,0.95,length=5)
> 
> foo.pred <- predict.McLerren(foo, x.new)
> foo.pred$fit
       1        2        3        4        5 
2.408946 2.333231 2.201889 2.009979 1.763201 
> foo.pred$se.fit
        1         2         3         4         5 
0.3409576 0.2378386 0.1753987 0.2022401 0.2785045 
> foo.pred$p0
        1         2         3         4         5 
0.1205351 0.1733806 0.2429933 0.3294175 0.4291541 

এখন গুণমান নিষ্কাশন এবং বিপরীতে জন্য:

coef.McLerren <- function(model)
{
  temp1 <- coefficients(model$p.ygt0)
  temp2 <- coefficients(model$ygt0)
  names(temp1) <- NULL
  names(temp2) <- NULL
  retval <- c(temp1, temp2)
  names(retval) <- c("b0.f","b1.f","b0.h","b1.h")
  retval
}

contrast.McLerren <- function(b0_f, b1_f, b2_f, b0_h, b1_h, b2_h)
{
  (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))
}


> coef.McLerren(foo)
      b0.f       b1.f       b0.h       b1.h 
 2.0819321 -1.8911883  1.0009568  0.1334845 

2
"অংশগুলি" (যেমন পিআর (y> 0) এর জন্য লগিট রিগ্রেশন এবং E (y | y> 0) এর জন্য গামা রিগ্রেশন নিয়ে যা ঘটছে সে সম্পর্কে আপনি সঠিক তবে এটি সম্মিলিত অনুমান (এবং মান ত্রুটি, সিআই) প্রধান আগ্রহের আছে - অর্থাৎ ই (Y) এই পরিমাণ ভবিষ্যতবাণী এসএএস কোডে দ্বারা (1 - p_yEQ0) তৈরি করা হয়।। * মিউ এই সূত্র এই মিলিত মূল্যের ওপর কোফিসিয়েন্টস উপর বৈপরীত্য আচার করতে পারবেন।
B_Miner

@ বি_মিনার - আমি এমন কিছু কোড + উদাহরণ যুক্ত করেছি যা পূর্বাভাসের সমস্যাটিকে আংশিকভাবে সম্বোধন করে, এটি উল্লেখ করার জন্য ধন্যবাদ।
jbowman

এটি কি যদিও পৃথক প্রাক্কলন নয়? এসএএস-এ, এনএলএমএক্সইডি ই (ওয়াই) এর বিন্দু অনুমানের পাশাপাশি একটি সিআই (আমি বিশ্বাস করি যে ডেল্টা পদ্ধতিটি ব্যবহার করে) নির্ধারণ করার অভ্যাসটি দেবে। এছাড়াও, আপনি প্যারামিটারগুলির ব্যবহারকারী সংজ্ঞায়িত বৈসাদৃশ্যগুলি লিখতে পারেন যেমন আমি রৈখিক হাইপোথিসিস পরীক্ষা করতে উপরে দেখায়। কোনও আর বিকল্প থাকতে হবে?
বি_মিনার

ভাল, হ্যাঁ এবং না। উদাহরণটি ব্যবহার করার জন্য, প্রত্যাবর্তনগুলি foo.pred$fitE (y) এর বিন্দু অনুমান দেয় তবে উপাদানটি foo.pred$pred.ygt0$predআপনাকে E (y | y> 0) দেবে। আমি y এর জন্য স্ট্যান্ডার্ড ত্রুটি গণনায় যোগ করেছি, বিটিডাব্লু, সেফিট হিসাবে ফিরে এসেছে। গুণাগুণগুলি সহগ ( foo.pred$pred.ygt0) এবং সহগ ( foo.pred$pred.p.ygt0) সহ উপাদানগুলি থেকে পাওয়া যায় ; আমি কিছুক্ষণের মধ্যে নিষ্কাশন রুটিন এবং একটি বিপরীতে রুটিন লিখব।
jbowman

এটি দয়া করে কোথা থেকে এসেছে তা বর্ণনা করতে পারেন: se. Fit <- sqrt (((1-p0) * se.ev) ^ 2 + (ev * se.p0) ^ 2 + (se.p0 * se.ev) ^ 2)
বি_মিনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.