উত্তর:
সম্ভাব্যতা ঘনত্ব ফাংশনটির জন্য স্যাডলিপয়েন্টের সান্নিধ্যকরণ (এটি বৃহত্ ফাংশনগুলির জন্য একইভাবে কাজ করে তবে আমি এখানে কেবল ঘনত্বের ক্ষেত্রে কথা বলব) একটি আশ্চর্যজনকভাবে কাজ করে যাওয়া সান্নিধ্য, এটি কেন্দ্রীয় সীমাবদ্ধতা তত্ত্বটির সংশোধন হিসাবে দেখা যেতে পারে। সুতরাং, এটি কেবলমাত্র সেটিংগুলিতে কাজ করবে যেখানে কেন্দ্রীয় সীমাবদ্ধ উপপাদ্য রয়েছে তবে এর আরও দৃump় অনুমানের প্রয়োজন।
আমরা এই অনুমান দিয়ে শুরু করি যে মুহূর্তটি উত্পন্ন করার কার্যটি বিদ্যমান এবং দ্বিগুণ পার্থক্যযোগ্য। এটি বিশেষত বোঝায় যে সমস্ত মুহুর্তের অস্তিত্ব রয়েছে। যাক মুহূর্ত উৎপাদিত ফাংশন (mgf) সহ একটি দৈব চলক হতে
এবং cgf (cumulant উৎপাদিত ফাংশন) (যেখানে প্রাকৃতিক লোগারিদমকে বোঝায়)। বিকাশে আমি রোনাল্ড ডাব্লু বাটলারকে ঘনিষ্ঠভাবে অনুসরণ করব: "অ্যাপ্লিকেশন সহ স্যাডলপয়েন্ট পিকচার" (সিইপি)। আমরা নির্দিষ্ট ইন্টিগ্রালের সাথে ল্যাপ্লেস সান্নিধ্য ব্যবহার করে স্যাডলিপয়েন্টের সান্নিধ্যে বিকাশ করব। লিখন
এটি আরও কার্যকর আকারে পাওয়ার জন্য এখন আমাদের কিছু কাজ করা দরকার।
থেকে আমরা পেতে
থেকে সম্মান সঙ্গে এই পার্থক্য দেয়
(আমাদের অনুমানের দ্বারা), সুতরাং এবং মধ্যে সম্পর্ক , তাই ভাল সংজ্ঞায়িত। আমাদের একটি অনুমানের প্রয়োজন । সেই লক্ষ্যে, আমরা
আমরা কি নির্ণয় করা এখন মিস্ হয়
এবং আমরা স্যাডলিপয়েন্ট সমীকরণ :
অন্তর্নিহিত পৃথক পৃথকীকরণের মাধ্যমে খুঁজে পেতে পারি
ফলাফলটি হল (আমাদের অনুমান অবধি)
everything সমস্ত কিছু একসাথে রাখলে, আমাদের ঘনত্বের এর চূড়ান্ত স্যাডলিপয়েন্ট থাকে হিসাবে
Saddlepoint পড়তা প্রায়ই উপর ভিত্তি করে গড় ঘনত্ব একটি পড়তা হিসাবে বলা IID পর্যবেক্ষণ । গড়ের সংমিশ্রণ উত্পন্ন ফাংশনটি কেবল , সুতরাং গড়ের জন্য স্যাডলপয়েন্টটি প্রায় অনুভূতি হয়ে যায়
আসুন প্রথম উদাহরণটি দেখুন। আমরা যদি স্ট্যান্ডার্ড স্বাভাবিক ঘনত্ব
মিলিগ্রাম প্রায়) চেষ্টা করি তবে আমরা কী পেতে পারি?
সুতরাং
সুতরাং স্যাডলপয়েন্ট সমীকরণটি এবং স্যাডলিপয়েন্টের সমীকরণটি দেয়
সুতরাং এক্ষেত্রে আনুমানিক সঠিকতা।
আসুন আমরা একটি খুব আলাদা অ্যাপ্লিকেশনটি দেখি: ট্রান্সফর্ম ডোমেনে বুটস্ট্র্যাপ করে আমরা বুটস্ট্র্যাপ বন্টনকে স্যাডলিপয়েন্টের সান্নিধ্য ব্যবহার করে বিশ্লেষণমূলকভাবে বুটস্ট্র্যাপিং করতে পারি!
ধরুন আমাদের কাছে iid কিছু ঘনত্বের থেকে বিতরণ করা হয়েছে (সিমুলেটেড উদাহরণে আমরা ইউনিট এক্সফোনেনশিয়াল ডিস্ট্রিবিউশন ব্যবহার করব)। নমুনা থেকে আমরা মুহুর্ত উত্পন্ন ফাংশন
calc এবং তারপরে অনুশীলনীয় সিজিএফ গণনা করি । আমাদের গড়ের জন্য এমপিরিয়াল এমজিএফ প্রয়োজন যা এবং জন্য অনুপ্রেরণামূলক সিজিএফ
যা আমরা একটি স্যাডলিপয়েন্ট আনুমানিক তৈরি করতে ব্যবহার করি। নিম্নলিখিত কয়েকটি আর কোডে (আর সংস্করণ 3.2.3):
set.seed(1234)
x <- rexp(10)
require(Deriv) ### From CRAN
drule[["sexpmean"]] <- alist(t=sexpmean1(t)) # adding diff rules to
# Deriv
drule[["sexpmean1"]] <- alist(t=sexpmean2(t))
###
make_ecgf_mean <- function(x) {
n <- length(x)
sexpmean <- function(t) mean(exp(t*x))
sexpmean1 <- function(t) mean(x*exp(t*x))
sexpmean2 <- function(t) mean(x*x*exp(t*x))
emgf <- function(t) sexpmean(t)
ecgf <- function(t) n * log( emgf(t/n) )
ecgf1 <- Deriv(ecgf)
ecgf2 <- Deriv(ecgf1)
return( list(ecgf=Vectorize(ecgf),
ecgf1=Vectorize(ecgf1),
ecgf2 =Vectorize(ecgf2) ) )
}
### Now we need a function solving the saddlepoint equation and constructing
### the approximation:
###
make_spa <- function(cumgenfun_list) {
K <- cumgenfun_list[[1]]
K1 <- cumgenfun_list[[2]]
K2 <- cumgenfun_list[[3]]
# local function for solving the speq:
solve_speq <- function(x) {
# Returns saddle point!
uniroot(function(s) K1(s)-x,lower=-100,
upper = 100,
extendInt = "yes")$root
}
# Function finding fhat for one specific x:
fhat0 <- function(x) {
# Solve saddlepoint equation:
s <- solve_speq(x)
# Calculating saddlepoint density value:
(1/sqrt(2*pi*K2(s)))*exp(K(s)-s*x)
}
# Returning a vectorized version:
return(Vectorize(fhat0))
} #end make_fhat
(আমি এটিকে সাধারণ কোড হিসাবে লেখার চেষ্টা করেছি যা অন্যান্য সিজিএফএসের জন্য সহজেই সংশোধন করা যায়, তবে কোডটি এখনও খুব জোরালো নয় ...)
তারপরে আমরা একে একক ঘনিষ্ঠ বিতরণ থেকে দশটি স্বতন্ত্র পর্যবেক্ষণের নমুনার জন্য ব্যবহার করি। আমরা সাধারন ননপ্যারামেট্রিক বুটস্ট্র্যাপিং "হাত দিয়ে" করি, ফলস্বরূপ ফলস্বরূপ বুটস্ট্র্যাপ হিস্টোগ্রামটি প্লট করি, এবং স্যাডলিপয়েন্টের সান্নিধ্যকে অতিক্রম করি:
> ECGF <- make_ecgf_mean(x)
> fhat <- make_spa(ECGF)
> fhat
function (x)
{
args <- lapply(as.list(match.call())[-1L], eval, parent.frame())
names <- if (is.null(names(args)))
character(length(args))
else names(args)
dovec <- names %in% vectorize.args
do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs = list(args[!dovec]),
SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES))
}
<environment: 0x4e5a598>
> boots <- replicate(10000, mean(sample(x, length(x), replace=TRUE)), simplify=TRUE)
> boots <- replicate(10000, mean(sample(x, length(x), replace=TRUE)), simplify=TRUE)
> hist(boots, prob=TRUE)
> plot(fhat, from=0.001, to=2, col="red", add=TRUE)
ফলস্বরূপ প্লট প্রদান:
অনুমানটি বরং ভাল বলে মনে হচ্ছে!
আমরা স্যাডলপয়েন্টের সান্নিধ্যকে একীভূত করে এবং পুনরুদ্ধার করে এর থেকে আরও ভাল আনুমানিকতা পেতে পারি:
> integrate(fhat, lower=0.1, upper=2)
1.026476 with absolute error < 9.7e-07
এখন এই সংখ্যার উপর ভিত্তি করে ক্রমবর্ধমান বিতরণ ফাংশনটি সংখ্যার একীকরণের মাধ্যমে পাওয়া যেতে পারে তবে এটির জন্য সরাসরি স্যাডলিপয়েন্টের সান্নিধ্য তৈরি করাও সম্ভব। তবে এটি অন্য পোস্টের জন্য, এটি যথেষ্ট দীর্ঘ।
অবশেষে, কিছু মন্তব্য উপরের উন্নয়নের বাইরে রেখে গেছে। In এ আমরা তৃতীয় শব্দটিকে অগ্রাহ্য করে প্রায় একটি । কেন আমরা এটা করতে পারি? একটি পর্যবেক্ষণ হ'ল সাধারণ ঘনত্বের ক্রিয়াকলাপের জন্য, বাম-আউট টার্মটি কোনওরকম অবদান রাখে না, যাতে আনুমানিকতাটি সঠিক। সুতরাং, যেহেতু স্যাডলিপয়েন্ট-সান্নিধ্যটি কেন্দ্রীয় সীমাবদ্ধ তত্ত্বটির একটি সংশোধন, সুতরাং আমরা কিছুটা স্বাভাবিকের কাছাকাছি, সুতরাং এটি ভালভাবে কাজ করা উচিত। একটি নির্দিষ্ট উদাহরণগুলিও দেখতে পারে। পইসন বিতরণে স্যাডলিপয়েন্টের সান্নিধ্যের দিকে তাকানো, সেই বাম-আউট তৃতীয় মেয়াদের দিকে তাকানো, এই ক্ষেত্রে এটি একটি ট্রাইগমা ফাংশনে পরিণত হয়, যা তর্কটি শূন্যের কাছাকাছি না থাকলে প্রকৃতপক্ষে সমতল হয়।
অবশেষে নাম কেন? নামটি জটিল-বিশ্লেষণ কৌশলগুলি ব্যবহার করে বিকল্প ডেরাইভেশন থেকে এসেছে। পরে আমরা এটি দেখতে পারি, তবে অন্য পোস্টে!
এখানে আমি কেজিটিলের উত্তরের উপর প্রসারিত করেছি এবং আমি সেই পরিস্থিতিতে মনোনিবেশ করেছি যেখানে কুমুল্যান্ট জেনারেটিং ফাংশন (সিজিএফ) অজানা, তবে এটি ডেটা থেকে অনুমান করা যায় , যেখানে । সবচেয়ে সহজ সিজিএফ অনুমানক সম্ভবত ডেভিসন এবং হিঙ্কলির (1988) যা কেজেটিলের বুটস্ট্র্যাপ উদাহরণে ব্যবহৃত হয়। এই মূল্নির্ধারক অসুবিধা হল যে ফলে saddlepoint সমীকরণ রয়েছে সমাধান করা যেতে পারে শুধুমাত্র যদি , পয়েন্ট যা আমরা saddlepoint ঘনত্ব নির্ণয় করা চাই, এর উত্তল জাহাজের কাঠাম মধ্যে বৃক্ষের পতন হয় ।
ওয়াং (1992) এবং ফ্যাসিওলো এট আল। (2016) দুই বিকল্প CGF estimators, এমনভাবে saddlepoint সমীকরণ কোন সমাধান করা যেতে পারে মধ্যে পরিকল্পিত প্রস্তাব করে আপনি এই সমস্যার সুরাহা । ফ্যাসিওলো এট এর সমাধান। (2016), বর্ধিত এম্পিরিকাল স্যাডলিপয়েন্ট অ্যাডক্সিমেশন ইএসএ নামে পরিচিত, এসডাল আর প্যাকেজে প্রয়োগ করা হয়েছে এবং আমি এখানে বেশ কয়েকটি উদাহরণ দিচ্ছি।
একটি সাধারণ অবিচ্ছিন্ন উদাহরণ হিসাবে, আনুমানিক একটি ঘনত্বের জন্য ESA ব্যবহার বিবেচনা করুন ।
library("devtools")
install_github("mfasiolo/esaddle")
library("esaddle")
########## Simulating data
x <- rgamma(1000, 2, 1)
# Fixing tuning parameter of ESA
decay <- 0.05
# Evaluating ESA at several point
xSeq <- seq(-2, 8, length.out = 200)
tmp <- dsaddle(y = xSeq, X = x, decay = decay, log = TRUE)
# Plotting true density, ESA and normal approximation
plot(xSeq, exp(tmp$llk), type = 'l', ylab = "Density", xlab = "x")
lines(xSeq, dgamma(xSeq, 2, 1), col = 3)
lines(xSeq, dnorm(xSeq, mean(x), sd(x)), col = 2)
suppressWarnings( rug(x) )
legend("topright", c("ESA", "Truth", "Gaussian"), col = c(1, 3, 2), lty = 1)
এই ফিট
কম্বলটির দিকে তাকালে এটা স্পষ্ট হয় যে আমরা ESA ঘনত্বের তথ্যের ব্যাপ্তির বাইরে মূল্যায়ন করেছি। আরও চ্যালেঞ্জিং উদাহরণ হ'ল নিম্নলিখিত রেপড বাইভারিয়েট গাউসিয়ান।
# Function that evaluates the true density
dwarp <- function(x, alpha) {
d <- length(alpha) + 1
lik <- dnorm(x[ , 1], log = TRUE)
tmp <- x[ , 1]^2
for(ii in 2:d)
lik <- lik + dnorm(x[ , ii] - alpha[ii-1]*tmp, log = TRUE)
lik
}
# Function that simulates from true distribution
rwarp <- function(n = 1, alpha) {
d <- length(alpha) + 1
z <- matrix(rnorm(n*d), n, d)
tmp <- z[ , 1]^2
for(ii in 2:d) z[ , ii] <- z[ , ii] + alpha[ii-1]*tmp
z
}
set.seed(64141)
# Creating 2d grid
m <- 50
expansion <- 1
x1 <- seq(-2, 3, length=m)* expansion;
x2 <- seq(-3, 3, length=m) * expansion
x <- expand.grid(x1, x2)
# Evaluating true density on grid
alpha <- 1
dw <- dwarp(x, alpha = alpha)
# Simulate random variables
X <- rwarp(1000, alpha = alpha)
# Evaluating ESA density
dwa <- dsaddle(as.matrix(x), X, decay = 0.1, log = FALSE)$llk
# Plotting true density
par(mfrow = c(1, 2))
plot(X, pch=".", col=1, ylim = c(min(x2), max(x2)), xlim = c(min(x1), max(x1)),
main = "True density", xlab = expression(X[1]), ylab = expression(X[2]))
contour(x1, x2, matrix(dw, m, m), levels = quantile(as.vector(dw), seq(0.8, 0.995, length.out = 10)), col=2, add=T)
# Plotting ESA density
plot(X, pch=".",col=2, ylim = c(min(x2), max(x2)), xlim = c(min(x1), max(x1)),
main = "ESA density", xlab = expression(X[1]), ylab = expression(X[2]))
contour(x1, x2, matrix(dwa, m, m), levels = quantile(as.vector(dwa), seq(0.8, 0.995, length.out = 10)), col=2, add=T)
ফিট বেশ ভাল।
কেজিলের দুর্দান্ত উত্তরের জন্য ধন্যবাদ আমি নিজেই একটি সামান্য উদাহরণ নিয়ে আসার চেষ্টা করছি, যা আমি আলোচনা করতে চাই কারণ এটি মনে হয় কোনও প্রাসঙ্গিক বিষয় উত্থাপন করেছে:
বিবেচনা করুন বন্টন। এবং এর ডেরাইভেটিভগুলি এখানে পাওয়া যাবে এবং নীচের কোডটিতে ফাংশনগুলিতে পুনরুত্পাদন করা হবে।
x <- seq(0.01,20,by=.1)
m <- 5
K <- function(t,m) -1/2*m*log(1-2*t)
K1 <- function(t,m) m/(1-2*t)
K2 <- function(t,m) 2*m/(1-2*t)^2
saddlepointapproximation <- function(x) {
t <- .5-m/(2*x)
exp( K(t,m)-t*x )*sqrt( 1/(2*pi*K2(t,m)) )
}
plot( x, saddlepointapproximation(x), type="l", col="salmon", lwd=2)
lines(x, dchisq(x,df=m), col="lightgreen", lwd=2)
এটি উত্পাদন করে
এটি স্পষ্টতই একটি আনুমানিক উত্পাদন করে যা ঘনত্বের গুণগত বৈশিষ্ট্যগুলি সঠিকভাবে পায়, তবে কেজিলের মন্তব্যে নিশ্চিত হয়েছে যে এটি যথাযথ ঘনত্ব নয়, কারণ এটি সর্বত্র যথাযথ ঘনত্বের উপরে। নীচের অনুসারে আনুমানিক পুনরায় সঞ্চালন নীচে প্লট করা প্রায় নগণ্য আনুমানিক ত্রুটি দেয়।
scalingconstant <- integrate(saddlepointapproximation, x[1], x[length(x)])$value
approximationerror_unscaled <- dchisq(x,df=m) - saddlepointapproximation(x)
approximationerror_scaled <- dchisq(x,df=m) - saddlepointapproximation(x) /
scalingconstant
plot( x, approximationerror_unscaled, type="l", col="salmon", lwd=2)
lines(x, approximationerror_scaled, col="blue", lwd=2)
approximationerror_unscaled/approximationerror_scaled
25.90798 এর আশেপাশে ঘোরাফেরা করতে বেরিয়েছে