আমি দ্বারা অপ্টিমাইজড সর্বনিম্ন স্কোয়ার রিগ্রেশনের লগ-সম্ভাবনা গণনা করার চেষ্টা করছি the আর প্যাকেজে ফাংশন করে ব্রাউনিয়ান গতি ( প্যাকেজ থেকে ) ধরে ধরে এএ ফাইলেজেনেটিক ট্রিতে দূরত্ব দ্বারা উত্পন্ন ভেরিয়েন্স কোভারিয়েন্স ম্যাট্রিক্স ব্যবহার করে । নিম্নলিখিত পুনরুত্পাদনযোগ্য আর কোড x, y ডেটা এবং 9 টি ট্যাক্সার সাথে একটি এলোমেলো গাছ ব্যবহার করে gnls মডেলটিকে ফিট করে:gnls
nlme
corBrownian(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 β β
যেখানে হল পর্যবেক্ষণের সংখ্যা এবং ।f ∗ i ( β ) = f ∗ i ( ϕ i , v i )
y ∗ i = Λ - T / 2 i y i f ∗ i ( ϕ i , v i ) = Λ - T / 2 i f i ( ϕ i , v i ) ইতিবাচক-নির্দিষ্ট, এবং
ফিক্সড বা অপরিবর্তিত এবং , এর এমএল মূল্নির্ধারক হয়λ σ 2
এবং প্রোফাইল লগ সম্ভাবনা হয়
যা গাউস-সিডেল অ্যালগরিদমের সাথে এবং এর এমএল অনুমানগুলি খুঁজে পেতে ব্যবহৃত হয় । এর একটি কম পক্ষপাতমূলক অনুমান ব্যবহৃত হয়:λ σ 2
যেখানে দৈর্ঘ্যের প্রতিনিধিত্ব করে ।β
আমি যে নির্দিষ্ট প্রশ্নের মুখোমুখি হচ্ছি তার একটি তালিকা প্রস্তুত করেছি:
- কি ? এটি কি দূরত্বের ম্যাট্রিক্স দ্বারা উত্পাদিত হয়েছে , বা এটি কোনওভাবে বা অন্য কোনও কিছু দ্বারা রূপান্তরিত বা প্যারামিটারাইজেশন করা দরকার ? λ
big_lambda <- vcv.phylo(tree)
ape
- হায় হতে , বা তার কম পক্ষপাতদুষ্ট অনুমান (এই পোস্টে গত সমীকরণ) জন্য সমীকরণ?
fit$sigma^2
- লগ-সম্ভাবনা গণনা করার জন্য ব্যবহার করা দরকার , বা পরামিতি অনুমানের জন্য এটি কেবল মধ্যবর্তী পদক্ষেপ? এছাড়াও, কীভাবে ব্যবহৃত হয়? এটি কি একক মান বা ভেক্টর এবং এটি সমস্ত বা কেবল অফ- উপাদান ইত্যাদি দ্বারা গুণিত হয় ?λ Λ আমি
- কি? তা কি প্যাকেজে থাকবে ? যদি তাই হয় তবে আমি কীভাবে যোগফলকে গণনা করতে হবে তা সম্পর্কে আমি বিভ্রান্ত , কারণ একটি মান নয়, একক মান প্রদান করে ভেক্টর।এম ∑ i = 1 | | y ∗ i - f ∗ i ( β ) | | 2
norm(y-f(fit$coefficients,x),"F")
Matrix
norm()
- কীভাবে একজন গণনা করে? এটা কি যেখানে হয় , অথবা এটি হয় প্যাকেজ থেকে ? যদি এটি হয় তবে একজন ম্যাট্রিক্সের যোগফল কীভাবে গ্রহণ করবেন (বা এটি বোঝানো হয়েছে যে এটি কেবল তির্যক উপাদান)?Λ আমি
log(diag(abs(big_lambda)))
big_lambda
logm(abs(big_lambda))
expm
logm()
- শুধু নিশ্চিত করতে হয়, ভালো গণনা: ?
t(solve(sqrtm(big_lambda)))
- কেমন আছেন এবং গণনা করা? এটি কি নিম্নলিখিতগুলির মধ্যে একটি: f ∗ i ( β )
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