আর: পরিবারের সাথে গ্ল্যাম ফাংশন = "দ্বিপদী" এবং "ওজন" স্পেসিফিকেশন


14

পরিবারের সাথে ওজন কীভাবে ঝাঁকুনিতে কাজ করে তা নিয়ে আমি খুব বিভ্রান্ত হয়ে পড়েছি = "দ্বিপদী"। আমার বোধে, পরিবারের সাথে ঝাঁকুনির সম্ভাবনা = "দ্বিপদী" নিম্নরূপে নির্দিষ্ট করা হয়েছে:

f(y)=(nny)pny(1−p)n(1−y)=exp⁡(n[ylog⁡p1−p−(−log⁡(1−p))]+log⁡(nny))
যেখানে y হল "পর্যবেক্ষণের সাফল্যের অনুপাত" এবং n হল পরীক্ষার সংখ্যা of

আমার বোঝার সালে সাফল্যের সম্ভাবনা p কিছু রৈখিক কোফিসিয়েন্টস সঙ্গে parametrized হয় β হিসাবে p=p(β) ও পরিবার = "দ্বিপদ" সঙ্গে glm ফাংশন জন্য অনুসন্ধান করুন:

argmaxβ∑ilog⁡f(yi).
তারপরে এই অপ্টিমাইজেশান সমস্যাটিকে আরও সহজ করা যায়:

argmaxβ∑ilog⁡f(yi)=argmaxβ∑ini[yilog⁡p(β)1−p(β)−(−log⁡(1−p(β)))]+log⁡(niniyi)=argmaxβ∑ini[yilog⁡p(β)1−p(β)−(−log⁡(1−p(β)))]

অতএব আমরা যদি সমস্ত i = 1, ..., N এর জন্য n_i c * = n_ic কিছু ধ্রুবক গ এর জন্য রাখি , তবে এটি অবশ্যই সত্য হওয়া উচিত: \ টেক্সটর্ম {আর্গ} \ সর্বোচ্চ _ {\ বিটা} \ যোগ_আমি \ লগ চ (y_i) = \ টেক্সটর্ম {আরগ} \ সর্বাধিক _ {\ বিটা} \ যোগ_ই এন ^ * _ আমি \ বামে [y_i \ লগ \ frac {পি (\ বিটা) {{1-পি (\ বিটা)} - \ বাম (- \ লগ (1-পি (\ বিটা)) \ ডান) \ ডান] \\ এ থেকে, আমি ভেবেছিলাম ট্রায়ালের সংখ্যার স্কেলিং n_ini∗=nici=1,...,Nc
argmaxβ∑ilog⁡f(yi)=argmaxβ∑ini∗[yilog⁡p(β)1−p(β)−(−log⁡(1−p(β)))]
niy_i সাফল্যের অনুপাতে ধ্রুবক সহ like বিটার সর্বাধিক সম্ভাবনা অনুমানকে প্রভাবিত করে নাβyi ।

গ্ল্যামের সহায়তা ফাইলটি বলে:

 "For a binomial GLM prior weights are used to give the number of trials 
  when the response is the proportion of successes" 

সুতরাং আমি প্রত্যাশা করেছিলাম যে সাফল্যের অনুপাত হিসাবে সাড়া হিসাবে ওজন স্কেলিং অনুমিত \ বিটা প্রভাবিত করবে না β। তবে নিম্নলিখিত দুটি কোড বিভিন্ন সহগ মানগুলি প্রদান করে:

 Y <- c(1,0,0,0) ## proportion of observed success
 w <- 1:length(Y) ## weight= the number of trials
 glm(Y~1,weights=w,family=binomial)

এই ফলন:

 Call:  glm(formula = Y ~ 1, family = "binomial", weights = w)

 Coefficients:
 (Intercept)  
      -2.197     

আমি যদি সমস্ত ওজন 1000 দ্বারা গুণিত করি তবে আনুমানিক সহগগুলি পৃথক হয়:

 glm(Y~1,weights=w*1000,family=binomial)

 Call:  glm(formula = Y ~ 1, family = binomial, weights = w * 1000)

 Coefficients:
 (Intercept)  
    -3.153e+15  

আমি ওজনে কিছুটা মাঝারি স্কেলিং সহ এরকম আরও অনেক উদাহরণ দেখেছি। এখানে কি হচ্ছে?


3
এটির মূল্য কী তা জন্য, weightsযুক্তিটি glm.fitফাংশনের অভ্যন্তরে দুটি স্থানে শেষ হয় ( গ্ল্যাম.আর. ), যা সি: ফাংশনের মাধ্যমে binomial_dev_resids( ফ্যামিলি সিটিতে ) বিচ্যুতির অবশিষ্টাংশগুলিতে আর: 1 তে কাজ করে is এবং 2) IWLS ধাপে Cdqrls( lm.c এ ) .c যুক্তি সন্ধানে বেশি পরিমাণে সাহায্য করার জন্য আমি যথেষ্ট সি জানি না
— শ্যাডট্যালকার


@ এসএসডেকট্রোল আপনি যে লিঙ্কটি আমাকে দিয়েছিলেন তাতে আমি glm. Fit- এর মাধ্যমে পড়ছি তবে গ্ল্যাম.ফিট-এ "বাইনোমিয়াল_দেব_স্রেডস" সি ফাংশনটি কোথায় ডাকা হয়েছে তা আমি খুঁজে পাচ্ছি না। আপনি যদি এটি উল্লেখ করে কিছু মনে করবেন?
— পরীউনিস

@ এসএসডেকট্রোল ওহ, দুঃখিত আমি মনে করি আমি বুঝতে পেরেছি। প্রতিটি "পরিবার" একটি তালিকা এবং উপাদানগুলির মধ্যে একটি হ'ল "ডেভ.ড্রেসিড"। যখন আমি আর কনসোলে দ্বিপদ টাইপ করুন, আমি দ্বিপদ বস্তুর সংজ্ঞা দেখতে এবং এটি একটি লাইন আছে: dev.resids <- ফাংশন (Y, মিউ, WT) .Call (C_binomial_dev_resids, Y, মিউ, WT)
— FairyOnIce

উত্তর:


4

আপনার উদাহরণটি কেবল আর-তে গোলাকার ত্রুটি সৃষ্টি করছে ge বড় ওজনগুলি ভাল সম্পাদন করে না glm। এটি সত্য যে w100 এর মতো কার্যত কোনও ছোট সংখ্যার দ্বারা স্কেলিং অনাবৃত হিসাবে একই অনুমানের দিকে পরিচালিত করে w।

আপনি যদি ওজন যুক্তি দিয়ে আরও নির্ভরযোগ্য আচরণ চান, প্যাকেজ svyglmথেকে ফাংশন ব্যবহার করার চেষ্টা করুন survey।

এখানে দেখো:

    > svyglm(Y~1, design=svydesign(ids=~1, weights=~w, data=data.frame(w=w*1000, Y=Y)), family=binomial)
Independent Sampling design (with replacement)
svydesign(ids = ~1, weights = ~w, data = data.frame(w = w * 1000, 
    Y = Y))

Call:  svyglm(formula = Y ~ 1, design = svydesign(ids = ~1, weights = ~w2, 
    data = data.frame(w2 = w * 1000, Y = Y)), family = binomial)

Coefficients:
(Intercept)  
     -2.197  

Degrees of Freedom: 3 Total (i.e. Null);  3 Residual
Null Deviance:      2.601 
Residual Deviance: 2.601    AIC: 2.843

1

আমি মনে করি এটি প্রাথমিক মানগুলিতে নেমে আসে যা ব্যবহার glm.fitকরা হয় family$initializeযা পদ্ধতিটিকে বিভক্ত করে তোলে। যতদূর আমি জানি,glm.fit এর কিউআর-পচন গঠন করে সমস্যার সমাধান করুন যেখানে ডিজাইন ম্যাট্রিক্স এবং here এখানে বর্ণিত এন্ট্রিগুলির বর্গমূলের একটি তির্যক । এটি একটি নিউটন-রাফসন পদ্ধতি ব্যবহার করে।WXXW

সম্পর্কিত $intializeকোডটি হ'ল:

if (NCOL(y) == 1) {
    if (is.factor(y)) 
        y <- y != levels(y)[1L]
    n <- rep.int(1, nobs)
    y[weights == 0] <- 0
    if (any(y < 0 | y > 1)) 
        stop("y values must be 0 <= y <= 1")
    mustart <- (weights * y + 0.5)/(weights + 1)
    m <- weights * y
    if (any(abs(m - round(m)) > 0.001)) 
        warning("non-integer #successes in a binomial glm!")
}

এখানে একটি সরলীকৃত সংস্করণ glm.fitযা আমার বক্তব্য দেখায়

> #####
> # setup
> y <- matrix(c(1,0,0,0), ncol = 1)
> weights <- 1:nrow(y) * 1000
> nobs <- length(y)
> family <- binomial()
> X <- matrix(rep(1, nobs), ncol = 1) # design matrix used later
> 
> # set mu start as with family$initialize
> if (NCOL(y) == 1) {
+   n <- rep.int(1, nobs)
+   y[weights == 0] <- 0
+   mustart <- (weights * y + 0.5)/(weights + 1)
+   m <- weights * y
+   if (any(abs(m - round(m)) > 0.001)) 
+     warning("non-integer #successes in a binomial glm!")
+ }
> 
> mustart # starting value
             [,1]
[1,] 0.9995004995
[2,] 0.0002498751
[3,] 0.0001666111
[4,] 0.0001249688
> (eta <- family$linkfun(mustart))
          [,1]
[1,]  7.601402
[2,] -8.294300
[3,] -8.699681
[4,] -8.987322
> 
> #####
> # Start loop to fit
> mu <- family$linkinv(eta)
> mu_eta <- family$mu.eta(eta)
> z <- drop(eta + (y - mu) / mu_eta)
> w <- drop(sqrt(weights * mu_eta^2 / family$variance(mu = mu)))
> 
> # code is simpler here as (X^T W X) is a scalar
> X_w <- X * w
> (.coef <- drop(crossprod(X_w)^-1 * ((w * z) %*% X_w)))
[1] -5.098297
> (eta <- .coef * X)
          [,1]
[1,] -5.098297
[2,] -5.098297
[3,] -5.098297
[4,] -5.098297
> 
> # repeat a few times from "start loop to fit"

নিউটন-রাফসন পদ্ধতিটি বিচ্যুত হয়েছে তা দেখতে আমরা শেষ অংশটি আরও দু'বার পুনরাবৃত্তি করতে পারি:

> #####
> # Start loop to fit
> mu <- family$linkinv(eta)
> mu_eta <- family$mu.eta(eta)
> z <- drop(eta + (y - mu) / mu_eta)
> w <- drop(sqrt(weights * mu_eta^2 / family$variance(mu = mu)))
> 
> # code is simpler here as (X^T W X) is a scalar
> X_w <- X * w
> (.coef <- drop(crossprod(X_w)^-1 * ((w * z) %*% X_w)))
[1] 10.47049
> (eta <- .coef * X)
         [,1]
[1,] 10.47049
[2,] 10.47049
[3,] 10.47049
[4,] 10.47049
> 
> 
> #####
> # Start loop to fit
> mu <- family$linkinv(eta)
> mu_eta <- family$mu.eta(eta)
> z <- drop(eta + (y - mu) / mu_eta)
> w <- drop(sqrt(weights * mu_eta^2 / family$variance(mu = mu)))
> 
> # code is simpler here as (X^T W X) is a scalar
> X_w <- X * w
> (.coef <- drop(crossprod(X_w)^-1 * ((w * z) %*% X_w)))
[1] -31723.76
> (eta <- .coef * X)
          [,1]
[1,] -31723.76
[2,] -31723.76
[3,] -31723.76
[4,] -31723.76

আপনি শুরু করে weights <- 1:nrow(y)বা বললে এটি হয় না weights <- 1:nrow(y) * 100।

লক্ষ্য করুন যে আপনি mustartযুক্তিটি সেট করে বিচ্যুতি এড়াতে পারেন । যেমন

> glm(Y ~ 1,weights = w * 1000, family = binomial, mustart = rep(0.5, 4))

Call:  glm(formula = Y ~ 1, family = binomial, weights = w * 1000, mustart = rep(0.5, 
    4))

Coefficients:
(Intercept)  
     -2.197  

Degrees of Freedom: 3 Total (i.e. Null);  3 Residual
Null Deviance:      6502 
Residual Deviance: 6502     AIC: 6504

আমি মনে করি ওজন আরম্ভ করার পক্ষে যুক্তিগুলির চেয়ে বেশি প্রভাবিত করে। লজিস্টিক রিগ্রেশন সহ, নিউটন র‌্যাফসন সর্বাধিক সম্ভাবনাটি অনুমান করে যা উপস্থিত থাকে এবং যখন ডেটা পৃথক না করা হয় তখন অনন্য। অপ্টিমাইজারকে বিভিন্ন প্রারম্ভিক মান সরবরাহ করা বিভিন্ন মানগুলিতে পৌঁছায় না, তবে সেখানে পৌঁছতে সম্ভবত আরও বেশি সময় লাগবে।
— অ্যাডামো

"অপ্টিমাইজারকে বিভিন্ন প্রারম্ভিক মান সরবরাহ করা বিভিন্ন মানগুলিতে আসবে না ..." । ওয়েল নিউটন পদ্ধতিটি বিভক্ত হয় না এবং সর্বশেষ উদাহরণে অনন্য সর্বাধিক সন্ধান করে যেখানে আমি প্রাথমিক মানগুলি সেট করেছিলাম (উদাহরণটি দেখুন যেখানে আমি mustart যুক্তিটি সরবরাহ করি)। এটি প্রাথমিক প্রাথমিক অনুমানের সাথে সম্পর্কিত বলে মনে হচ্ছে ।
— বেঞ্জামিন ক্রিস্টফারসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.