מודול 11: בחינת השערות — סטטיסטיקה במרחב הצורות

שבוע 11 — כלי חרס, סטטיסטיקה וסינתזה

מדוע בדיקות סטטיסטיות רגילות אינן מתאימות לנתוני צורה

נתוני צורה מ-GM הם רב-ממדיים: כל פרט מתואר על ידי משתנים רבים (ציוני PC, או קואורדינטות פרוקרוסטס גולמיות). בדיקות חד-ממדיות רגילות (t-test, ANOVA) בוחנות משתנה אחד בכל פעם. עבור צורה, אנחנו זקוקים לבדיקות שפועלות בממדים רבים בו-זמנית.

בנוסף, נתוני צורה לא תמיד עומדים בהנחות של בדיקות פרמטריות קלאסיות (נורמליות רב-ממדית, שוויון שונות). גדלי מדגם בארכאולוגיה לרוב קטנים.

הפתרון המשמש ב-GM מודרני: בדיקות מבוססות תמורה (permutation).


ההיגיון של בדיקות תמורה

בדיקת תמורה שואלת: כמה פעמים היינו רואים הבדל גדול כזה (או גדול יותר) בין קבוצות אילו סימוני הקבוצות היו מוקצים באקראי?

שלב אחר שלב:

  1. חשבו את סטטיסטיקת המבחן הנצפית (למשל, יחס F המשווה שונות תוך-קבוצתית לשונות בין-קבוצתית)
  2. בצעו תמורה אקראית של סימוני הקבוצות בין הפרטים, תוך שמירת הנתונים
  3. חשבו מחדש את סטטיסטיקת המבחן
  4. חזרו על שלבים 2–3 פעמים רבות (999 או 9999 תמורות)
  5. הp-ערך = שיעור הסטטיסטיקות המתומרות ≥ לסטטיסטיקה הנצפית

אין הנחות על ההתפלגות. עובד עם מדגמים קטנים. מקובל לרווחה בספרות GM.


MANOVA במרחב הצורות

MANOVA (ניתוח שונות רב-ממדי) בוחן האם צנטרואידי הקבוצות (צורות ממוצעות) שונים יותר מהצפוי על פי המקרה.

ב-GM, אנחנו מיישמים בדרך כלל MANOVA על ציוני PC הראשונים (הלוכדים, נניח, 90% מהשונות בצורה). זה מה שפונקציית permutation_manova() שלנו עושה.

# מיושם על כל אחד משלושת מאגרי הנתונים שלנו
f_stat, p_val = permutation_manova(scores, labels, n_perm=999, n_pcs=10)
r2 = f_stat / (f_stat + (len(labels) - 2))  # גודל אפקט משוער

print(f"F = {f_stat:.3f}, p = {p_val:.3f}, R² = {r2:.3f}")

גודל אפקט: R²

ה-p-ערך אומר לנו האם הקבוצות שונות. גודל האפקט אומר לנו כמה הן שונות.

ב-GM, גודל האפקט הסטנדרטי הוא — שיעור שונות הצורה הכוללת המוסבר על ידי חברות בקבוצה:

\[R^2 = \frac{SS_{between}}{SS_{total}}\]

ניתוח יכול להיות מובהק סטטיסטית עם R² קטן מאוד. לדוגמה: אם p = 0.001 אך R² = 0.04, הקבוצות שונות באופן מהימן אך הבדל הקבוצות מסביר רק 4% מסך שונות הצורה. 96% הנותרים הם שונות בתוך הקבוצות.

דווחו תמיד גם p וגם R²

בארכאולוגיה, שם גדלי מדגם לרוב קטנים והשונות גבוהה, R² לעיתים קרובות אינפורמטיבי יותר מ-p-ערך בלבד.


אלומטריה: כאשר הגודל מנבא את הצורה

אלומטריה היא הקשר בין גודל לצורה. בביולוגיה, לאורגניזמים גדולים יותר יש לעיתים קרובות פרופורציות שונות מאלה של אורגניזמים קטנים יותר (חשבו כיצד ראשו של גור שונה מזה של כלב בוגר).

בארכאולוגיה: - למטבעות גדולות יותר עשויות להיות פרופורציות דיוקן שונות מאשר קטנות - לכלי חרס גדולים יותר עשויים להיות צווארים צרים יחסית - לגרזנים גדולים יותר עשויים להיות להבים רחבים יחסית

בחינת אלומטריה:

# בחינה: האם גודל-צנטרואיד מנבא צורה?
from scipy.stats import pearsonr

# תאם גדלי-צנטרואיד עם ציוני PC1
r, p = pearsonr(centroid_sizes, scores[:, 0])
print(f"אלומטריה (גודל לעומת PC1): r = {r:.3f}, p = {p:.3f}")

# גרף פיזור
plt.figure(figsize=(7, 5))
plt.scatter(np.log(centroid_sizes), scores[:, 0], alpha=0.7)
plt.xlabel("Log centroid size")
plt.ylabel("PC1 score (shape)")
plt.title("Allometric plot: size vs. shape PC1")
# הוספת קו רגרסיה
m, b = np.polyfit(np.log(centroid_sizes), scores[:, 0], 1)
x = np.linspace(np.log(centroid_sizes).min(), np.log(centroid_sizes).max(), 100)
plt.plot(x, m*x + b, 'r--')
plt.tight_layout()
plt.show()

אם האלומטריה מובהקת: ייתכן שתרצו להסיר את אפקט הגודל לפני השוואת קבוצות (באמצעות שאריות מרגרסיית האלומטריה).


השוואות מרובות

אם אתם משווים 5 תקופות כלי חרס אחת מול השנייה, אתם מריצים 10 השוואות. על פי המקרה, תצפו שלפחות אחת תהיה “מובהקת” ב-p < 0.05 — גם אם לא קיים הבדל אמיתי בשום מקום.

פתרונות:

  1. תיקון בונפרוני: חלקו את סף ה-α שלכם במספר הבדיקות. עבור 10 בדיקות, השתמשו ב-p < 0.005 במקום p < 0.05.

  2. FDR של Benjamini-Hochberg: פחות שמרני, שולט בשיעור הגילויים הכוזבים ולא בשיעור השגיאות המשפחתי.

  3. השערות מוקדמות: בחנו רק השוואות שחזיתם לפני שהסתכלתם בנתונים. זוהי הגישה העקרונית ביותר.

from statsmodels.stats.multitest import multipletests

p_values = [0.03, 0.04, 0.001, 0.08, 0.02]  # דוגמה: 5 בדיקות זוגיות
reject, p_corrected, _, _ = multipletests(p_values, method='bonferroni')

for orig, corr, rej in zip(p_values, p_corrected, reject):
    print(f"p = {orig:.3f} → p מתוקן = {corr:.3f}{'מובהק' if rej else 'לא מובהק'}")

סיכום: דיווח סטטיסטי במחקר GM

דוח סטטיסטי מלא צריך לכלול:

מרכיב מה לדווח
בדיקה איזו בדיקה (MANOVA תמורה, וכו’)
פרמטרים מספר ה-PC בשימוש, מספר התמורות
סטטיסטיקת F יחס F הנצפה
p-ערך מהתפלגות התמורה
גודל אפקט
השוואות מרובות שיטת התיקון בשימוש (אם בכלל)

מעבדה: יישום סטטיסטיקה על מאגר הנתונים של הפרויקט הסופי

פתחו את מחברת שבוע 11

מעבדת השבוע הזה פתוחה: השתמשו במחברת Colab של שבוע 11 כדי להריץ את חבילת הסטטיסטיקה המלאה על כל מאגר הנתונים שאתם משתמשים בו לפרויקט הסופי (או תצוגה מקדימה שלו).


שבוע הבא: סינתזה ומצגות סיום

← מודול 12: שאלות גדולות + מצגות סיום

קורס מאת שי גורדין | אוניברסיטת אריאל | אביב 2026