(প্রয়োজনে আর কোডটি উপেক্ষা করুন, কারণ আমার মূল প্রশ্নটি ভাষা-স্বতন্ত্র)
যদি আমি একটি সাধারণ পরিসংখ্যানের (যেমন: অর্থ) পরিবর্তনশীলতাটি দেখতে চাই তবে আমি জানি যে আমি এটি তত্ত্বের মাধ্যমে এটি করতে পারি:
x = rnorm(50)
# Estimate standard error from theory
summary(lm(x~1))
# same as...
sd(x) / sqrt(length(x))
বা বুটস্ট্র্যাপের মতো:
library(boot)
# Estimate standard error from bootstrap
(x.bs = boot(x, function(x, inds) mean(x[inds]), 1000))
# which is simply the standard *deviation* of the bootstrap distribution...
sd(x.bs$t)
তবে, আমি যা ভাবছি তা হ'ল, কিছু পরিস্থিতিতে বুটস্ট্র্যাপ বিতরণের মানক ত্রুটির দিকে নজর দেওয়া কি কার্যকর / বৈধ (?) হতে পারে ? যে পরিস্থিতিটির সাথে আমি মুখোমুখি হচ্ছি তা একটি তুলনামূলক কোলাহলহীন লাইনযুক্ত ফাংশন, যেমন:
# Simulate dataset
set.seed(12345)
n = 100
x = runif(n, 0, 20)
y = SSasymp(x, 5, 1, -1) + rnorm(n, sd=2)
dat = data.frame(x, y)
এখানে মডেলটি মূল ডেটা সেট ব্যবহার করে রূপান্তর করে না,
> (fit = nls(y ~ SSasymp(x, Asym, R0, lrc), dat))
Error in numericDeriv(form[[3L]], names(ind), env) :
Missing value or an infinity produced when evaluating the model
সুতরাং পরিবর্তে আমি যে পরিসংখ্যানগুলিতে আগ্রহী সেগুলি হ'ল এই এনএলএস প্যারামিটারগুলির আরও স্থিতিশীল অনুমান - সম্ভবত তাদের বেশ কয়েকটি বুটস্ট্র্যাপের অনুলিপিগুলিতে means
# Obtain mean bootstrap nls parameter estimates
fit.bs = boot(dat, function(dat, inds)
tryCatch(coef(nls(y ~ SSasymp(x, Asym, R0, lrc), dat[inds, ])),
error=function(e) c(NA, NA, NA)), 100)
pars = colMeans(fit.bs$t, na.rm=T)
এগুলি প্রকৃতপক্ষে বল পার্কে আমি আসল তথ্যগুলি অনুকরণ করার জন্য ব্যবহার করি:
> pars
[1] 5.606190 1.859591 -1.390816
একটি চক্রান্ত করা সংস্করণ এর মত দেখাচ্ছে:
# Plot
with(dat, plot(x, y))
newx = seq(min(x), max(x), len=100)
lines(newx, SSasymp(newx, pars[1], pars[2], pars[3]))
lines(newx, SSasymp(newx, 5, 1, -1), col='red')
legend('bottomright', c('Actual', 'Predicted'), bty='n', lty=1, col=2:1)
এখন, আমি যদি এই স্থিতিশীল পরামিতি অনুমানগুলির পরিবর্তনশীলতা চাই তবে আমি মনে করি যে আমি এই বুটস্ট্র্যাপ বিতরণের স্বাভাবিকতা ধরে রেখে কেবল তাদের স্ট্যান্ডার্ড ত্রুটিগুলি গণনা করতে পারি:
> apply(fit.bs$t, 2, function(x) sd(x, na.rm=T) / sqrt(length(na.omit(x))))
[1] 0.08369921 0.17230957 0.08386824
এটি কি কোনও বুদ্ধিমান পন্থা? এর মতো অস্থির ননলাইনার মডেলগুলির পরামিতিগুলিতে অনুমানের জন্য আরও ভাল সাধারণ পদ্ধতির কি নেই? (আমি মনে করি আমি শেষ বিটের জন্য তত্ত্বের উপর নির্ভর না করে এখানে পুনরায় মডেলিংয়ের দ্বিতীয় স্তরটি করতে পারতাম, তবে এটি মডেলের উপর নির্ভর করে অনেক সময় নিতে পারে still তবুও, আমি নিশ্চিত নই যে এই স্ট্যান্ডার্ড ত্রুটিগুলি হবে কিনা) যে কোনও কিছুর জন্য উপকারী হবেন, যেহেতু আমি যদি বুটস্ট্র্যাপের প্রতিরূপের সংখ্যা বাড়িয়ে তুলি তবে তারা 0-এ পৌঁছাবে)
অনেক ধন্যবাদ, এবং, যাইহোক, আমি একজন প্রকৌশলী তাই দয়া করে আমাকে আশেপাশের একটি আপেক্ষিক নবাগত হিসাবে ক্ষমা করুন।
nls
ব্যর্থ হতে পারে তবে একত্রিত হওয়াগুলির মধ্যে পক্ষপাত বিশাল হবে এবং পূর্বাভাসিত স্ট্যান্ডার্ড ত্রুটিগুলি / সিআই খুব সহজেই ছোট হবে।nlsBoot
50% সফল ফিটের অ্যাডহক প্রয়োজনীয়তা ব্যবহার করে, তবে আমি আপনাকে সম্মত করি যে শর্তাধীন বিতরণগুলির (ডিস্ক) মিলটি সমানভাবে উদ্বেগজনক।