R: اختبار الفرضيات R

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

في الدرس السابق، تعرفنا على توزيعات الاحتمالات — من الناحية النظرية. في هذا الدرس، سنتعمق في اختبار الفرضيات — أي استخدام العينات لاستخلاص استنتاجات حول المجموع. هذا هو جوهر الإحصاء: هل الإعلان الذي يدعي «زيادة بنسبة 20% في المبيعات» صحيح أم مجرد دعاية؟ هل الفرق بين مجموعتين من البيانات ناتج عن الصدفة أم أنه أمر حتمي؟ يمكن لـ R الإجابة عن ذلك بأربع أسطر فقط من التعليمات البرمجية.

بعد الانتهاء من هذا الدرس، ستتمكن من استخدام لغة R لإجراء: اختبارات t (مقارنة المتوسطات)، واختبارات النسب (مقارنة معدلات النجاح)، واختبارات كاي-مربع (الاستقلالية)، وتحليل التباين (مقارنة مجموعات متعددة).

1. ما ستتعلمه



2. قصة عن اختبار A/B

(1) المشكلة: هل الإعلانات فعالة؟

أجرى بوب اختبارًا من النوع A/B:

سأل المدير: "هل الفارق البالغ 2% حقيقي أم مجرد صدفة؟"

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

R
# Two-Proportion Test
prop.test(c(80, 100), c(1000, 1000))
# 2-sample test for equality of proportions
# X-squared = 2.46, df = 1, p-value = 0.117
# Conclusion: p > 0.05, Differences **Not significant** (It might be a coincidence.)

سطر واحد من التعليمات البرمجية → قيمة p → القرار.



3. العملية المكونة من 5 خطوات لاختبار الفرضيات

(1) عملية من 5 خطوات

100%
graph TB
    A[1. Propose a hypothesis] --> B[2. Calculate the statistic]
    B --> C[3. Calculation p-value]
    C --> D[4. Decision-making]
    D --> E[5. Report]
    
    A --> A1["H0 Null Hypothesis<br/>H1 Alternative Hypothesis"]
    B --> B1["t/z/Chi-square/F"]
    C --> C1["P Data Visualization H0 An equally extreme probability"]
    D --> D1["p < 0.05 → Reject H0"]
    E --> E1["Report p-value + Effect size + Confidence Interval"]
    
    style A fill:#fff3cd
    style B fill:#cce5ff
    style C fill:#d4edda
    style D fill:#f8d7da
    style E fill:#e1d4ff

(2) المفاهيم الأساسية

المفهوم المعنى
H0 (الفرضية الصفرية) الافتراض الافتراضي: المجموعتان لا يمكن التمييز بينهما (الفرق = محض صدفة)
H1 (الفرضية البديلة) ما نريد إثباته حقًّا: أن المجموعتين تختلفان
الإحصاء رقم يقيس «مدى كبر الفرق» (t، z، χ²، F)
قيمة p احتمال ملاحظة النتيجة الحالية أو نتيجة أكثر تطرفًا بافتراض صحة الفرضية الصفرية H0
α (مستوى الدلالة الإحصائية) عتبة قيمة p؛ وعادةً ما تكون 0.05
رفض الفرضية الصفرية H0 p < 0.05، الفرق ذو دلالة إحصائية
لا يتم رفض الفرضية الصفرية H0 p ≥ 0.05؛ لا يمكن استنتاج وجود فرق (≠ لا يوجد فرق)
⚠️ نقطة أساسية: "عدم رفض الفرضية الصفرية (H0) ≠ قبول الفرضية الصفرية (H0)." إن قيمة p الأكبر من 0.05 تشير ببساطة إلى «عدم كفاية الأدلة»؛ ولا تعني أن «المجموعتين متساويتان بالفعل».



4. t.test(): مقارنة المتوسطات

(1) ثلاثة أنواع من اختبارات t

النوع السيناريو صيغة R
عينة واحدة مجموعة واحدة مقابل قيمة معروفة t.test(x, mu = 0)
عينتان مستقلتان عينتان مستقلتان t.test(x, y)
العينات المزدوجة الاختبارات التمهيدية والنهائية لنفس المادة t.test(x, y, paired = TRUE)

(2) اختبار تي لعينة واحدة

R
# Example: Product Weight Standard 100g, test 10 products
weights <- c(98, 102, 99, 101, 100, 97, 103, 99, 101, 100)

t.test(weights, mu = 100)
# One Sample t-test
# t = 0, df = 9, p-value = 1
# 95% CI: [98.7, 101.3]
# mean of x = 100
# Conclusion: p = 1, **Don't reject H0**, the mean is equal to 100g

(3) اختبار t المستقل لعينتين

R
# Example: A/B Testing the conversion times for two groups
group_a <- c(12, 15, 14, 13, 16, 14, 15, 13, 14, 15)
group_b <- c(10, 11, 12, 13, 11, 10, 12, 11, 13, 12)

t.test(group_a, group_b)
# Welch Two Sample t-test
# t = 5.32, df = 14.6, p-value = 0.0001
# 95% CI: [1.36, 3.24]
# Conclusion: p < 0.05, **Reject H0**, Group A was significantly slower than Group B

(4) اختبار t المزدوج

R
# Example: Before medication vs after medication in the same group of patients
before <- c(180, 175, 190, 170, 185)
after <- c(165, 160, 175, 160, 170)

t.test(before, after, paired = TRUE)
# Paired t-test
# t = 8.5, df = 4, p-value = 0.001
# Conclusion: p < 0.05, **Significant decline** (The medication is effective)

(5) المعلمات الرئيسية

المعلمة المعنى القيمة الافتراضية
mu القيمة المعروفة لعينة واحدة 0
paired هل تم إقرانه؟ FALSE
var.equal افتراض التماثل في التباين FALSE (Welch)
alternative اتجاه بديل "two.sided"
conf.level مستوى الثقة 0.95
R
# One-sided test (right-tailed)
t.test(x, mu = 100, alternative = "greater")

# One-sided test (left-tailed)
t.test(x, mu = 100, alternative = "less")


5. prop.test(): اختبار التناسب

(1) اختبار النسبة الواحدة

R
# Example: Historical Product Pass Rate 95%, now 92 out of 100 are Qualified
prop.test(92, 100, p = 0.95)
# 1-sample proportions test
# X-squared = 1.27, df = 1, p-value = 0.26
# Conclusion: p > 0.05, Pass Rate **No significant decrease**

(2) اختبار النسبتين (جوهر اختبار A/B)

R
# Example: Group A 1000 people, 80 conversions; Group B 1000 people, 100 conversions
prop.test(c(80, 100), c(1000, 1000))
# 2-sample test for equality of proportions
# X-squared = 2.46, df = 1, p-value = 0.117
# 95% CI: [-0.046, 0.006]
# Conclusion: p > 0.05, **The difference is not significant** (It might be a coincidence.)

(3) اختبار النسبة مقابل اختبار كاي-مربع



6. chisq.test(): اختبار كاي-مربع

(1) الاستخدامان الرئيسيان

الغرض السيناريو الصيغة
مدى ملاءمة النموذج القيم المرصودة مقابل القيم المتوقعة chisq.test(observed)
الاستقلالية هل هناك ارتباط بين المتغيرين التصنيفيين؟ chisq.test(table(x, y))

(2) اختبار ملاءمة النموذج

R
# Example: Dice Fairness Test (toss 60 times)
observed <- c(8, 12, 10, 11, 9, 10)  # Number of times each face appears
expected <- rep(10, 6)  # Expect uniformity

chisq.test(observed, p = expected / sum(expected))
# Chi-squared test
# X-squared = 1.2, df = 5, p-value = 0.945
# Conclusion: p > 0.05, Dice **is fair** (Do not reject the uniformity assumption)

(3) اختبار الاستقلالية

R
# Example: Gender vs Purchasing Behavior
gender <- c("M", "M", "F", "F", "M", "F", "M", "F")
purchase <- c("Buy", "Not buying", "Buy", "Buy", "Not buying", "Buy", "Buy", "Not buying")

tab <- table(gender, purchase)
print(tab)
#      Not buying Buy
#   M    1  3
#   F    1  3

chisq.test(tab)
# X-squared = 0, df = 1, p-value = 1
# Conclusion: p > 0.05, Gender and Purchasing **Independent**

# Note: Any 2x2 Table with Expected Frequencies < 5, use Fisher's Exact Test
fisher.test(tab)

(4) متطلبات التردد المتوقعة

R
# Chi-Square Test Requirements: Expected Frequency for Each Cell >= 5
# Use Fisher's Exact Test when not satisfied
result <- chisq.test(tab)
result$expected  # View Expected Frequency


7. aov() تحليل التباين (ANOVA)

(1) الحالات التي ينطبق عليها ذلك

مقارنة المتوسطات لـ 3 مجموعات أو أكثر (يقتصر اختبار t على مجموعتين).

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

R
# Example: Effect of 3 Fertilizer Types on Crop Yields
fertilizer <- c(rep("A", 10), rep("B", 10), rep("C", 10))
yield <- c(20, 22, 21, 19, 23, 20, 21, 22, 19, 20,   # A
           25, 26, 24, 27, 25, 26, 27, 25, 24, 26,  # B
           18, 19, 17, 18, 19, 20, 19, 18, 19, 20)  # C

df <- data.frame(fertilizer, yield)

# Single-factor ANOVA
model <- aov(yield ~ fertilizer, data = df)
summary(model)
#              Df Sum Sq Mean Sq F value Pr(>F)    
# fertilizer     2  220.0   110.0   91.7  <2e-16 ***
# Residuals     27   32.4     1.2
# Conclusion: p < 0.05, 3 Fertilizer Types **Significant difference**

# Post-hoc comparison: Tukey HSD
TukeyHSD(model)
#   diff        lwr        upr     p adj
# B-A   5.0  3.91       6.09    0.000
# C-A  -1.5 -2.59      -0.41    0.005
# C-B  -6.5 -7.59      -5.41    0.000


8. الاختبار غير البارامتري wilcox.test()

(1) متى ينبغي استخدامه؟

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

R
# Non-parametric paired test (Wilcoxon signed-rank)
before <- c(180, 175, 190, 170, 185)
after <- c(165, 160, 175, 160, 170)

wilcox.test(before, after, paired = TRUE)
# V = 15, p-value = 0.0625
# Conclusion: p > 0.05 (Not significant), however, the sample size is small

# Independent non-parametric (Mann-Whitney U)
group_a <- c(12, 15, 14, 13, 16)
group_b <- c(10, 11, 12, 13, 11)
wilcox.test(group_a, group_b)
# W = 25, p-value = 0.028
# Conclusion: p < 0.05, the difference is significant


9. تفسير قيم p والمزالق الشائعة

(1) الفهم الصحيح لقيم p

الترجمة الشرح
✅ صحيح احتمال ملاحظة النتيجة الحالية أو نتيجة أكثر تطرفًا عندما تكون الفرضية الصفرية (H0) صحيحة
❌ خطأ "احتمال صحة الفرضية الصفرية (H0)"
❌ خطأ "الفرق ناتج عن الصدفة"
❌ خطأ "شدة الفرق"

(2) 5 أخطاء شائعة

100%
graph TB
    A[p Value Trap] --> B[p-hacking<br/>After trying it several times p<0.05]
    A --> C[Large sample size p Bi Xiao<br/>Depends on the effect size]
    A --> D[p<0.05 Does not mean it is useful<br/>Check effect size]
    A --> E[Don't refuse ≠ Accept H0]
    A --> F[Significance ≠ Practical Significance]
    
    style A fill:#fff3cd
    style B fill:#f8d7da
    style C fill:#cce5ff
    style D fill:#d4edda
    style E fill:#e1d4ff
    style F fill:#ffe1d4

(3) حجم التأثير

لا يكفي النظر إلى قيمة p وحدها؛ بل يجب النظر إلى حجم التأثير — أي مدى كبر الفرق:

الاختبار حجم التأثير
اختبار t d كوهين = (m1 - m2) / s_pooled
ANOVA η² (إيتا تربيع)
كاي-مربع V كرامر
الارتباط r (معامل الارتباط)
R
# Cohen's d Calculation
cohens_d <- function(x, y) {
  n1 <- length(x)
  n2 <- length(y)
  s_pooled <- sqrt(((n1-1)*var(x) + (n2-1)*var(y)) / (n1 + n2 - 2))
  (mean(x) - mean(y)) / s_pooled
}
د كوهين المعنى
0.2 تأثير ضئيل
0.5 تأثير معتدل
0.8 تأثير كبير


10. مثال كامل: اختبار A/B + المقارنة بين مجموعات متعددة

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

▶ مثال: التقييم الشامل لأداء الحملة التسويقية

R 📖 للعرض فقط
# ============================================
# Comprehensive Evaluation of Marketing Campaign Performance
# Features: t-test / Proportionality Test / ANOVA combined
# ============================================

set.seed(42)

# 1. A/B Test Conversion Time
group_a <- rnorm(50, mean = 15, sd = 3)  # Original Page
group_b <- rnorm(50, mean = 13, sd = 3)  # New Page

cat("=== A/B Test: Conversion Time ===\n")
cat("A Group Mean:", round(mean(group_a), 2), "s\n")
cat("B Group Mean:", round(mean(group_b), 2), "s\n")
cat("Differences:", round(mean(group_a) - mean(group_b), 2), "s\n\n")

# 2. t-test
t_result <- t.test(group_a, group_b)
print(t_result)
cat("\n")

# 3. Cohen's d
n1 <- length(group_a)
n2 <- length(group_b)
s_pooled <- sqrt(((n1-1)*var(group_a) + (n2-1)*var(group_b)) / (n1+n2-2))
cohens_d <- (mean(group_a) - mean(group_b)) / s_pooled
cat("Cohen's d (Effect size):", round(cohens_d, 3), "\n")
cat("Effect Size:", ifelse(abs(cohens_d) > 0.8, "L",
                  ifelse(abs(cohens_d) > 0.5, "Mid", "S")), "\n\n")

# 4. A/B Testing Conversion Rates
convert_a <- 80
convert_b <- 100
visitors_a <- 1000
visitors_b <- 1000

cat("=== A/B Test: Conversion Rate ===\n")
cat("A Group Conversion Rate:", round(convert_a / visitors_a * 100, 2), "%\n")
cat("B Group Conversion Rate:", round(convert_b / visitors_b * 100, 2), "%\n\n")

# 5. Proportionality Test
prop_result <- prop.test(c(convert_a, convert_b),
                          c(visitors_a, visitors_b))
print(prop_result)
cat("\n")

# 6. Comparison of 3 Marketing Strategies (ANOVA)
strategy <- c(rep("Email", 20), rep("Text Message", 20), rep("Push", 20))
sales <- c(rnorm(20, 100, 15),
           rnorm(20, 110, 15),
           rnorm(20, 105, 15))
df_strategy <- data.frame(strategy, sales)

cat("=== Comparison of 3 Sales Strategies (ANOVA) ===\n")
model <- aov(sales ~ strategy, data = df_strategy)
summary(model)
cat("\nPost-hoc comparison:\n")
print(TukeyHSD(model))

# 7. Gender and Purchasing Behavior (Chi-square)
gender <- sample(c("M", "F"), 200, replace = TRUE)
purchase <- sample(c("Buy", "Not buying"), 200, replace = TRUE,
                   prob = c(0.3, 0.7))
tab <- table(gender, purchase)
cat("\n=== Gender vs Purchase Chi-Square Test ===\n")
print(tab)
cat("\n")
chisq_result <- chisq.test(tab)
print(chisq_result)

# 8. Comprehensive Report
cat("\n=== Summary of Decisions ===\n")
cat("1. Conversion Time: Group A is", round(cohens_d, 2), "standard deviations slower than Group B",
    ifelse(t_result$p.value < 0.05, " (Significant)", " (Not significant)"), "\n", sep = "")
cat("2. Conversion Rate: A vs B Difference",
    ifelse(prop_result$p.value < 0.05, "Significant", "Not significant"), "\n")
cat("3. 3 Strategies:",
    ifelse(summary(model)[[1]]$`Pr(>F)`[1] < 0.05, "Significant difference", "No difference"), "\n")
54 سطر من الكود المنطقي (تجاوز الحد 40, للعرض فقط)

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

TEXT 📖 للعرض فقط
=== A/B Test: Conversion Time ===
A Group Mean: 14.87 s
B Group Mean: 12.94 s
Differences: 1.93 s

Welch Two Sample t-test
t = 3.18, df = 96.3, p-value = 0.002
Cohen's d (Effect size): 0.643
Effect Size: Mid

=== Summary of Decisions ===
1. Conversion Time: Group A is 0.64 standard deviations slower than Group B (Significant)
2. Conversion Rate: A vs B The difference is not significant
3. 3 Strategies: Significant difference


❓ أسئلة شائعة

س ما هي شروط إجراء اختبار كاي-مربع؟
ج يجب أن يكون التكرار المتوقع في كل خلية ≥ 5

📖 ملخص


📝 تمارين

  1. المسألة الأساسية: قم بمحاكاة درجات 30 طالبًا (المتوسط 80، الانحراف المعياري 10) وأجرِ اختبار t لعينة واحدة لتحديد ما إذا كان هناك انحراف ذو دلالة إحصائية عن 75 نقطة؛ ثم قم بمحاكاة درجات 30 طالبًا آخرين (المتوسط 78) وأجرِ اختبار t لعينتين. سجل قيم p.

  2. المشكلة الأساسية: قم بمحاكاة اختبار A/B (المجموعة أ: 1,000 شخص، 50 عملية تحويل؛ المجموعة ب: 1,000 شخص، 80 عملية تحويل). استخدم prop.test لاختبار ما إذا كان الفرق ذو دلالة إحصائية. احسب حجم التأثير «d» وفقًا لمعيار كوهين.

  3. تمرين أساسي: قم بإنشاء جدول ارتباط 3×3 (3 قنوات إعلانية × ما إذا حدثت نقرة أم لا)، واستخدم chisq.test لاختبار ما إذا كانت القنوات والنقرات مستقلة عن بعضها. تحقق من result$expected — هل جميع الترددات المتوقعة ≥ 5؟

  4. تمرين متقدم: قم بمحاكاة درجات الاختبار لثلاث طرق تدريس (20 طالبًا في كل مجموعة)، وأجرِ تحليل التباين (ANOVA) باستخدام aov، ثم استخدم TukeyHSD لتحديد المجموعتين اللتين تظهران أكبر فرق.

  5. التحدي: قم بإجراء اختبار A/B كامل — قم بمحاكاة وقت التحويل ومعدل التحويل لصفحتين (1,000 مستخدم لكل منهما). استخدم اختبار t واختبار النسبة (prop.test) ومؤشر Cohen’s d لإجراء تقييم شامل، واكتب تقريرًا بالقرارات (بما في ذلك قيمة p وحجم التأثير والتوصيات التجارية). التقط لقطة شاشة واحفظها.

Web-Tutorial.com

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

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

100%