Có một số cách chúng ta có thể gặp vấn đề bằng cách sử dụng các phương pháp thống kê tham số và phi tham số truyền thống. Ví dụ: kích thước mẫu của chúng tôi có thể quá nhỏ để định lý giới hạn trung tâm đảm bảo rằng các phương tiện mẫu được phân phối bình thường, vì vậy các giới hạn tin cậy được tính toán theo kiểu cổ điển có thể không chính xác. Chúng tôi có thể không muốn sử dụng đến các thử nghiệm phi tham số có công suất thấp. Chúng tôi có thể quan tâm đến một thống kê mà phân phối lý thuyết cơ bản là không xác định. Nếu không có phân phối, chúng ta không thể tính toán khoảng tin cậy, giá trị p hoặc giá trị tới hạn.
Các bài viết liên quan:
- Data Collection trong nghiên cứu
- Resampling(Lấy mẫu lại) dữ liệu không cân bằng
- Đường cong ROC(Receiver Operator Characteristic)
- Thống kê Cohen’s Kappa
- Confusion Matrix là gì? các yếu tố quan trọng
- Kiểm tra giả thuyết(Hypothesis Testing) trong R
- Google Form: hướng dẫn chi tiết
- Cách chèn code html vào wordpress
- All-pairs Testing trong software testing
- Kiểm tra lỗ hổng bảo mật Server-side Template Injection
Phương pháp resampling là một trong những giải pháp cho những vấn đề này và chúng có một số ưu điểm. Chúng linh hoạt và trực quan. Chúng thường có sức mạnh lớn hơn các phương pháp không tham số, và chúng tiếp cận và đôi khi vượt quá sức mạnh của các phương pháp tham số. Hai trong số chúng (bootstrap, jackknife) không đưa ra giả định nào về hình dạng của phân phối mẹ, ngoại trừ việc mẫu là phản ánh tốt của phân phối đó, điều này sẽ xảy ra nếu bạn thu thập một mẫu ngẫu nhiên thông qua thiết kế lấy mẫu tốt và nếu kích thước mẫu đủ lớn. Hai điều này cũng có thể được áp dụng cho bất kỳ vấn đề nào, ngay cả khi không có phân phối lý thuyết của thống kê. Chúng ít nhạy cảm hơn với các giá trị ngoại lai so với các phương pháp tham số. Mối quan hệ (các quan sát có cùng giá trị) không đặt ra vấn đề mà chúng thực hiện trong các phương pháp phi tham số
Có một số hạn chế đối với phương pháp resampling. Khó khăn chính là chúng có thể khó thực hiện hơn một bài kiểm tra tham số hoặc phi tham số truyền thống. Chúng ít quen thuộc hơn đối với một số nhà khoa học, điều này có thể gây ra vấn đề trong việc chấp nhận của họ, mặc dù điều này đang trở nên ít vấn đề hơn. Các phương pháp này ít được tiêu chuẩn hóa hơn so với các bài kiểm tra tham số và phi tham số, và đôi khi chúng rất tốn kém về mặt tính toán.
Có bốn loại phương pháp lấy lại mẫu chính:randomization, Monte Carlo, bootstrap và jackknife. Các phương pháp này có thể được sử dụng để xây dựng phân phối thống kê dựa trên dữ liệu của chúng tôi, sau đó có thể được sử dụng để tạo khoảng tin cậy trên ước tính tham số. Ngoài ra, chúng có thể được sử dụng để xây dựng phân phối thống kê dựa trên giả thuyết rỗng, có thể được sử dụng để tạo giá trị p hoặc giá trị tới hạn.
Monte Carlo
Các phương pháp Monte Carlo thường được sử dụng trong các mô phỏng trong đó phân phối mẹ được biết đến hoặc được giả định. Nói không ngoa, tôi đã sử dụng phương pháp Monte Carlo trong suốt học kỳ để minh họa cách thức hoạt động của các kỹ thuật thống kê.
Ví dụ: giả sử chúng ta muốn mô phỏng phân phối của thống kê F cho hai mẫu được rút ra từ phân phối chuẩn. Chúng tôi sẽ chỉ định giá trị trung bình và phương sai của phân phối chuẩn, tạo hai mẫu có kích thước nhất định và tính toán tỷ lệ phương sai của chúng. Chúng tôi sẽ lặp lại quá trình này nhiều lần để tạo ra phân phối tần số của thống kê F, từ đó chúng tôi có thể tính toán giá trị p hoặc giá trị tới hạn.
Đây là một ví dụ về Monte Carlo trong R. Khối mã đầu tiên tạo ra một hàm tính tỷ lệ F của hai mẫu, với kích thước mẫu n1 và n2. Khối mã thứ hai khai báo các kích thước mẫu mà chúng ta muốn mô phỏng, sau đó gọi hàm của chúng ta nhiều lần để xây dựng phân phối các giá trị F.
simulateOneF <- function(n1, n2) { data1 <- rnorm(n1) data2 <- rnorm(n2) F <- var(data1) / var(data2) F } n1 <- 12 n2 <- 25 F <- replicate(10000, simulateOneF(n1, n2))
Chúng ta có thể tính toán giá trị p bằng cách tìm phần trăm các giá trị F của chúng ta bằng hoặc vượt quá một thống kê F quan sát được (trong ví dụ này là 3,5):
Fobserved <- 3.5 pValue <- length(F[F >= Fobserved]) / length(F) pValue
Điều này cho thấy tỷ lệ giá trị F vượt quá mức quan sát của F là 3,5, vì vậy nó là giá trị p một phía. Để nhận được giá trị p hai phía, hãy nhân đôi xác suất này.
Vì giá trị p có thể được tính như thế này cho phân phối dự kiến của bất kỳ thống kê nào, chúng ta có thể viết hàm tính giá trị p cho thống kê cho bất kỳ phân phối nào được tạo bằng phương pháp lấy mẫu lại như Monte Carlo:
pvalue <- function(x, observed, tails=1) { nExtreme <- length(x[ x>= observed]) nTotal <- length(x) p <- nExtreme / nTotal * tails p }
Gọi điều này rất đơn giản: đối số đầu tiên là phân phối được cung cấp bởi Monte Carlo (hoặc một phương pháp lấy mẫu lại khác) và đối số thứ hai là thống kê được quan sát. Theo mặc định, nó sẽ tính giá trị p một bên (bên phải); chỉ định đuôi = 2 cho giá trị p hai đuôi. Việc gọi một hàm tự tạo như thế này tạo ra mã dễ đọc hơn và dễ hiểu hơn:
pvalue(F, Fobserved)
Tóm lại, có ba bước để có một Monte Carlo:
- mô phỏng các quan sát dựa trên phân phối lý thuyết
- nhiều lần tính toán thống kê quan tâm để xây dựng phân phối của nó dựa trên giả thuyết rỗng
- sử dụng phân phối của thống kê để tìm giá trị p hoặc giá trị tới hạn.
Randomization
Randomization là một phương pháp lấy lại mẫu đơn giản và mô hình suy nghĩ minh họa cho cách tiếp cận. Giả sử chúng ta có hai mẫu A và B, trên đó chúng ta đã đo lường một thống kê (ví dụ: giá trị trung bình). Một cách để hỏi liệu hai mẫu có phương tiện khác nhau đáng kể hay không là hỏi khả năng chúng ta quan sát thấy sự khác biệt về phương tiện của chúng như thế nào nếu các quan sát được phân bổ ngẫu nhiên cho hai nhóm. Chúng tôi có thể mô phỏng điều đó bằng cách chỉ định ngẫu nhiên từng quan sát cho nhóm A hoặc B, tính toán sự khác biệt của các phương tiện và lặp lại quá trình này cho đến khi chúng tôi xây dựng được phân phối của sự khác biệt về phương tiện. Bằng cách làm này, chúng tôi đang xây dựng sự phân bố của sự khác biệt về phương tiện theo giả thuyết rỗng rằng hai mẫu đến từ một tập hợp.
Từ phân phối này, chúng tôi có thể tìm thấy các giá trị quan trọng mà chúng tôi có thể so sánh sự khác biệt quan sát được về giá trị trung bình. Chúng tôi cũng có thể sử dụng phân phối này để tính toán giá trị p của thống kê quan sát.
Các bước thiết yếu trong Randomization là:
- xáo trộn các quan sát giữa các nhóm
- tính toán nhiều lần các thống kê quan tâm
- sử dụng phân phối đó của thống kê để tìm các giá trị quan trọng hoặc giá trị p
Đây là một ví dụ về việc thực hiện một phép ngẫu nhiên để đánh giá sự khác biệt về phương tiện của hai mẫu.
# The data x <- c(0.36, 1.07, 1.81, 1.67, 1.16, 0.18, 1.26, 0.61, 0.08, 1.29) y <- c(1.34, 0.32, 0.34, 0.29, 0.64, 0.20, 0.50, 0.85, 0.38, 0.31, 2.50, 0.69, 0.41, 1.73, 0.62) # Function for calculating one randomized difference in means randomizedDifferenceInMeans <- function(x, y) { nx <- length(x) ny <- length(y) # combine the data combined <- c(x, y) ncom <- length(combined) indices <- 1:ncom # initially assign all observations to y group group <- rep('y', ncom) # assign a subsample to to x group xsub <- sample(indices, nx) group[xsub] <- 'x' # calculate the means meanX <- mean(combined[group=='x']) meanY <- mean(combined[group=='y']) differenceInMeans <- meanX - meanY differenceInMeans } # Repeat that function many times to build the distribution diffMeans <- replicate(10000, randomizedDifferenceInMeans(x, y))
Tại thời điểm này, chúng tôi có thể làm một số điều. Bởi vì chúng tôi có một phân phối cho giả thuyết rỗng, chúng tôi có thể so sánh sự khác biệt quan sát được về giá trị trung bình với các giá trị tới hạn hai phía. Từ đó, chúng ta có thể chấp nhận hoặc bác bỏ giả thuyết không có sự khác biệt về phương tiện. Hàm quantile () giúp việc tìm kiếm các giá trị tới hạn trở nên dễ dàng.
observedDifference <- mean(x) - mean(y) alpha <- 0.05 quantile(diffMeans, alpha/2) quantile(diffMeans, 1-alpha/2)
Đôi khi, sẽ hữu ích nếu hiển thị phân phối với các giá trị tới hạn và giá trị quan sát. Điều này cho phép người đọc hiểu hình dạng của phân phối và hình dung giá trị quan sát đã giảm so với các giá trị tới hạn ở đâu.
hist(diffMeans, breaks=50, col='gray', xlab='Difference of Means', main='') observedDifference <- mean(x) - mean(y) abline(v=observedDifference, lwd=4, col='black') alpha <- 0.05 abline(v=quantile(diffMeans, alpha/2), col='red', lwd=2) abline(v=quantile(diffMeans, 1-alpha/2), col='red', lwd=2)
Thay vì các giá trị tới hạn, chúng ta có thể tính toán giá trị p hai bên cho sự khác biệt quan sát được về phương tiện, bằng cách sử dụng hàm giá trị p mà chúng ta đã tạo ở trên.
observedDifference <- mean(x) - mean(y) pvalue(diffMeans, observedDifference, tails=2)
Bootstrap
Bootstrap là một kỹ thuật mạnh mẽ, linh hoạt và trực quan để xây dựng khoảng tin cậy. Cái tên bootstrap xuất phát từ ý tưởng “nâng cao bản thân bằng chính bootstraps của bạn”: nó xây dựng các giới hạn tin cậy từ việc phân phối dữ liệu. Giả định chính là dữ liệu là một mô tả tốt về sự phân bố tần suất của dân số và sẽ đúng nếu bạn thu thập một mẫu ngẫu nhiên bằng cách tuân theo thiết kế lấy mẫu tốt.
Nguyên tắc đằng sau bootstrap là rút ra một tập hợp các quan sát từ dữ liệu để tạo ra một mẫu mô phỏng có cùng kích thước với mẫu ban đầu. Việc lấy mẫu này được thực hiện cùng với việc thay thế, có nghĩa là một quan sát cụ thể có thể được lấy mẫu ngẫu nhiên nhiều lần trong một thử nghiệm cụ thể, trong khi những quan sát khác có thể hoàn toàn không được lấy mẫu. Thống kê được tính toán trên mẫu khởi động này và quá trình này được lặp lại nhiều lần (hàng nghìn lần trở lên) để xây dựng phân phối cho thống kê. Giá trị trung bình của các giá trị khởi động này là ước tính của tham số.
Việc phân phối các giá trị khởi động được sử dụng để xây dựng khoảng tin cậy trên ước tính tham số. Để làm điều này, các giá trị khởi động được sắp xếp từ thấp nhất đến cao nhất. Phần tử 1-α / 2% (ví dụ: 0,025%) và phần tử α / 2% (ví dụ: 0,975%) tương ứng với các giới hạn tin cậy dưới và trên. Ví dụ: nếu chúng tôi tính toán thống kê của mình 10.000 lần và muốn có giới hạn tin cậy 95%, chúng tôi sẽ tìm thấy các phần tử ở hàng 250 và 9750 của vectơ đã sắp xếp của thống kê khởi động. Hàm quantile () thực hiện tất cả những điều này một cách tự động, giúp chúng ta không gặp rắc rối về xác định và tìm điểm cắt.
Độ tin cậy của bootstrap được cải thiện với số lượng bản sao bootstrap. Việc tăng số lượng bản sao sẽ làm tăng thời gian tính toán, nhưng đây hiếm khi là vấn đề như trước đây.
Bootstrap một biến
Ví dụ này minh họa một sơ đồ khởi động của độ lệch chuẩn mẫu. Điều này có thể được sửa đổi dễ dàng đối với bất kỳ thống kê nào được tính toán trên một biến duy nhất. Bước đầu tiên là xây dựng một hàm tính toán một thống kê khởi động từ dữ liệu. Tiếp theo, hàm replicate () được sử dụng để gọi hàm này nhiều lần trên dữ liệu của chúng tôi để xây dựng phân phối thống kê khởi động.
bootstrapSd <- function(x) { bootstrappedSample <- sample(x, size=length(x), replace=TRUE) theSd <- sd(bootstrappedSample) theSd } x <- c(1.61, 0.84, 0.01, 0.35, 0.37, 1.13, 0.25, 1.25, 3.24, 0.68) sd <- replicate(10000, bootstrapSd(x))
Giá trị trung bình của phân phối các mẫu khởi động này là ước tính của chúng tôi về tham số. Sử dụng quantile () và mức độ tin cậy của bạn (alpha) để tính khoảng tin cậy trên ước tính tham số đó. Độ chính xác của những ước tính này có thể được tăng lên bằng cách thực hiện một số lượng lớn hơn các bản sao, nhưng với chi phí tăng thời gian tính toán.
parameterEstimate <- mean(sd) alpha <- 0.05 lowerCL <- quantile(sd, alpha/2) upperCL <- quantile(sd, 1-alpha/2)
Bootstrap hai biến
Bootstrap cũng có thể được sử dụng trên một thống kê dựa trên hai biến, chẳng hạn như hệ số tương quan hoặc độ dốc. Điều này chỉ phức tạp hơn một chút so với ví dụ trước, vì chúng ta cần lấy mẫu các hàng dữ liệu, nghĩa là, vẽ ngẫu nhiên cả hai biến tương ứng với một điểm dữ liệu hoặc quan sát duy nhất. Chọn độc lập một phần tử cho mỗi biến là một sai lầm phổ biến khi xây dựng khoảng tin cậy, vì nó phá hủy cấu trúc tương quan trong tập dữ liệu. Người ta có thể làm điều này một cách có chủ ý, điều này sẽ xây dựng một phân phối cho giả thuyết rỗng (nghĩa là các giá trị không tương quan) và điều này có thể được sử dụng để tính toán các giá trị quan trọng hoặc giá trị p. Cách tiếp cận phổ biến hơn nhiều là phương pháp hiển thị bên dưới, vì nó được sử dụng để ước tính tham số và khoảng tin cậy trên chúng.
bootstrapR <- function(x, y) { i <- 1:length(x) theSample <- (sample(i, length(x), replace=TRUE)) pearsonR <- cor(x[theSample], y[theSample]) pearsonR } x <- c(3.37, 2.04, 0.67, 0.99, 0.91, 2.25, 5.54, 2.67, 2.43, 2.00) y <- c(12.30, 9.91, 5.92, 8.56, 6.51, 10.53, 19.22, 13.52, 10.47, 9.03) r <- replicate(10000, bootstrapR(x, y))
Một bootstrap hai biến được minh họa ở đây cho một hệ số tương quan. Như trước đây, bước đầu tiên là viết một hàm tính toán một giá trị khởi động duy nhất của hệ số tương quan. Trong hàm này, sample () được sử dụng để vẽ một mẫu có cùng kích thước với mẫu ban đầu, nhưng với một tập hợp các quan sát được chọn ngẫu nhiên từ dữ liệu. Đảm bảo đặt Replace = TRUE nếu không điều này sẽ luôn tạo ra chính xác tập dữ liệu ban đầu, khiến tất cả các giá trị khởi động giống hệt nhau. Sau hàm, sử dụng replicate () để xây dựng phân phối thống kê khởi động.
parameterEstimate <- mean(r) alpha <- 0.05 quantile(r, alpha/2) quantile(r, 1-alpha/2)
Ước tính tham số và khoảng tin cậy của nó được tìm thấy theo cùng một cách với bootstrap một biến.
Bootstrap đa biến
Cách tiếp cận hai biến có thể được tổng quát hóa cho dữ liệu đa biến. Để xây dựng khoảng tin cậy, hãy chọn ngẫu nhiên một hàng của khung dữ liệu như được thực hiện trong trường hợp hai biến và sử dụng tất cả các quan sát cho trường hợp đó khi mẫu khởi động được tạo. Nếu muốn các giá trị p và giá trị tới hạn, hãy chọn ngẫu nhiên các quan sát của từng biến, nghĩa là các biến không nhất thiết phải từ cùng một hàng của khung dữ liệu.
Một số phương pháp (chẳng hạn như chia tỷ lệ đa chiều không theo hệ mét) không cho phép các trường hợp giống hệt nhau và điều này sẽ gây ra sự cố cho một bootstrap đa biến. Một giải pháp phổ biến là thêm một số ngẫu nhiên rất nhỏ vào mỗi giá trị khi trường hợp đó được chọn và điều này sẽ ngăn ngừa vấn đề về các trường hợp giống hệt nhau. Ví dụ: nếu các giá trị dữ liệu nằm trong khoảng từ 1–10, thì số ngẫu nhiên có thể ở thang điểm 0,001; điều này đủ để ngăn các giá trị không giống nhau, nhưng không đủ để thay đổi cơ bản dữ liệu hoặc kết quả.
Tóm lược
Tóm lại, một bootstrap có ba bước:
- mô phỏng các quan sát dựa trên việc lấy mẫu với sự thay thế từ dữ liệu
- tính toán nhiều lần các thống kê quan tâm
- sử dụng phân phối đó để ước tính tham số và khoảng tin cậy
Nên sử dụng bootstrap một cách thận trọng khi kích thước mẫu nhỏ, vì dữ liệu có thể không đại diện đầy đủ cho phân phối của tập hợp, vi phạm giả định duy nhất của bootstrap.
Bootstrap là một kỹ thuật cực kỳ linh hoạt. Tất cả các nhà khoa học nên biết làm thế nào để thực hiện một.
Jackknife
Jackknife là một kỹ thuật khác để ước tính một tham số và đặt giới hạn tin cậy cho nó. Tên đề cập đến việc cắt dữ liệu, bởi vì tôi hoạt động bằng cách loại bỏ một quan sát duy nhất, tính toán thống kê mà không có một giá trị đó, sau đó lặp lại quá trình đó cho mỗi quan sát (chỉ loại bỏ một giá trị, tính toán thống kê). Điều này tạo ra một phân phối các giá trị jackknifed của thống kê của chúng tôi, từ đó ước tính tham số và khoảng tin cậy được tính toán.
Cụ thể, giả sử chúng ta quan tâm đến tham số K, nhưng chúng ta chỉ có một ước lượng về nó (thống kê k) dựa trên mẫu n quan sát của chúng ta.
Để tạo mẫu jackknifed đầu tiên bao gồm n-1 quan sát, hãy loại bỏ quan sát đầu tiên trong dữ liệu. Tính toán thống kê (được gọi là k-i) trên mẫu đó, trong đó chỉ số con -i có nghĩa là tất cả các quan sát ngoại trừ thứ i. Từ thống kê này, hãy tính một đại lượng được gọi là giá trị giả κi:
Lặp lại quá trình này bằng cách thay thế lần quan sát đầu tiên và loại bỏ lần quan sát thứ hai, để tạo một mẫu mới có kích thước n-1. Tính toán thống kê và giá trị giả như trước đây. Lặp lại điều này cho mọi quan sát có thể cho đến khi có n giá trị giả, mỗi giá trị có cỡ mẫu n-1. Từ n giá trị giả này, chúng ta có thể ước tính tham số, sai số chuẩn của nó và khoảng tin cậy.
Ước tính jackknifed của tham số K bằng giá trị trung bình của các giá trị giả:
Sai số chuẩn của K bằng độ lệch chuẩn của các giá trị psuedoval chia cho căn bậc hai của cỡ mẫu (n):
Giới hạn tin cậy jackknifed dựa trên ước tính của K, sai số chuẩn và điểm t tới hạn hai phía với n-1 bậc tự do:
Có hai lưu ý cho con dao. Đầu tiên, khoảng tin cậy giả định rằng thống kê jackknifed được phân phối chuẩn, được chứng minh bằng định lý giới hạn trung tâm cho các mẫu lớn. Nếu kích thước mẫu của chúng ta nhỏ, định lý giới hạn trung tâm có thể không đảm bảo tính chuẩn. Thứ hai, các giá trị giả không độc lập, chúng nhất thiết phải tương quan.
Đây là một minh chứng về một con dao nhỏ, trong đó số liệu thống kê mà chúng tôi muốn con dao bấm là độ lệch chuẩn. Mặc dù không cần thiết đối với một vấn đề đơn giản như thế này, nhưng tôi đặt nó bên trong hàm allowStatistic () để nhấn mạnh rằng nếu chúng ta muốn tạo ra một thống kê khác, tất cả những gì chúng ta phải làm là thay đổi nội dung của CalculStatistic () và phần còn lại của mã sẽ không thay đổi.
calculateStatistic <- function(x) { sd(x) }
x <- c(0.12, 0.97, 1.03, 0.10, 0.20, 0.22, 0.63, 0.21, 2.36, 3.07, 0.91, 0.65, 0.71, 0.13, 2.37, 1.44, 0.55, 1.31, 0.29, 0.25, 2.32, 1.84, 1.03, 0.42, 0.34, 0.37, 0.02, 1.46, 0.62, 0.73, 1.01, 0.37, 2.23, 0.10, 0.53, 0.31, 0.38, 0.20, 5.12, 2.02, 2.35, 0.07, 0.03, 0.13, 2.24, 0.70, 0.19, 1.07, 1.88, 2.61)
Tiếp theo, tính toán các giá trị giả. Đầu tiên, tạo một vectơ để chứa các giá trị giả, tính toán thống kê (stat) trên tất cả dữ liệu. Tiếp theo, lặp lại dữ liệu, loại bỏ từng quan sát một. Vòng lặp for này sẽ thực hiện lặp đi lặp lại tất cả các thao tác bên trong dấu ngoặc nhọn. Đầu tiên, tập dữ liệu jackknifed được trích xuất (jack), sau đó thống kê được tính toán trên nó (jackStat), sau đó giá trị giả được lưu vào vector mà chúng tôi đã tạo. Trong lần đầu tiên vượt qua vòng lặp, tôi sẽ bằng 1 và nó sẽ được tăng thêm 1 trên mỗi lần vượt qua. Trên đường chuyền cuối cùng, nó sẽ có độ dài bằng (x), tức là kích thước mẫu của chúng tôi. Mỗi giá trị giả của chúng ta được lưu vào vectơ mà chúng ta đã tạo ở bước cuối cùng trong vòng lặp.
pseudovalues <- vector(length=length(x), mode='numeric') stat <- calculateStatistic(x) for (i in 1:length(x)) { jack <- x[-i] jackStat <- calculateStatistic(jack) pseudovalues[i] <- stat - (length(x)-1)*(jackStat-stat) }
Lưu ý: nhiều người cho rằng nên tránh các vòng lặp trong R bằng mọi giá. Những gì tiếp theo trong khối tiếp theo là một cách để tính toán các giá trị giả mà không có vòng lặp. Như thường lệ, giải pháp là sử dụng apply () hoặc một trong những họ hàng của nó. Ở đây, chúng tôi sử dụng sapply (), vì nó có thể được áp dụng cho một vectơ, trái ngược với apply (), hoạt động trên một ma trận. Chúng tôi cung cấp hàm sapply () với một hàm ẩn danh (không được đặt tên) như một hàm đóng (trong dấu ngoặc nhọn), áp dụng các thao tác đó từng hàng một trong x. Việc đóng cửa thu nhận y và ước tính từ môi trường của nó. Điều này khá nâng cao, vì vậy nếu vòng lặp có ý nghĩa hơn đối với bạn, thì hãy sử dụng nó.
y <- x stat <- calculateStatistic(x) pseudovalues <- sapply(x, function(x) { i <- min(which(y==x)) jack <- y[-i] jackStat <- calculateStatistic(jack) thePseudovalue <- stat - (length(x)-1)*(jackStat - stat) thePseudovalue })
Bất kể chúng tôi sử dụng cách tiếp cận nào để tính toán các giá trị giả, chúng tôi có thể tính ước tính, sai số chuẩn và giới hạn tin cậy của mình theo cùng một cách.
estimate <- mean(pseudovalues) n <- length(pseudovalues) SE <- sd(pseudovalues)/sqrt(n) # confidence limits alpha <- 0.05 lowerCL <- estimate + qt(p=alpha/2, df=n-1) * SE upperCL <- estimate - qt(p=alpha/2, df=n-1) * SE
Tóm lại, jackknife có ba bước chính:
- xóa một điểm dữ liệu,
- tính toán thống kê và giá trị giả
- lặp lại quá trình này, loại bỏ một điểm dữ liệu tại một thời điểm để xây dựng một tập hợp n giá trị giả sử dụng các giá trị giả để ước tính tham số và độ không đảm bảo