Saya memproduksi skrip untuk membuat sampel bootstrap dari cats
dataset (dari -MASS-
paket).
Mengikuti buku teks Davidson dan Hinkley [1] Saya menjalankan regresi linier sederhana dan mengadopsi prosedur dasar non-parametrik untuk bootstrap dari pengamatan awal, yaitu pemasangan kembali pasangan .
Sampel asli dalam bentuk:
Bwt Hwt
2.0 7.0
2.1 7.2
...
1.9 6.8
Melalui model linear univariat, kami ingin menjelaskan berat badan kucing melalui berat otaknya.
Kode tersebut adalah:
library(MASS)
library(boot)
##################
# CATS MODEL #
##################
cats.lm <- glm(Hwt ~ Bwt, data=cats)
cats.diag <- glm.diag.plots(cats.lm, ret=T)
#######################
# CASE resampling #
#######################
cats.fit <- function(data) coef(glm(data$Hwt ~ data$Bwt))
statistic.coef <- function(data, i) cats.fit(data[i,])
bootl <- boot(data=cats, statistic=statistic.coef, R=999)
Anggaplah sekarang bahwa ada variabel pengelompokan cluster = 1, 2,..., 24
(misalnya, masing-masing kucing milik sebuah sampah yang diberikan). Untuk kesederhanaan, anggaplah bahwa data seimbang: kami memiliki 6 pengamatan untuk setiap cluster. Oleh karena itu, masing-masing dari 24 liter terdiri dari 6 kucing (yaitu n_cluster = 6
dan n = 144
).
Dimungkinkan untuk membuat cluster
variabel palsu melalui:
q <- rep(1:24, times=6)
cluster <- sample(q)
c.data <- cbind(cats, cluster)
Saya punya dua pertanyaan terkait:
Bagaimana mensimulasikan sampel sesuai dengan struktur dataset (berkerumun)? Yaitu, bagaimana melakukan resample pada level cluster? Saya ingin sampel cluster dengan penggantian dan untuk mengatur pengamatan dalam setiap cluster yang dipilih seperti dalam dataset asli (yaitu pengambilan sampel dengan penggantian cluster dan tanpa penggantian pengamatan dalam masing-masing cluster).
Ini adalah strategi yang diusulkan oleh Davidson (hal. 100). Misalkan kita menggambar B = 100
sampel. Masing-masing dari mereka harus dikomposisikan oleh 24 cluster yang mungkin berulang (misalnya cluster = 3, 3, 1, 4, 12, 11, 12, 5, 6, 8, 17, 19, 10, 9, 7, 7, 16, 18, 24, 23, 11, 15, 20, 1
), dan masing-masing cluster harus berisi 6 pengamatan yang sama dari dataset asli. Bagaimana cara melakukannya R
? (baik dengan atau tanpa -boot-
paket.) Apakah Anda memiliki saran alternatif untuk melanjutkan?
Pertanyaan kedua menyangkut model regresi awal. Misalkan saya mengadopsi model efek tetap , dengan intersep tingkat cluster. Apakah itu mengubah prosedur resampling yang diadopsi?
[1] Davidson, AC, Hinkley, DV (1997). Metode bootstrap dan aplikasinya . Pers Universitas Cambridge.
sumber
Saya mencoba memecahkan masalah sendiri, dan saya menghasilkan kode berikut.
Meskipun berfungsi, mungkin bisa ditingkatkan dalam hal kecepatan. Juga, jika mungkin saya akan lebih suka untuk menemukan cara untuk menggunakan
-boot-
paket, karena memungkinkan untuk secara otomatis menghitung sejumlah interval kepercayaan bootstrap melaluiboot.ci
...Untuk kesederhanaan, dataset awal terdiri dari 18 kucing (pengamatan "tingkat rendah") bersarang di 6 laboratorium (variabel pengelompokan). Dataset seimbang (
n_cluster = 3
untuk setiap kluster). Kami memiliki satu regresix
,, untuk menjelaskany
.Dataset palsu dan matriks tempat menyimpan hasil adalah:
Pada setiap
B
iterasi, loop berikut sampel 6 cluster dengan penggantian, masing-masing terdiri oleh 3 kucing sampel tanpa penggantian (yaitu komposisi internal cluster dipertahankan tidak berubah). Perkiraan koefisien regressor dan kesalahan standarnya disimpan dalam matriks yang dibuat sebelumnya:Semoga ini bisa membantu, Lando
sumber
replicate
; sebagai bonus itu secara otomatis mengembalikanb.sample
array untuk Anda. Selain itu, dengan semua penggabungan di sini, Anda hampir pasti lebih baik menggunakandata.table
dan mencoba kembalikey
. Saya dapat berkontribusi jawaban ketika saya sampai di komputer ... Pertanyaan: mengapa Anda melacak kesalahan standar koefisien?quantile(b.sample[,2], c(.025, .975))
Berikut ini cara yang lebih sederhana (dan hampir pasti lebih cepat) untuk melakukan bootstrap menggunakan
data.table
(pada data @ lando.carlissian):sumber
Saya harus melakukan ini baru-baru ini dan digunakan
dplyr
. Solusinya tidak seanggun dengandata.table
, tetapi:The
inner_join
mengulangi setiap baris memiliki nilai yang diberikanx
daricluster
dengan jumlah kali yangx
muncul dalamcluster_sample
.sumber
Hai solusi yang sangat sederhana berdasarkan split dan lapply, tidak perlu paket khusus kecuali "boot", contoh dengan estimasi ICC berdasarkan prosedur nagakawa:
KETIGA: eksekusi bootstrap
sumber