(यदि आवश्यक हो तो R कोड को अनदेखा करें, क्योंकि मेरा मुख्य प्रश्न भाषा-स्वतंत्र है)
अगर मैं एक साधारण सांख्यिकीय की परिवर्तनशीलता को देखना चाहता हूं (उदा: माध्य), मुझे पता है कि मैं इसे सिद्धांत के माध्यम से कर सकता हूं:
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
इसलिए जिन आंकड़ों में मेरी दिलचस्पी है, वे इन nls मापदंडों के अधिक स्थिर अनुमान हैं - शायद बूटस्ट्रैप प्रतिकृति की संख्या में उनके साधन।
# 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
क्या यह एक समझदार दृष्टिकोण है? क्या इस तरह अस्थिर नॉनलाइन मॉडल के मापदंडों पर निष्कर्ष के लिए एक बेहतर सामान्य दृष्टिकोण है? (मुझे लगता है कि मैं पिछले बिट के लिए सिद्धांत पर भरोसा करने के बजाय, यहां फिर से शुरू करने की दूसरी परत कर सकता हूं, लेकिन यह मॉडल के आधार पर बहुत समय लग सकता है। अभी भी, मुझे यकीन नहीं है कि अगर ये मानक त्रुटियां होंगी। किसी भी चीज के लिए उपयोगी हो, क्योंकि वे 0 से संपर्क करेंगे यदि मैं बूटस्ट्रैप प्रतिकृति की संख्या बढ़ाता हूं।)
बहुत धन्यवाद, और, वैसे, मैं एक इंजीनियर हूं इसलिए कृपया मुझे इधर-उधर एक रिश्तेदार नौसिखिया होने के लिए माफ कर दें।
nls
फिट का विशाल बहुमत विफल हो सकता है, लेकिन, जो कि अभिसरण करते हैं, पूर्वाग्रह बहुत बड़ा होगा और भविष्यवाणी की गई मानक त्रुटियां / सीआई स्वाभाविक रूप से छोटी हैं।nlsBoot
50% सफल फिट की एक तदर्थ आवश्यकता का उपयोग करता है, लेकिन मैं आपसे सहमत हूं कि सशर्त वितरण की समानता (डिस) समान रूप से एक चिंता का विषय है।