R: توزيعات الاحتمالات في لغة R

آخر تحديث: 2026-08-26

في الدرس السابق، تعرفنا على «تحليل البيانات» — الإحصاء الوصفي. في هذا الدرس، سنتعرف على «تحليل العشوائية» — التوزيعات الاحتمالية. تستند جميع الاستدلالات الإحصائية في لغة R (اختبارات t، والانحدار، واختبار الفرضيات) إلى التوزيعات الاحتمالية. في هذا الدرس، سنتناول d/p/q/r المجموعات الأربع الرئيسية من الدوال في لغة R بالإضافة إلى أربعة توزيعات شائعة الاستخدام.

بعد الانتهاء من هذا الدرس، ستتمكن من استخدام لغة R لمحاكاة أي ظاهرة عشوائية، وإجراء حسابات الاحتمالات، وإرساء الأسس اللازمة لاختبار الفرضيات في المستقبل.

1. ما ستتعلمه



2. قصة عن فحص الجودة

(1) المشكلة: ما هو معدل النجاح الطبيعي للمنتج؟

أليس هي مفتشة لمراقبة الجودة، وقد وجدت أن متوسط وزن المنتجات في خط إنتاج معين يبلغ 100 غرام، مع انحراف معياري قدره 2 غرام. سألها مديرها: «ما هي نسبة المنتجات التي يقل وزنها عن 95 غرامًا؟»

البحث عن جدول التوزيع الطبيعي في أحد الكتب؟ أم استخدام صيغة في إكسل؟ أم مجرد سطر واحد من كود لغة R—

(2) الحل باستخدام لغة R

R
# Weight < 95g the probability
pnorm(95, mean = 100, sd = 2)
# [1] 0.00621  ← 0.6%

# Extract 1000 Product Simulation Testing
set.seed(42)
samples <- rnorm(1000, mean = 100, sd = 2)
mean(samples < 95)  # 0.6%  ← Verification

سطران من التعليمات البرمجية → الإجابة + التحقق من خلال المحاكاة.



3. المجموعات الأربع الرئيسية لدوال توزيع الاحتمالات في لغة R

(1) مقارنة بين الوظائف الأربع الرئيسية

بادئة الدالة المعنى الغرض
d الكثافة دالة كثافة الاحتمال (PDF)
p الاحتمال دالة التوزيع التراكمي (CDF)
q الشريحة الدالة العكسية (إيجاد شريحة معينة بناءً على احتمال معين)
r عشوائي إنشاء رقم عشوائي

جميع التوزيعات لها هذه الوظائف الأربع: dnorm pnorm qnorm rnorm (العادية)؛ dbinom pbinom... (الثنائية)، وهكذا دواليك.

(2) العبارات المساعدة على الحفظ

100%
graph LR
    A[d Density] -->|Find the probability| B[p Cumulative]
    B -->|Inverse Quantile| C[q quantile]
    A -->|Simulation| D[r Random]
    
    style A fill:#cce5ff
    style B fill:#d4edda
    style C fill:#f8d7da
    style D fill:#fff3cd

(3) شرح مفصل للوظائف الأربع الرئيسية

R
# Take the normal distribution as an example (Mean 0, Standard Deviation 1)
dnorm(0)             # 0.3989  ← Probability Density
pnorm(0)             # 0.5     ← Cumulative Probability
qnorm(0.975)         # 1.96    ← Given that 97.5% Find the percentile
rnorm(5)             # 5 A random number

# Custom Parameters (Mean 100, Standard Deviation 2)
dnorm(95, 100, 2)    # 95 Density at that point
pnorm(95, 100, 2)    # 95 Left-sided cumulative probability
qnorm(0.975, 100, 2) # Given that 97.5% Find the percentile
rnorm(5, 100, 2)     # 5 Per capita average 100 Random Number


4. التوزيع الطبيعي (الأكثر استخدامًا)

(1) ما هو التوزيع الطبيعي؟

100%
graph TB
    A[Normal Distribution N mu sigma] --> B[Bell-shaped symmetry]
    A --> C[68-95-99.7 Principles]
    A --> D[Central Limit Theorem]
    A --> E[Widely found in nature/Social Phenomena]
    
    style A fill:#fff3cd
    style B fill:#cce5ff
    style C fill:#d4edda
    style D fill:#f8d7da
    style E fill:#e1d4ff

التوزيع الطبيعي = توزيع على شكل جرس، متماثل، وهو أكثر التوزيعات شيوعًا في الطبيعة.

(2) قاعدة 68-95-99.7

TEXT 📖 للعرض فقط
μ ± 1σ → 68.27% Data
μ ± 2σ → 95.45% Data
μ ± 3σ → 99.73% Data

(3) الدوال العادية القياسية الأربع

R
# Standard Normal N(0, 1)
dnorm(0)              # 0.3989
pnorm(1.96)           # 0.975  ← 1.96 On the left 97.5%
qnorm(0.975)          # 1.96   ← 97.5% quantile = 1.96
rnorm(5)              # 5 A standard normal random number

# General Normal N(μ, σ)
mu <- 100
sigma <- 2

# P(X < 95) = ?
pnorm(95, mean = mu, sd = sigma)  # 0.00621

# P(95 < X < 105) = ?
pnorm(105, mu, sigma) - pnorm(95, mu, sigma)  # 0.9876

# 99% Data Range
qnorm(0.005, mu, sigma)  # The Lower World
qnorm(0.995, mu, sigma)  # Upper Realm

(4) اختبار التوزيع الطبيعي

R
# 1. Visual: QQ plot
qqnorm(x)
qqline(x, col = "red")

# 2. Statistical Tests
shapiro.test(x)       # Shapiro-Wilk (n < 5000)
# p < 0.05 Indicates non-normal distribution


5. التوزيع الثنائي (النجاح/الفشل)

(1) ما هو التوزيع الثنائي؟

توزيع عدد حالات النجاح في n تجارب برنولي مستقلة. احتمال النجاح في كل تجربة يساوي p، واحتمال الفشل يساوي 1-p.

TEXT 📖 للعرض فقط
Example: Toss 10 coins, number of times facing up X ~ Binomial(10, 0.5)

(2) الوظائف الثنائية الأربع الرئيسية

R
# Toss 10 coins, number of heads
dbinom(5, size = 10, prob = 0.5)    # 0.246  <- P(5 heads)
pbinom(5, size = 10, prob = 0.5)    # 0.623  <- P(<= 5 heads)
qbinom(0.5, size = 10, prob = 0.5)   # 5      ← Median
rbinom(1000, size = 10, prob = 0.5) # 1000 sets of 10 trials, number of successes each

# Example: 100 shots, hit rate 80%, probability of at least 90 hits
1 - pbinom(89, size = 100, prob = 0.8)
# [1] 0.0227  ← 2.3%

(3) التصور الثنائي

R
n <- 10
p <- 0.5
x <- 0:n

# Probability Mass Function
plot(x, dbinom(x, n, p), type = "h",
     main = paste0("Binomial(", n, ",", p, ")"),
     xlab = "Number of Successes", ylab = "Probability",
     col = "blue", lwd = 2)
points(x, dbinom(x, n, p), pch = 19, col = "red")


6. توزيع بواسون (عدد الأحداث)

(1) ما هو توزيع بواسون؟

توزيع عدد الأحداث التي تحدث خلال فترة زمنية أو مساحة محددة. ويُستخدم عادةً في:

المعامل λ = متوسط عدد الأحداث في الوحدة الزمنية.

(2) دوال بواسون الأربع

R
# Example: Average 10 customers per hour
dpois(8, lambda = 10)    # P(X = 8) = 0.1126
ppois(8, lambda = 10)    # P(X ≤ 8) = 0.3328
qpois(0.5, lambda = 10)  # Median = 10
rpois(100, lambda = 10)  # 100 Number of customers visiting the store per hour

# Example: 5 complaints per day, probability of more than 10
1 - ppois(10, lambda = 5)  # 0.0137  ← 1.4%

(3) العلاقة بين توزيع بواسون والتوزيع الطبيعي

عندما تكون قيمة λ كبيرة، فإن توزيع بواسون يقارب التوزيع الطبيعي N(λ, √λ):

R
# λ = 100
lambda <- 100
# Poisson P(90 ≤ X ≤ 110)
ppois(110, lambda) - ppois(89, lambda)  # ≈ 0.728

# Equivalent Normal Approximation
pnorm(110, 100, 10) - pnorm(90, 100, 10)  # ≈ 0.683
# Approximate but not exactly equal


7. توزيع t / توزيع F / توزيع كاي-مربع

(1) مرجع سريع للتوزيعات الثلاثة الرئيسية لعينات التوزيع

التوزيع الغرض دالة R
التوزيع t استنتاج المتوسط في العينات الصغيرة dt/pt/qt/rt
توزيع F تحليل التباين (ANOVA) df/pf/qf/rf
توزيع كاي-مربع المتغيرات الفئوية، ملاءمة النموذج dchisq/pchisq/qchisq/rchisq

(2) شرح مفصل لتوزيع t

R
# Degrees of freedom df = 10
qt(0.975, df = 10)   # 2.228  <- t threshold (larger than the normal distribution's 1.96)
pt(2.228, df = 10)    # 0.975

# As df -> inf, t distribution -> standard normal
qt(0.975, df = 1000)  # 1.962  ← Approach 1.96
qt(0.975, df = 10000) # 1.960
💡 نصيحة: عندما يكون n > 30، يكون التوزيع t مطابقًا تقريبًا للتوزيع الطبيعي، لذا يمكنك استخدام التقريب الطبيعي. وعندما يكون n < 30، استخدم التوزيع t حصريًّا.

(3) توزيع كاي-مربع

R
# Degrees of freedom df = 5
dchisq(3, df = 5)   # Density
pchisq(11.07, df = 5)  # 0.95  <- Chi-square critical value (95%)
qchisq(0.95, df = 5)   # 11.07

# Example: Observed 8 events, expected 5, p-value
1 - pchisq(8, df = 5)  # 0.846

(4) التوزيع F

R
# Degrees of freedom df1 = 5, df2 = 10
qf(0.95, df1 = 5, df2 = 10)  # 3.326  ← F Threshold
pf(3.326, df1 = 5, df2 = 10) # 0.95


8. set.seed: البذرة العشوائية

(1) لماذا نحتاج إلى البذور؟

«الأرقام العشوائية» في لغة R هي في الواقع أرقام شبه عشوائية — فبمجرد تحديد بذرة، يمكن إعادة إنتاج النتائج:

R
# No seeded players
rnorm(3)  # The results are different every time

# Let $s$ be a seed
set.seed(42)
rnorm(3)  # The First Time
set.seed(42)
rnorm(3)  # Exactly the same
💡 نصيحة: احرص على تضمين set.seed() في بحثك/تقريرك — لضمان إمكانية تكرار النتائج.

(2) التطبيقات العملية

R
# 1. Simulate Preset Seeds
set.seed(42)
sim_data <- rnorm(1000, 100, 15)

# 2. Set a seed before training the model
set.seed(123)
model <- lm(y ~ x, data)

# 3. Set a seed before cross-validation
set.seed(2024)
folds <- createFolds(data$y, k = 5)


9. أخذ العينات والمحاكاة

(1) sample() أخذ العينات

R
# 1. Simple Random Sampling
sample(1:100, 10)            # Draw 10 from 1-100 (no duplicates)
sample(1:100, 10, replace = TRUE)  # Sampling with replacement

# 2. Data Frame Sampling
sample_n(df, 10)              # Draw 10 rows (old)
slice_sample(df, n = 10)      # Draw 10 rows (dplyr 1.0+)

# 3. Stratified Sampling
df |>
  group_by(class) |>
  slice_sample(n = 5)         # Draw one from each group 5 row

# 4. Set Up Probability Sampling
sample(c("A", "B", "C"), 100, replace = TRUE,
       prob = c(0.5, 0.3, 0.2))

(2) محاكاة مونت كارلو

R
# Example: Estimate pi
set.seed(42)
n_sim <- 100000
x <- runif(n_sim, -1, 1)
y <- runif(n_sim, -1, 1)
inside <- sqrt(x^2 + y^2) <= 1
pi_est <- 4 * mean(inside)
# [1] 3.14116  ← Approach π = 3.14159


10. مثال كامل: محاكاة فحص الجودة

فيما يلي مثال على مسار عمل كامل يربط بين جميع مفاهيم التوزيع الاحتمالي التي تم تناولها في هذا الدرس.

▶ مثال: محاكاة عملية فحص الجودة على خط الإنتاج

R 📖 للعرض فقط
# ============================================
# Production Line Quality Inspection Simulation
# Features: Comprehensive Application of 4 Distributions
# ============================================

set.seed(42)

# 1. Product Weight Inspection (Normal Distribution)
# Specifications: Mean 100g, Standard Deviation 2g
n_products <- 10000
weights <- rnorm(n_products, mean = 100, sd = 2)

cat("=== Weight Inspection (Normal Distribution N(100, 2)) ===\n")
cat("Sample size:", length(weights), "\n")
cat("Actual Mean:", round(mean(weights), 4), "\n")
cat("Actual standard deviation:", round(sd(weights), 4), "\n")
cat("Theory < 95g Ratio:", round(pnorm(95, 100, 2), 4), "\n")
cat("Actual < 95g Ratio:", round(mean(weights < 95), 4), "\n")
cat("Theory < 105g Ratio:", round(pnorm(105, 100, 2), 4), "\n")
cat("Actual < 105g Ratio:", round(mean(weights < 105), 4), "\n\n")

# 2. Inspection of Nonconforming Products (Binomial Distribution)
# Sample 100 items, probability of at least 95 passing
n_sample <- 100
p_pass <- 0.95
prob_at_least_95 <- 1 - pbinom(94, n_sample, p_pass)
cat("=== Random Sampling Inspection (Binomial(100, 0.95)) ===\n")
cat("P(95 Qualified) =", round(prob_at_least_95, 4), "\n\n")

# 3. Customers Visit the Store (Poisson Distribution)
# Average 10 customers per hour
n_hours <- 1000
customers <- rpois(n_hours, lambda = 10)
cat("=== Customers Visit the Store (Poisson(10)) ===\n")
cat("Theoretical mean: 10\n")
cat("Actual Mean:", round(mean(customers), 2), "\n")
cat("Theory P(>15):", round(1 - ppois(15, 10), 4), "\n")
cat("Actual P(>15):", round(mean(customers > 15), 4), "\n\n")

# 4. Sample Survey (t Distribution)
# Sample 30 products, estimate mean
sample_size <- 30
sample_data <- sample(weights, sample_size)
cat("=== Sample Survey (t Distribution) ===\n")
cat("Sample size:", sample_size, "\n")
cat("Sample mean:", round(mean(sample_data), 2), "\n")
cat("95% Confidence Interval: [\n")
ci <- t.test(sample_data)$conf.int
cat("  ", round(ci[1], 2), ",", round(ci[2], 2), "]\n\n")

# 5. Hypothesis Testing (use qnorm)
# I want to know if the weight deviates significantly 100g
z_score <- (mean(sample_data) - 100) / (sd(sample_data) / sqrt(sample_size))
p_value <- 2 * (1 - pnorm(abs(z_score)))
cat("=== Hypothesis Testing (Z Test) ===\n")
cat("Z score:", round(z_score, 4), "\n")
cat("P value:", round(p_value, 4), "\n")
cat("Conclusion:", ifelse(p_value < 0.05, "Significant deviation from 100g", "No significant difference"), "\n\n")

# 6. Outlier Detection (The Concept of the Chi-Square Distribution)
# Use 3-sigma principle
outliers <- weights[abs(weights - 100) > 3 * 2]
cat("=== Outlier Detection (3-sigma Principle) ===\n")
cat("Theoretical Anomaly Ratio:", round(2 * pnorm(-3), 6), "(i.e. 0.27%)\n")
cat("Actual Number of Exceptions:", length(outliers), "/", n_products, "\n")
cat("Actual Exception Rate:", round(length(outliers) / n_products, 6), "\n")

# 7. Sampling Design (Stratified Sampling)
cat("\n=== Stratified Sampling ===\n")
# Simulate 3 production lines (Different Pass Rates)
production <- tibble::tibble(
  line = rep(c("Line A", "Line B", "Line C"), each = 1000),
  weight = c(rnorm(1000, 100, 2),
             rnorm(1000, 101, 2),
             rnorm(1000, 99, 2))
)

# Draw 50 from each line
library(dplyr)
sampled <- production |>
  group_by(line) |>
  slice_sample(n = 50)

cat("Draw 50 per line, Estimated Overall Mean:\n")
cat("Overall Sample Mean:", round(mean(sampled$weight), 2), "\n")
cat("Total True Mean:", round(mean(production$weight), 2), "\n")
56 سطر من الكود المنطقي (تجاوز الحد 40, للعرض فقط)

الناتج المتوقع (مقتطف):

TEXT 📖 للعرض فقط
=== Weight Inspection (Normal Distribution N(100, 2)) ===
Sample size: 10000
Actual Mean: 99.9898
Actual standard deviation: 1.9973
Theory < 95g Ratio: 0.0062
Actual < 95g Ratio: 0.0063

=== Random Sampling Inspection (Binomial(100, 0.95)) ===
P(95 Qualified) = 0.5647


❓ أسئلة شائعة

س كيف يمكن التمييز بين d و p و q و r؟
ج تشير d إلى الكثافة، و p إلى التراكمي، و q إلى الشريحة، و r إلى العشوائي.
س كيف تفسر الرسم البياني لمعيار QQ؟
ج تشير النقاط القريبة من الخط الأحمر إلى توزيع طبيعي. أما المنحنى على شكل حرف S فيشير إلى توزيع غير متماثل، بينما يشير المنحنى على شكل حرف U إلى توزيع ذي ذيول ثقيلة أو خفيفة.
س ما هي استخدامات توزيع كاي-مربع؟
ج ① اختبار ملاءمة النموذج ② اختبار الاستقلالية (جدول الارتباط) ③ فترات الثقة للتباينات المقدرة. لن نخوض في التفاصيل في هذا الدرس، ولكنه سيُستخدم في الدرس التالي المتعلق باختبار الفرضيات.

📖 ملخص


📝 تمارين

  1. المسألة الأساسية: استخدم pnorm لحساب ما يلي بالنسبة لتوزيع N(100, 2): ① P(X < 95)، ② P(X > 105)، ③ P(95 < X < 105)، و④ فاصل الثقة بنسبة 99%. تحقق من صحة النتائج.

  2. المسألة الأساسية: استخدم rbinom(1000, 10, 0.5) لمحاكاة 1,000 تجربة لـ «رمي عملة معدنية 10 مرات»، واحسب المتوسط والتباين والانحراف المعياري للعينة. قارن هذه القيم بالقيم النظرية (5، 2.5، 1.58).

  3. المسألة الأساسية: استخدم rpois(1000, 5) لمحاكاة 1,000 حالة لـ «عدد المكالمات المستلمة خلال 5 دقائق»، وارسم رسمًا بيانيًّا تكراريًّا ودالة الكثافة الاحتمالية النظرية لتوزيع بواسون، وقارن بين التوزيعين.

  4. مشكلة متقدمة: قم بمحاكاة 10,000 قيمة لوزن المنتجات (موزعة توزيعًا عاديًّا N(100, 2))، واستخدم قاعدة 3σ لتحديد عدد القيم المتطرفة، وقارنها بالقيمة النظرية البالغة 0.27% للتحقق من صحة نظرية الحد المركزي (CLT).

  5. التحدي: تقدير قيمة π باستخدام محاكاة مونت كارلو: ① قم برمي النرد 10,000 مرة؛ ② احسب نسبة المرات التي تقع فيها النرد داخل ربع دائرة؛ ③ قم بتقدير 4 × هذه النسبة = π؛ ④ قم بتغيير عدد مرات رمي النرد (100، 1,000، 10,000، 100,000) لملاحظة التغيرات في الدقة. التقط لقطات شاشة للنتائج الخاصة بمستويات الدقة الأربعة.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%