জেনারালাইজড ননলাইনার সর্বনিম্ন স্কোয়ার রিগ্রেশন (এনএলএম) জন্য "হাত ধরে" লগ-সম্ভাবনা গণনা করুন


12

আমি দ্বারা অপ্টিমাইজড সর্বনিম্ন স্কোয়ার রিগ্রেশনের লগ-সম্ভাবনা গণনা করার চেষ্টা করছি the আর প্যাকেজে ফাংশন করে ব্রাউনিয়ান গতি ( প্যাকেজ থেকে ) ধরে ধরে এএ ফাইলেজেনেটিক ট্রিতে দূরত্ব দ্বারা উত্পন্ন ভেরিয়েন্স কোভারিয়েন্স ম্যাট্রিক্স ব্যবহার করে । নিম্নলিখিত পুনরুত্পাদনযোগ্য আর কোড x, y ডেটা এবং 9 টি ট্যাক্সার সাথে একটি এলোমেলো গাছ ব্যবহার করে gnls মডেলটিকে ফিট করে:f(x)=β1(1+xβ2)β3gnlsnlmecorBrownian(phy=tree)ape

require(ape)
require(nlme)
require(expm)
tree <- rtree(9)
x <- c(0,14.51,32.9,44.41,86.18,136.28,178.21,262.3,521.94)
y <- c(100,93.69,82.09,62.24,32.71,48.4,35.98,15.73,9.71)
data <- data.frame(x,y,row.names=tree$tip.label)
model <- y~beta1/((1+(x/beta2))^beta3)
f=function(beta,x) beta[1]/((1+(x/beta[2]))^beta[3])
start <- c(beta1=103.651004,beta2=119.55067,beta3=1.370105)
correlation <- corBrownian(phy=tree)
fit <- gnls(model=model,data=data,start=start,correlation=correlation)
logLik(fit) 

আমি "হাত দ্বারা" লগ-সম্ভাবনা গণনা করতে চাই (আর তে, তবে logLikফাংশনটি ব্যবহার না করে) থেকে প্রাপ্ত আনুমানিক পরামিতিগুলির উপর ভিত্তি করে gnlsএটি আউটপুটটির সাথে মেলে logLik(fit)। দ্রষ্টব্য: আমি পরামিতিগুলি অনুমান করার চেষ্টা করছি না; আমি কেবল gnlsফাংশন দ্বারা অনুমান করা পরামিতিগুলির লগ-সম্ভাবনা গণনা করতে চাই (যদিও কারও কাছে প্যারামিটারগুলি কীভাবে অনুমান করা যায় তার পুনরুত্পাদনযোগ্য উদাহরণ থাকলে gnlsআমি এটি দেখতে আগ্রহী হব!))

আমি কীভাবে আর-তে এটি করা যায় তা নিশ্চিত নই। এস এবং এস-প্লাসের মিশ্রিত-প্রভাব মডেলগুলিতে বর্ণিত লিনিয়ার বীজগণিত স্বরলিপি (পিনহেরো এবং বেটস) আমার মাথার উপরে খুব বেশি এবং আমার কোনও চেষ্টা মেলে না logLik(fit)। এখানে পিনহেরো এবং বেটস দ্বারা বর্ণিত বিশদটি রয়েছে:

সাধারণ অরৈখিক সর্বনিম্ন স্কোয়ার মডেল যেখানে গণনা করা হয় তার জন্য লগ-সম্ভাবনা :ϕ i = i β βyi=fi(ϕi,vi)+ϵiϕi=Aiβ

l(β,σ2,δ|y)=12{Nlog(2πσ2)+i=1M[||yifi(β)||2σ2+log|Λi|]}

যেখানে হল পর্যবেক্ষণের সংখ্যা এবং ।f i ( β ) = f i ( ϕ i , v i )Nfi(β)=fi(ϕi,vi)

y i = Λ - T / 2 i y i f i ( ϕ i , v i ) = Λ - T / 2 i f i ( ϕ i , v i )Λi ইতিবাচক-নির্দিষ্ট, এবংyi=ΛiT/2yifi(ϕi,vi)=ΛiT/2fi(ϕi,vi)

ফিক্সড বা অপরিবর্তিত এবং , এর এমএল মূল্নির্ধারক হয়λ σ 2βλσ2

σ^(β,λ)=i=1M||yifi(β)||2/N

এবং প্রোফাইল লগ সম্ভাবনা হয়

l(β,λ|y)=12{N[log(2π/N)+1]+log(i=1M||yifi(β)||2)+i=1Mlog|Λi|}

যা গাউস-সিডেল অ্যালগরিদমের সাথে এবং এর এমএল অনুমানগুলি খুঁজে পেতে ব্যবহৃত হয় । এর একটি কম পক্ষপাতমূলক অনুমান ব্যবহৃত হয়:λ σ 2βλσ2

σ2=i=1M||Λ^iT/2[yifi(β^)]||2/(Np)

যেখানে দৈর্ঘ্যের প্রতিনিধিত্ব করে ।βpβ

আমি যে নির্দিষ্ট প্রশ্নের মুখোমুখি হচ্ছি তার একটি তালিকা প্রস্তুত করেছি:

  1. কি ? এটি কি দূরত্বের ম্যাট্রিক্স দ্বারা উত্পাদিত হয়েছে , বা এটি কোনওভাবে বা অন্য কোনও কিছু দ্বারা রূপান্তরিত বা প্যারামিটারাইজেশন করা দরকার ? λΛibig_lambda <- vcv.phylo(tree)apeλ
  2. হায় হতে , বা তার কম পক্ষপাতদুষ্ট অনুমান (এই পোস্টে গত সমীকরণ) জন্য সমীকরণ?σ2fit$sigma^2
  3. লগ-সম্ভাবনা গণনা করার জন্য ব্যবহার করা দরকার , বা পরামিতি অনুমানের জন্য এটি কেবল মধ্যবর্তী পদক্ষেপ? এছাড়াও, কীভাবে ব্যবহৃত হয়? এটি কি একক মান বা ভেক্টর এবং এটি সমস্ত বা কেবল অফ- উপাদান ইত্যাদি দ্বারা গুণিত হয় ?λ Λ আমিλλΛi
  4. কি? তা কি প্যাকেজে থাকবে ? যদি তাই হয় তবে আমি কীভাবে যোগফলকে গণনা করতে হবে তা সম্পর্কে আমি বিভ্রান্ত , কারণ একটি মান নয়, একক মান প্রদান করে ভেক্টর।এম i = 1 | | y i - f i ( β ) | | 2||yf(β)||norm(y-f(fit$coefficients,x),"F")Matrixi=1M||yifi(β)||2norm()
  5. কীভাবে একজন গণনা করে? এটা কি যেখানে হয় , অথবা এটি হয় প্যাকেজ থেকে ? যদি এটি হয় তবে একজন ম্যাট্রিক্সের যোগফল কীভাবে গ্রহণ করবেন (বা এটি বোঝানো হয়েছে যে এটি কেবল তির্যক উপাদান)?Λ আমিlog|Λi|log(diag(abs(big_lambda)))big_lambdaΛilogm(abs(big_lambda))expmlogm()
  6. শুধু নিশ্চিত করতে হয়, ভালো গণনা: ?ΛiT/2t(solve(sqrtm(big_lambda)))
  7. কেমন আছেন এবং গণনা করা? এটি কি নিম্নলিখিতগুলির মধ্যে একটি: f i ( β )yifi(β)

y_star <- t(solve(sqrtm(big_lambda))) %*% y

এবং

f_star <- t(solve(sqrtm(big_lambda))) %*% f(fit$coefficients,x)

বা এটা হবে

y_star <- t(solve(sqrtm(big_lambda))) * y

এবং

f_star <- t(solve(sqrtm(big_lambda))) * f(fit$coefficients,x) ?

এই সমস্ত প্রশ্নের উত্তর যদি দেওয়া হয়, তাত্ত্বিকভাবে, আমি মনে করি লগ-সম্ভাবনাটি আউটপুটটি মেলানোর জন্য গণনাযোগ্য হওয়া উচিত logLik(fit)। এই প্রশ্নের যে কোনও বিষয়ে যে কোনও সহায়তা প্রশংসিত হবে। যদি কোনও কিছুর ব্যাখ্যা প্রয়োজন হয়, দয়া করে আমাকে জানান। ধন্যবাদ!

আপডেট : লগ-সম্ভাবনার গণনার জন্য আমি বিভিন্ন সম্ভাবনা নিয়ে পরীক্ষা-নিরীক্ষা করে চলেছি এবং এখন পর্যন্ত আমি যে সেরাটি নিয়ে এসেছি তা এখানেই রয়েছে। logLik_calcপ্রত্যাবর্তিত মান থেকে নিয়মিত 1 থেকে 3 বন্ধ থাকে logLik(fit)। হয় আমি প্রকৃত সমাধানের কাছাকাছি, অথবা এটি খাঁটি কাকতালীয় দ্বারা। কোন চিন্তা?

  C <- vcv.phylo(tree) # variance-covariance matrix
  tC <- t(solve(sqrtm(C))) # C^(-T/2)
  log_C <- log(diag(abs(C))) # log|C|
  N <- length(y)
  y_star <- tC%*%y 
  f_star <- tC%*%f(fit$coefficients,x)
  dif <- y_star-f_star  
  sigma_squared <-  sum(abs(y_star-f_star)^2)/N
  # using fit$sigma^2 also produces a slightly different answer than logLik(fit)
  logLik_calc <- -((N*log(2*pi*(sigma_squared)))+
       sum(((abs(dif)^2)/(sigma_squared))+log_C))/2

আপনার ফাংশনটির সংজ্ঞাটি ডানদিকে একটি হারিয়েছে । xf(x)x
গ্লেন_বি -রিনস্টেট মনিকা

উত্তর:


10

আসুন সরল কেস দিয়ে শুরু করা যাক যেখানে অবশিষ্টাংশগুলির জন্য কোনও সম্পর্ক সম্পর্কিত কাঠামো নেই:

fit <- gnls(model=model,data=data,start=start)
logLik(fit)

লগের সম্ভাবনাটি তখন সহজেই হাত দিয়ে গণনা করা যায়:

N <- fit$dims$N
p <- fit$dims$p
sigma <- fit$sigma * sqrt((N-p)/N)
sum(dnorm(y, mean=fitted(fit), sd=sigma, log=TRUE))

যেহেতু অবশিষ্টাংশগুলি স্বতন্ত্র, আমরা কেবল dnorm(..., log=TRUE)পৃথক লগ সম্ভাবনার শর্তাদি (এবং তারপরে তাদের যোগফলগুলি) পেতে ব্যবহার করতে পারি। বিকল্পভাবে, আমরা ব্যবহার করতে পারি:

sum(dnorm(resid(fit), mean=0, sd=sigma, log=TRUE))

নোট করুন যে fit$sigma"ig " এর কম পক্ষপাতমূলক অনুমান নয় - সুতরাং আমাদের প্রথমে ম্যানুয়ালি সংশোধন করা দরকার।σ2

এখন আরও জটিল ক্ষেত্রে যেখানে অবশিষ্টাংশগুলি পরস্পর সম্পর্কযুক্ত:

fit <- gnls(model=model,data=data,start=start,correlation=correlation)
logLik(fit)

এখানে, আমাদের বহু বিতরণ সাধারণ বিতরণ ব্যবহার করা দরকার। আমি নিশ্চিত যে এটির জন্য কোথাও কোনও ফাংশন রয়েছে, তবে আসুন এটি কেবল হাতে হাতে করা:

N <- fit$dims$N
p <- fit$dims$p
yhat <- cbind(fitted(fit))
R <- vcv(tree, cor=TRUE)
sigma <- fit$sigma * sqrt((N-p)/N)
S <- diag(sigma, nrow=nrow(R)) %*% R %*% diag(sigma, nrow=nrow(R))
-1/2 * log(det(S)) - 1/2 * t(y - yhat) %*% solve(S) %*% (y - yhat) - N/2 * log(2*pi)

অসামঞ্জস্যিত অবশিষ্টাংশগুলির লগ-সম্ভাবনা নিখুঁতভাবে কাজ করেছিল, তবে আমি মাল্টিভারিয়েট স্বাভাবিক বিতরণটি বুঝতে পারি না। এক্ষেত্রে এস কী? আমি এস <- vcv.phylo (ট্রি) চেষ্টা করেছি এবং লগ-সম্ভাবনার জন্য আনুমানিক -700 পেয়েছি, যেখানে লগলিক (ফিট) প্রায় -৩৩ ছিল।
এরিক

দুঃখিত - আমি কোডটি অনুলিপি করে পেলাম mes এখন এটি সম্পূর্ণ। এস হ'ল অবশিষ্টাংশের ভেরিয়েন্স-কোভেরিয়েন্স ম্যাট্রিক্স। আপনি সঠিক পথে ছিলেন ( vcvফাংশন সহ) - তবে আপনাকে পারস্পরিক সম্পর্ক ম্যাট্রিক্স পেতে হবে এবং তারপরে এটিকে ভের-কোভ ম্যাট্রিক্সে রূপান্তর করতে করতে হবে। σ^2
ওল্ফগ্যাং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.