Önce set.seed() Gelir
Her çalıştırmada değişen rastgele çekilişler; öğretim, notlandırma, hata ayıklama ya da bilim için işe yaramaz - simülasyonunuz bugün 0.146, yarın 0.153 diyorsa rapora hangi sayı girer? set.seed(), üretecin başlangıç noktasını sabitler ve ardından gelen tüm "rastgelelik" akışını tam olarak tekrarlanabilir kılar:
Aynı tohum, özdeş çekilişler, her seferinde, her makinede. Sayılar sözde rastgeledir: rastgeleliğin her istatistiksel testini geçecek şekilde tasarlanmış deterministik bir dizi ve tohum, dizide nereden başlayacağınızı seçer. Tohum değerinin kendisi bir anlam taşımaz - 42, 7, 20260807 - herhangi birini seçin; yalnızca not edin. Edinilecek alışkanlık: rastgelelik kullanan her betiğin en üstünde bir set.seed(). (Çekiliş tüketmenin durumu ilerlettiğine, dolayısıyla çağrıların sırasının da yeniden üretilebilirlik açısından önemli olduğuna dikkat edin.)
d/p/q/r Sistemi: Tek Bir Tablo Tüm Kitaplığı Çözer
R her dağılım fonksiyonunu önek + aile olarak adlandırır ve ızgarayı bir kez gördüğünüzde tüm istatistik kitaplığını okuyabilirsiniz:
| Önek | Yanıtladığı soru | Normal örnek |
|---|---|---|
r | Bana rastgele çekilişler ver | rnorm(5) |
d | Yoğunluk: eğri x noktasında ne kadar yüksek? | dnorm(0) |
p | Olasılık: P(X ≤ x)? | pnorm(1.96) |
q | Çeyreklik: bu yüzdelikte hangi x duruyor? | qnorm(0.975) |
p ve q birbirinin tersidir ve güven aralıklarında qt(0.975, df) olarak karşılaştığınız ikilidir:
Aile adını değiştirin, her şey aynen aktarılır: runif/dunif/punif/qunif, rbinom/..., rpois/..., rt/..., rexp/.... Dört önek öğrenin, düzinelerce dağılım kazanın.
rnorm(): Normal Çekilişler
rnorm(n, mean, sd), bir çan eğrisinden çeker - ölçüm benzeri veriyi simüle etmenin beygiri:
Örneklem ortalaması ve sd değeri 100 ile 15'in üzerine değil, yakınına düşer: o fark örnekleme gürültüsüdür ve n büyüdükçe küçülür. Son satır çalmaya değer bir numaradır: bir logical vektörün mean() değeri TRUE oranıdır ve 130'un ötesindeki pay, teorik 1 - pnorm(130, 100, 15) ≈ %2,3 değerine yakın çıkar. Varsayılanlar mean = 0, sd = 1'dir (standart normal). iq değerinin bir histogramı tanıdık çanı gösterir.
runif(), rbinom(), rpois()
Üç aile daha çoğu simülasyon ihtiyacını karşılar:
runif() çekilişleri bir aralığa eşit biçimde yayar ("uniform", "run if" değil - herkes bir kez yanlış okur). rbinom(n, size, prob), her biri size denemeli n deney simüle eder ve her birinin başarı sayısını döndürür - dolayısıyla yukarıdaki her değer 10 atıştan kaçının tura geldiğidir. rpois(n, lambda), bilinen bir ortalama hızda bağımsız olarak gerçekleşen olay sayıları üretir: saat başına destek talepleri, sayfa başına yazım hataları.
sample(): Örnekleme ve Karıştırma
r* fonksiyonları bir dağılımdan değer icat ederken, sample() zaten sahip olduğunuz değerlerden çeker:
Hikâyenin tamamı replace argümanıdır: FALSE (varsayılan) kart dağıtır - her değer bir kez görünebilir ve elinizdekinden fazlasını istemek bir hatadır; TRUE zar atar - her çekiliş sıfırlanır. Kendi verinizden yerine koyarak örnekleme, bootstrap'in motorudur. Yalnızca bir vektörle çağrıldığında sample(x) rastgele bir permütasyon döndürür - karıştırma deyimi.
Bir veri çerçevesinin satırlarını örneklemek, satır indekslemenin içinde sample() kullanır:
sample(nrow(mtcars), 5) rastgele 5 satır numarası seçer; indeksleme o satırları çeker. Bu, büyük bir veri kümesini noktasal kontrol etmenin ya da eğitim/test kümelerine ayırmanın standart hamlesidir.
Mini Bir Monte Carlo Simülasyonu
İşte tüm takımın getirisi. Soru: bir süreç N(100, 15) dağılımlı ölçümler üretiyor; bunlardan 10 tanesinin ortalamasını alıyorsunuz - o ortalamanın 105'i aşma olasılığı nedir? Yanıtı türetmek yerine simüle edin - deneyi 10.000 kez yapın ve sayın:
Simülasyon, tam değerin (yaklaşık 0.146) birkaç binde biri içine düşer. Tek nefeste Monte Carlo budur: tek bir denemeyi bir fonksiyon olarak yazın, onu replicate() ile binlerce kez tekrarlayın, başarıların mean() değerini alın. Tam yanıt burada vardı, çünkü kurulum ders kitabı kadar basitti - soru dağınıklaştığı an (tuhaf dağılımlar, ilişkili çekilişlerin maksimumu, kurallara dayalı bir oyun) analitik yol kapanır ve simülasyon tarifi değişmeden çalışmaya devam eder. Kontroldeki 15 / sqrt(10) ifadesine dikkat edin: ortalamalar tekil çekilişlerden daha az oynar - güven aralığı genişliklerini yöneten aynı karekök yasası.
Simülasyon Kalitesinde, Gizlilik Kalitesinde Değil
Uyulması gereken bir sınır: R'nin varsayılan üreteci (Mersenne Twister) gizlilik için değil, istatistiksel kalite ve hız için yapılmıştır. Çıktısı tohum verildiğinde deterministiktir ve iç durumu gözlenen çıktıdan yeniden kurulabilir - parolalar, tokenlar ya da güvenliğe komşu her şey için ölümcül kusurlar. Simülasyon, bootstrap ve öğretim için mükemmeldir; kriptografi için ise asla sample() ya da runif() değil, bu amaçla yapılmış bir kitaplık kullanın (ör. openssl paketi).
Buradan Ne Çıkarıyorsunuz
- En üstte bir kez
set.seed(), her "rastgele" sonucu yeniden üretilebilir kılar - aynı tohum, aynı çekilişler. - d/p/q/r önekleri tüm dağılım kitaplığını çözer: rastgele çekiliş, yoğunluk, kümülatif olasılık, çeyreklik.
rnorm(n, mean, sd),runif(n, min, max),rbinom(n, size, prob),rpois(n, lambda)çoğu simülasyon ihtiyacını karşılar.sample()kendi değerlerinizden çeker - zar içinreplace = TRUE, kart için varsayılan, karıştırmak içinsizevermeyin;df[sample(nrow(df), k), ]satırları örnekler.- Monte Carlo = tek deneme fonksiyonu +
replicate()+mean()- matematiğin kolayca ulaşamadığı olasılık sorularını yanıtlayan tarif. - R'nin RNG'si simülasyon içindir, kriptografi için değil.
Sırada: hata ayıklama - R'nin hata mesajları gerçekte ne demek ve bir traceback nasıl okunur.
Sıkça Sorulan Sorular
R'de set.seed() ne yapar?
R'nin rastgele sayı üretecinin başlangıç noktasını sabitler; böylece ardından gelen "rastgele" çekilişler her çalıştırmada özdeş çıkar. Rastgelelik kullanan her betiğin en üstünde bir kez çağırın - set.seed(42) - ve simülasyonunuz yeniden üretilebilir olsun: meslektaşlar, değerlendirenler ve gelecekteki siz aynı sayıları görürsünüz.
R'de rastgele sayılar nasıl üretilir?
Dağılımı seçin: normal çekilişler için rnorm(n, mean, sd), düzgün dağılım için runif(n, min, max), başarı sayıları için rbinom(n, size, prob), olay sayıları için rpois(n, lambda). Mevcut değerlerden örneklemek için sample(x, size) kullanın.
rnorm, dnorm, pnorm ve qnorm arasındaki fark nedir?
Tek dağılım, dört önek: r rastgele değerler çeker, d yoğunluk eğrisinin yüksekliğini verir, p kümülatif olasılık P(X ≤ x) değerini verir ve q bunun tersidir - belirli bir yüzdelikteki değer. Aynı dört önek R'nin bildiği her dağılımda çalışır: runif/dunif/punif/qunif, rbinom/dbinom/pbinom/qbinom vb.
R'de bir veri çerçevesinden rastgele satır örneklemi nasıl alınır?
Satırları sample() ile indeksleyin: df[sample(nrow(df), 5), ], yerine koymadan 5 satır seçer. Yerine koyarak örnekleme için (bootstrap'in arkasındaki hamle) replace = TRUE ekleyin.