আর-এ বুটস্ট্র্যাপিং আসলে কীভাবে কাজ করে?


22

আমি আর-তে বুট প্যাকেজটি খতিয়ে দেখছি এবং কীভাবে এটি ব্যবহার করতে হবে তার জন্য বেশ কয়েকটি ভাল প্রাইমার খুঁজে পেয়েছি, "পর্দার অন্তরালে" ঠিক কী ঘটছে তা বর্ণনা করে এমন কিছু খুঁজে পাইনি। উদাহরণস্বরূপ, উদাহরণস্বরূপ , গাইডটি বুটস্ট্র্যাপ রিগ্রেশনটির প্রারম্ভিক বিন্দু হিসাবে স্ট্যান্ডার্ড রিগ্রেশন সহগকে কীভাবে ব্যবহার করবেন তা দেখায় তবে বুটস্ট্র্যাপ পদ্ধতিতে আসলে বুটস্ট্র্যাপ পদ্ধতিটি কী করছে তা ব্যাখ্যা করে না। এটি ঘটে চলেছে এমন কিছু ধরণের পুনরাবৃত্তি প্রক্রিয়া রয়েছে যা ঘটছে তবে ঠিক কী চলছে তা আমি বের করতে পারি না।


3
এটি শেষ হওয়ার পরে দীর্ঘ সময় হয়েছে তাই আমি জানি না এটি আপনার প্রশ্নের জবাব দেবে কিনা তবে বুট প্যাকেজটি বিশেষত ডেভিসন, এসি, এবং হিঙ্কলে, ডিভি (1997) এর বিস্তারিত পদ্ধতিগুলির উপর ভিত্তি করে তৈরি। বুটস্ট্র্যাপ পদ্ধতি এবং তাদের প্রয়োগ। কেমব্রিজ: কেমব্রিজ বিশ্ববিদ্যালয় প্রেস। ( বুট প্যাকেজটির জন্য সহায়তা ফাইলটিতেও উল্লেখটি উদ্ধৃত করা হয়েছে ))
গালা

উত্তর:


34

বুটস্ট্র্যাপের বেশ কয়েকটি "স্বাদ" বা ফর্ম রয়েছে (যেমন নন-প্যারামেট্রিক, প্যারামেট্রিক, রেসিডুয়াল রিসম্পলিং এবং আরও অনেক কিছু)। উদাহরণস্বরূপ বুটস্ট্র্যাপকে নন-প্যারামেট্রিক বুটস্ট্র্যাপ বা কেস রিসম্পলিং বলা হয় ( রিগ্রেশন-এ অ্যাপ্লিকেশনগুলির জন্য এখানে , এখানে , এখানে এবং এখানে দেখুন )। মূল ধারণাটি হ'ল আপনি আপনার নমুনাকে জনসংখ্যা হিসাবে বিবেচনা করেন এবং প্রতিস্থাপনের সাথে বার বার এটি থেকে নতুন নমুনাগুলি আঁকেন । সমস্ত আসল পর্যবেক্ষণগুলিতে নতুন নমুনায় টানা যাওয়ার সমান সম্ভাবনা রয়েছে। তারপরে আপনি আগ্রহের পরিসংখ্যান (গুলি) গণনা করুন এবং সংরক্ষণ করুন, এটি নতুন আঁকা নমুনা ব্যবহার করে মধ্যমা বা রিগ্রেশন সহগগুলি হতে পারে। এটি বার পুনরাবৃত্তি করা হয় । প্রতিটি পুনরুক্তিতে, আপনার আসল নমুনা থেকে কিছু পর্যবেক্ষণ একাধিকবার আঁকা হয় যখন কিছু পর্যবেক্ষণ একেবারে আঁকতে পারে না। পরে পুনরাবৃত্তিও, আপনি আছে পরিসংখ্যাত (গুলি) আগ্রহের এর বুটস্ট্র্যাপ অনুমান সঞ্চিত (যেমন যদি এবং সুদের পরিসংখ্যাত গড় করা হয়, আপনি কি বলতে চান 1000 স্থানে বুট-স্ট্র্যাপ অনুমান থাকে)। শেষ অবধি, সংক্ষিপ্ত পরিসংখ্যান যেমন গড়, মধ্যমা এবং বুটস্ট্র্যাপ-অনুমানের মান বিচ্যুতি গণনা করা হয়।এনএনএনএন=1000এন

বুটস্ট্র্যাপিং প্রায়শই এর জন্য ব্যবহৃত হয়:

  1. আত্মবিশ্বাসের অন্তরগুলির গণনা (এবং স্ট্যান্ডার্ড ত্রুটির অনুমান)
  2. বিন্দু অনুমানের পক্ষপাতিত্ব অনুমান

আছে বিভিন্ন পদ্ধতি বুটস্ট্র্যাপ নমুনার উপর ভিত্তি করে আস্থা অন্তর গণক জন্য ( এই কাগজে ব্যাখ্যা এবং দিক নির্দেশনা প্রদান করে)। 95% -বিশ্বাসের ব্যবধান গণনা করার জন্য একটি খুব সহজ পদ্ধতি হ'ল বুটস্ট্র্যাপের নমুনাগুলির অভিজ্ঞতাগত 2.5th এবং 97.5 তম পার্সেন্টাইল গণনা করা হচ্ছে (এই অন্তরটিকে বুটস্ট্র্যাপ পারসেন্টাইল ইন্টারভাল বলা হয় ; নীচের কোডটি দেখুন)। পক্ষপাত-সংশোধন এবং ত্বরণযুক্ত বুটস্ট্র্যাপ (বিসিএ) এর মতো আরও উন্নততর পদ্ধতি রয়েছে বলে সাধারণ পারসেন্টাইল ব্যবধানটি খুব কমই অনুশীলনে ব্যবহৃত হয়। বিসিএ ব্যবধানগুলি বুটস্ট্র্যাপ বিতরণে পক্ষপাত এবং স্কিউনেস উভয়ের জন্য সামঞ্জস্য করে।

পক্ষপাত কেবল গড় মধ্যে পার্থক্য হিসাবে অনুমান করা হয় সঞ্চিত বুটস্ট্র্যাপ নমুনা এবং মূল অনুমান (গুলি)।এন

আসুন ওয়েবসাইট থেকে উদাহরণটি প্রতিলিপি করুন তবে আমি উপরে বর্ণিত ধারণাগুলি অন্তর্ভুক্ত করে আমাদের নিজস্ব লুপ ব্যবহার করে (প্রতিস্থাপনের সাথে বারবার অঙ্কন করছি):

#-----------------------------------------------------------------------------
# Load packages
#-----------------------------------------------------------------------------

require(ggplot2)
require(pscl)
require(MASS)
require(boot)

#-----------------------------------------------------------------------------
# Load data
#-----------------------------------------------------------------------------

zinb <- read.csv("http://www.ats.ucla.edu/stat/data/fish.csv")
zinb <- within(zinb, {
  nofish <- factor(nofish)
  livebait <- factor(livebait)
  camper <- factor(camper)
})

#-----------------------------------------------------------------------------
# Calculate zero-inflated regression
#-----------------------------------------------------------------------------

m1 <- zeroinfl(count ~ child + camper | persons, data = zinb,
               dist = "negbin", EM = TRUE)

#-----------------------------------------------------------------------------
# Store the original regression coefficients
#-----------------------------------------------------------------------------

original.estimates <- as.vector(t(do.call(rbind, coef(summary(m1)))[, 1:2]))

#-----------------------------------------------------------------------------
# Set the number of replications
#-----------------------------------------------------------------------------

n.sim <- 2000

#-----------------------------------------------------------------------------
# Set up a matrix to store the results
#-----------------------------------------------------------------------------

store.matrix <- matrix(NA, nrow=n.sim, ncol=12)

#-----------------------------------------------------------------------------
# The loop
#-----------------------------------------------------------------------------

set.seed(123)

for(i in 1:n.sim) {

  #-----------------------------------------------------------------------------
  # Draw the observations WITH replacement
  #-----------------------------------------------------------------------------

  data.new <- zinb[sample(1:dim(zinb)[1], dim(zinb)[1], replace=TRUE),]

  #-----------------------------------------------------------------------------
  # Calculate the model with this "new" data
  #-----------------------------------------------------------------------------

  m <- zeroinfl(count ~ child + camper | persons,
                data = data.new, dist = "negbin",
                start = list(count = c(1.3711, -1.5152, 0.879),
                             zero = c(1.6028, -1.6663)))

  #-----------------------------------------------------------------------------
  # Store the results
  #-----------------------------------------------------------------------------

  store.matrix[i, ] <- as.vector(t(do.call(rbind, coef(summary(m)))[, 1:2]))

}


#-----------------------------------------------------------------------------
# Save the means, medians and SDs of the bootstrapped statistics
#-----------------------------------------------------------------------------

boot.means <- colMeans(store.matrix, na.rm=T)

boot.medians <- apply(store.matrix,2,median, na.rm=T)

boot.sds <- apply(store.matrix,2,sd, na.rm=T)

#-----------------------------------------------------------------------------
# The bootstrap bias is the difference between the mean bootstrap estimates
# and the original estimates
#-----------------------------------------------------------------------------

boot.bias <- colMeans(store.matrix, na.rm=T) - original.estimates

#-----------------------------------------------------------------------------
# Basic bootstrap CIs based on the empirical quantiles
#-----------------------------------------------------------------------------

conf.mat <- matrix(apply(store.matrix, 2 ,quantile, c(0.025, 0.975), na.rm=T),
ncol=2, byrow=TRUE)
colnames(conf.mat) <- c("95%-CI Lower", "95%-CI Upper")

এবং এখানে আমাদের সারাংশ টেবিল:

#-----------------------------------------------------------------------------
# Set up summary data frame
#-----------------------------------------------------------------------------

summary.frame <- data.frame(mean=boot.means, median=boot.medians,
sd=boot.sds, bias=boot.bias, "CI_lower"=conf.mat[,1], "CI_upper"=conf.mat[,2])

summary.frame

      mean  median       sd       bias CI_lower CI_upper
1   1.2998  1.3013  0.39674 -0.0712912  0.51960   2.0605
2   0.2527  0.2486  0.03208 -0.0034461  0.19898   0.3229
3  -1.5662 -1.5572  0.26220 -0.0509239 -2.12900  -1.0920
4   0.2005  0.1986  0.01949  0.0049019  0.16744   0.2418
5   0.9544  0.9252  0.48915  0.0753405  0.03493   1.9025
6   0.2702  0.2688  0.02043  0.0009583  0.23272   0.3137
7  -0.8997 -0.9082  0.22174  0.0856793 -1.30664  -0.4380
8   0.1789  0.1781  0.01667  0.0029513  0.14494   0.2140
9   2.0683  1.7719  1.59102  0.4654898  0.44150   8.0471
10  4.0209  0.8270 13.23434  3.1845710  0.58114  57.6417
11 -2.0969 -1.6717  1.56311 -0.4306844 -8.43440  -1.1156
12  3.8660  0.6435 13.27525  3.1870642  0.33631  57.6062

কিছু ব্যাখ্যা

  • বুটস্ট্র্যাপ অনুমানের গড় এবং মূল অনুমানের মধ্যে পার্থক্য হ'ল আউটপুটে "পক্ষপাত" বলা হয় boot
  • boot"স্ট্যান্ড। ত্রুটি" কলগুলির আউটপুটটি বুটস্ট্র্যাপযুক্ত অনুমানের মানক বিচ্যুতি

এর থেকে আউটপুটটির সাথে তুলনা করুন boot:

#-----------------------------------------------------------------------------
# Compare with boot output and confidence intervals
#-----------------------------------------------------------------------------

set.seed(10)
res <- boot(zinb, f, R = 2000, parallel = "snow", ncpus = 4)

res

Bootstrap Statistics :
       original       bias    std. error
t1*   1.3710504 -0.076735010  0.39842905
t2*   0.2561136 -0.003127401  0.03172301
t3*  -1.5152609 -0.064110745  0.26554358
t4*   0.1955916  0.005819378  0.01933571
t5*   0.8790522  0.083866901  0.49476780
t6*   0.2692734  0.001475496  0.01957823
t7*  -0.9853566  0.083186595  0.22384444
t8*   0.1759504  0.002507872  0.01648298
t9*   1.6031354  0.482973831  1.58603356
t10*  0.8365225  3.240981223 13.86307093
t11* -1.6665917 -0.453059768  1.55143344
t12*  0.6793077  3.247826469 13.90167954

perc.cis <- matrix(NA, nrow=dim(res$t)[2], ncol=2)
    for( i in 1:dim(res$t)[2] ) {
  perc.cis[i,] <- boot.ci(res, conf=0.95, type="perc", index=i)$percent[4:5] 
}
colnames(perc.cis) <- c("95%-CI Lower", "95%-CI Upper")

perc.cis 

      95%-CI Lower 95%-CI Upper
 [1,]      0.52240       2.1035
 [2,]      0.19984       0.3220
 [3,]     -2.12820      -1.1012
 [4,]      0.16754       0.2430
 [5,]      0.04817       1.9084
 [6,]      0.23401       0.3124
 [7,]     -1.29964      -0.4314
 [8,]      0.14517       0.2149
 [9,]      0.29993       8.0463
[10,]      0.57248      56.6710
[11,]     -8.64798      -1.1088
[12,]      0.33048      56.6702

#-----------------------------------------------------------------------------
# Our summary table
#-----------------------------------------------------------------------------

summary.frame

      mean  median       sd       bias CI_lower CI_upper
1   1.2998  1.3013  0.39674 -0.0712912  0.51960   2.0605
2   0.2527  0.2486  0.03208 -0.0034461  0.19898   0.3229
3  -1.5662 -1.5572  0.26220 -0.0509239 -2.12900  -1.0920
4   0.2005  0.1986  0.01949  0.0049019  0.16744   0.2418
5   0.9544  0.9252  0.48915  0.0753405  0.03493   1.9025
6   0.2702  0.2688  0.02043  0.0009583  0.23272   0.3137
7  -0.8997 -0.9082  0.22174  0.0856793 -1.30664  -0.4380
8   0.1789  0.1781  0.01667  0.0029513  0.14494   0.2140
9   2.0683  1.7719  1.59102  0.4654898  0.44150   8.0471
10  4.0209  0.8270 13.23434  3.1845710  0.58114  57.6417
11 -2.0969 -1.6717  1.56311 -0.4306844 -8.43440  -1.1156
12  3.8660  0.6435 13.27525  3.1870642  0.33631  57.6062

"বায়াস" কলামগুলি এবং আমাদের নিজস্ব সারসংক্ষেপ টেবিলের "এসডি" কলামের সাথে "স্ট্যান্ডার্ড ত্রুটি" তুলনা করুন। আমাদের 95% -বিশ্বাসের অন্তরগুলি boot.ciপারসেন্টাইল পদ্ধতিটি ব্যবহার করে গণনা করা আত্মবিশ্বাসের অন্তরগুলির সাথে খুব মিল (সমস্ত কিছু নয়: সূচক 9 এর সাথে প্যারামিটারের নিম্ন সীমাটি দেখুন)।


বিস্তারিত উত্তরের জন্য ধন্যবাদ। আপনি কি মূলত বলছেন যে সহগগুলি তৈরি করা হয়েছে সহগের 2000 সেটগুলির গড়?
zgall1

4
টি

'মূল ধারণাটি হ'ল আপনি আপনার নমুনাকে জনসংখ্যা হিসাবে গণ্য করেন এবং পুনরায় প্রতিস্থাপনের মাধ্যমে এটি থেকে নতুন নমুনাগুলি আঁকেন' - নতুন নমুনার আকার কীভাবে নির্ধারণ করবেন?
সাইনাসেক্স

1
@ সাইনাসেক্স সাধারণত, আপনি মূল নমুনার মতো একই আকারের নমুনাগুলি আঁকেন। গুরুত্বপূর্ণ ধারণাটি প্রতিস্থাপনের সাথে নমুনাটি আঁকানো। সুতরাং আসল নমুনা থেকে কিছু মান একাধিকবার আঁকা হবে এবং কিছু মান একেবারেই নয়।
COOLSerdash

6

boot"পরিসংখ্যান" পরামিতি হিসাবে যে ফাংশনটি দেওয়া হয়েছে তার উপরে আপনার ফোকাস করা উচিত এবং এটি কীভাবে নির্মিত তা লক্ষ্য করা উচিত।

f <- function(data, i) {
  require(pscl)
  m <- zeroinfl(count ~ child + camper | persons,
    data = data[i, ], dist = "negbin",
    start = list(count = c(1.3711, -1.5152, 0.879), zero = c(1.6028, -1.6663)))
  as.vector(t(do.call(rbind, coef(summary(m)))[, 1:2]))
}

"ডেটা" আর্গুমেন্ট একটি সম্পূর্ণ ডেটা ফ্রেম পেতে চলেছে, তবে "i" যুক্তিটি "বুট" দ্বারা উত্পাদিত এবং 1: NROW (ডেটা) থেকে নেওয়া সারি সূচকগুলির একটি নমুনা গ্রহণ করবে। আপনি যে কোডটি থেকে দেখতে পাচ্ছেন, "i" এর পরে একটি নব্য-নমুনা তৈরি করতে ব্যবহৃত হয় যা উত্তীর্ণ হয় zeroinlএবং তার ফলাফলগুলির কেবলমাত্র নির্বাচিত অংশগুলি ফিরে আসে।

আসুন কল্পনা করুন যে "i" হ'ল {1,2,3,3,3,6,7,7,10}} "[" ফাংশনটি কেবল সেই সারিগুলিকে 3 সারি 3 কপি এবং সারি 7 এর 2 অনুলিপিগুলি দিয়ে zeroinl()প্রত্যাবর্তন করবে a এটি একক গণনার ভিত্তি হবে এবং তারপরে সহগগুলি bootপ্রক্রিয়ার সেই অনুলিপি থেকে ফলাফল হিসাবে ফিরে আসবে । এই জাতীয় প্রতিরূপের সংখ্যা "আর" পরামিতি দ্বারা নিয়ন্ত্রিত হয়।

যেহেতু কেবলমাত্র রিগ্রেশন সহগের statisticএই ক্ষেত্রে থেকে ফিরে আসে , bootফাংশনটি এই জমে থাকা সহগগুলি "t" এর মান হিসাবে ফিরিয়ে দেবে। অন্যান্য তুলনাগুলি অন্যান্য বুট-প্যাকেজ ফাংশন দ্বারা সম্পাদন করা যেতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.