חלק א: מחקר ונתונים · פרק 8
בניית קובץ נתונים
שאלונים מלאים בארגז הם עדיין לא נתונים. בפרק הזה נהפוך אותם לקובץ שתוכנה סטטיסטית יכולה לקרוא: שורה לכל נבדקCase, עמודה לכל משתנה, קודים ברורים, ערכים חסריםMissing value מסומנים, ומילון שמסביר הכול. נלמד גם את הכלים באקסל שחוסכים הכי הרבה עבודה וטעויות, ואיך מעבירים קובץ לתוכנה סטטיסטית.
איך חמישה תלמידים, מתוך 200, הכפילו את ממוצע מספר האחים בקובץ?
הם לא ענו על השאלה, ובמקום התשובה נרשם בקובץ 99. התוכנה לא ידעה ש־99 פירושו "לא ענה", וחישבה אותו כמו כל מספר. בסוף הפרק תדעו לבנות קובץ שבו דבר כזה לא יקרה, ולזהות אותו כשהוא כבר קרה.
בסוף הפרק תוכלו
- לבנות קובץ נתונים נכון: שורה לנבדק, עמודה למשתנה, קודים מספריים ומילון משתניםCodebook.
- לסמן ערכים חסרים, ולהגדיר אותם בתוכנה.
- להשתמש באקסל באימות נתונים, ב־VLOOKUP לחיבור קבצים, וב־IF ליצירת משתנים חדשים.
- להעביר קובץ מאקסל ל־SPSS ול־JASP, ולבדוק שהכול הגיע.
הכללים: שורה, עמודה, תא
כל שורה היא נבדק אחד. כל עמודה היא משתנה אחד. בשורה הראשונה שמות המשתנים: קצרים, באנגלית, בלי רווחים. בכל תא ערך אחד, ובדרך כלל מספר.
קובץ נתונים הוא טבלה, וכמעט כל תוכנה סטטיסטית מצפה לאותו מבנה בדיוק:
- כל שורה היא נבדק אחד. תלמיד שמילא שלושה שאלונים, לפני, אחרי ובמעקב, הוא עדיין שורה אחת, עם עמודות נפרדות לכל מדידה:
anx_pre,anx_post,anx_fu. מבנה כזה נקרא מבנה רחבWide format. - כל עמודה היא משתנה אחד, וכל פריט בשאלון הוא עמודה משלו:
a1עדa8. את ציון השאלון מחשבים אחר כך, בעמודה חדשה. ואם השאלון מועבר כמה פעמים, כל פריט מקבל גם את המועד בשם, אחרי קו תחתון:a1_pre,a2_preוכן הלאה, ו־a1_post,a2_postוכן הלאה. שמות קצרים ואינפורמטיביים, ותמיד אותו דפוס. - בשורה הראשונה, שמות המשתנים. שם קצר, באנגלית, בלי רווחים ובלי סימנים מיוחדים, שמתחיל באות:
anx_preולא "חרדה לפני". רווחים לא טובים: כשרוצים להוסיף תיאור, משתמשים בקו תחתון. את התיאור המלא כותבים במילון המשתנים. ולמה דווקא באנגלית? התוכנות של היום קוראות עברית, אבל שמות באנגלית עוברים בבטחה בין כל התוכנות, ובסינטקס ובייצוא לא נשברים. - עמודה ראשונה: מספר נבדקID (
id), ייחודי לכל אחד. בלעדיו אי אפשר לחבר קבצים, לתקן טעות, או לחזור לשאלון המקורי. - בכל תא ערך אחד. לא "2 או 3", לא "בערך 10", ולא הערות.
ומה לא עושים: לא ממזגים תאים, לא צובעים תאים כדי לסמן משהו (התוכנה לא רואה צבעים), ולא שמים שתי טבלאות באותו גיליון. כל מידע שחשוב, צריך עמודה משלו. אם רציתם לצבוע את הבנים בכחול, צריך עמודה של מגדר.
קידוד: מקטגוריות למספריםCoding
משתנים איכותייםCategorical variable רושמים כמספרים: במגדר, 1 בן ו־2 בת. בקבוצה, 0 ביקורת, 1 עקיפה, 2 משולבת. למה לא פשוט לכתוב "בת"? כי מילים מזמינות טעויות: "בת", "בת " עם רווח, ו"ילדה" הן שלוש קטגוריות שונות בעיני התוכנה. מספרים לא מתבלבלים. ובמשתנה של כן ולא, הקידוד 0 ו־1 נותן מתנה: הממוצע הוא אחוז ה"כן", כמו שראינו בפרק 5.
מילון משתנים
אם המספרים הם קודים, צריך מקום שאומר מה כל קוד. זה מילון המשתנים (codebook): גיליון נפרד, או קובץ נפרד, עם שורה לכל משתנה. מה המשתנה, מה כל ערך, איזה ערך מסמן חסר, ואילו פריטים הפוכיםReversed item. בלי מילון, קובץ נתונים הוא חידה, גם לחוקרת שבנתה אותו, אחרי חצי שנה. הנה כמה שורות ממילון המשתנים של קובץ המחקר:
| שם המשתנה | תיאור | ערכים | חסר |
|---|---|---|---|
gender | מגדר | 1 = בן, 2 = בת | |
parent_edu | השכלת ההורה המשכיל יותר | 1 = עד 12 שנות לימוד, 2 = על־תיכונית, 3 = תואר ראשון, 4 = תואר שני ומעלה | 99 = לא ידוע |
a1 | חרדה, פריט 1: "אני דואג/ת לגבי דברים" | 1 = אף פעם … 4 = תמיד | 99 = לא ענה |
m10 | קשיבות, פריט 10: "אני אומר/ת לעצמי שאסור לי להרגיש ככה" | 1 = אף פעם … 5 = תמיד | פריט הפוךReversed item |
anx_pre | חרדה: ממוצע 8 הפריטים, לפני התוכנית | 1 עד 4 |
בדקו את עצמכם4 שאלות
1.איזה מהשמות הבאים מתאים לשם של משתנה בשורה הראשונה של הקובץ?
anx_pre2 שם קצר, באנגלית, בלי רווחים, שמתחיל באות. ב־anx pre יש רווח, 2anx מתחיל בספרה, ו־חרדה_לפני כתוב בעברית. את התיאור המלא כותבים במילון המשתנים, לא בשם.2.מורה צבעה בצהוב את השורות של תלמידים שעברו לבית הספר באמצע השנה. מה עדיף לעשות?
3.במילון המשתנים: vol_pre, 0 = לא התנדב, 1 = התנדב. בקובץ, 76 מתוך 200 התלמידים קיבלו 1. מה הממוצע של העמודה, ומה הוא אומר?
4.שאלון קשיבות של 15 פריטים הועבר שלוש פעמים: לפני התוכנית, אחריה ובמעקב. כל פריט נשמר בעמודה משלו, ולכל מועד יש גם עמודה של הציון. כמה עמודות של קשיבות יהיו בקובץ, וכמה שורות לכל תלמיד?
ערכים חסרים
כשאין תשובה, משאירים את התא ריק, או רושמים קוד שלא יכול להיות תשובה אמיתית, כמו 99. אבל קוד חייבים להגדיר בתוכנה, לכל משתנה בנפרד. אחרת הוא נספר כמספר.
בכל מחקר יש תלמיד שדילג על שאלה, או הורה שלא דיווח על השכלה. יש שתי דרכים לרשום את זה. הראשונה: להשאיר את התא ריק. כל התוכנות מבינות שתא ריק הוא ערך חסר. השנייה: לרשום קוד, כמו 99, שפירושו "לא ענה". קוד מאפשר להבחין בין סיבות שונות (למשל 98 "לא רלוונטי" ו־99 "לא ענה"), ומבטיח שתא ריק לא נוצר בטעות.
לקוד יש שני כללים. הראשון: הוא חייב להיות ערך שלא יכול להופיע כתשובה. 99 אחים, או 99 בסולם של 1 עד 4, לא אפשריים, ולכן 99 בטוח במשתנים האלה. השני: צריך להגדיר אותו בתוכנה, לכל משתנה בנפרד. בקובץ שלנו, למשל, יש תלמיד שמספר הנבדק שלו הוא 99. אם נגדיר "99 = חסר" בעמודת id, הוא ייעלם.
אצל חמישה תלמידים מספר האחים לא ידוע, ובקובץ רשום 99. מה קורה לממוצע?
| N | M | SD | מקסימום | |
|---|---|---|---|---|
| 99 נספר כמספר | 200 | 4.75 | 15.20 | 99 |
| 99 מוגדר כחסר | 195 | 2.33 | 1.51 | 7 |
למה ההבדל כל כך גדול? ממוצע הוא סכום חלקי מספר הערכים. כל 99 מוסיף לסכום כמעט 97 "אחים" שלא קיימים. חמישה כאלה מוסיפים כ־485, ובחלוקה ל־200 תלמידים זה כמעט 2.4 אחים נוספים לממוצע. חמישה תלמידים, 2.5% מהמדגם, הכפילו את הממוצע, וסטיית התקן גדלה פי עשר.
שימו לב לסימנים שהיו צריכים להדליק נורה: ממוצע של כמעט חמישה אחים לילדים בכיתות ד׳ ו־ה׳, ומקסימום של 99. מכאן הרגל שכדאי לאמץ: בכל פלט, קודם בודקים את N, את המינימום ואת המקסימום. רק אחר כך מסתכלים על הממוצע.
כל התוכנות מטפלות בערך חסר באותה דרך פשוטה: מוציאות את הנבדק מהחישוב של המשתנה הזה. זה בסדר כשהחסר מקרי: תלמיד דילג על שאלה בטעות. זה פחות בסדר כשהחסר מספר משהו: אם דווקא התלמידים החרדים ביותר לא ענו על שאלון החרדה, הממוצע של מי שענה יהיה נמוך מהאמיתי. לכן מדווחים כמה חסרים היו בכל משתנה, ובודקים אם מי שחסר שונה ממי שלא. יש גם שיטות מתקדמות להשלמת ערכים חסרים, כמו השלמה מרובה (multiple imputation), שהן מעבר לספר הזה.
בדקו את עצמכם3 שאלות
1.בפריט החרדה a3 שני תלמידים לא ענו, ונרשם להם 99. סכום כל 200 התאים בעמודה הוא 572, והממוצע 2.86. מה הממוצע של מי שענה?
2.באיזה מהמשתנים הבאים אי אפשר להשתמש ב־99 כקוד חסר?
3.בשאלון יש שאלה: "עד כמה אתה נהנה בחוג שלך, מ־1 עד 5?" למה כדאי כאן שני קודים שונים לחסר, 98 ו־99?
אקסל: ארגז הכלים להכנת נתונים
כמו שראינו בפרק 3, את הנתונים מכינים באקסל, ומנתחים בתוכנה סטטיסטית. גם כשעובדים ב־SPSS, נוח הרבה יותר להקליד ולתקן באקסל. הנה הכלים שחוסכים הכי הרבה טעויות.
אימות נתונים: למנוע טעות לפני שהיא קורה
כשמקלידים 200 שאלונים, האצבע מחליקה. בעמודה של פריט מ־1 עד 4 מופיע פתאום 7, או 33. אימות נתונים (Data Validation) מונע את זה מראש: מסמנים את העמודות של פריטי החרדה, ובלשונית Data > Data Validation בוחרים Whole number, between, מינימום 1 ומקסימום 4. מעכשיו אקסל פשוט לא יקבל 7. ואם הוספתם את 99 כקוד חסר, צריך לאפשר גם אותו: למשל, Custom עם הנוסחה =OR(AND(J2>=1,J2<=4),J2=99).
באותו חלון אפשר לבחור גם List, ואז בכל תא מופיעה רשימה נפתחת של הערכים המותרים. נוח במיוחד למשתנים כמו קבוצה או שכבה.
לאימות נתונים יש שתי נקודות עיוורות. הוא בודק רק מה שמקלידים אחרי שהגדרתם אותו: ערכים שהיו בעמודה לפני כן, או ערכים שהודבקו מקובץ אחר, עוברים בלי שום הודעה. לכן, אחרי שמגדירים את הכלל על עמודות שכבר יש בהן נתונים, בוחרים בחץ הקטן שליד Data > Data Validation את Circle Invalid Data (בעברית: הקף נתונים לא חוקיים). אקסל מקיף בעיגול אדום כל תא שלא עומד בכלל, ואפשר לעבור עליהם אחד אחד.
VLOOKUP: לחבר שני קבצים לפי מספר נבדקID
במחקר שלנו, נניח שאת השאלונים של המעקב, חצי שנה אחרי, הקלידו בקובץ נפרד, בסדר שבו הם חזרו מהכיתות. עכשיו צריך להעביר אותם לקובץ הראשי. אפשר להעתיק ולהדביק? רק אם שני הקבצים באותו סדר בדיוק, ואם אף תלמיד לא חסר באחד מהם. מספיק שתלמיד אחד חסר, וכל הנתונים שאחריו יזוזו שורה, ויגיעו לתלמיד הלא נכון. זו אחת הטעויות הכי מסוכנות בהכנת נתונים, כי אין לה שום סימן.
הפתרון הוא פונקציה שמחפשת את מספר הנבדק בקובץ השני, ומביאה את הערך שלו: VLOOKUP. יש לה ארבעה חלקים:
- A2
- מה לחפש: מספר הנבדק בשורה הזו.
- Followup!$A$2:$H$201
- איפה לחפש: הטבלה בגיליון השני. העמודה הראשונה של הטבלה חייבת להיות עמודת המפתח, מספר הנבדק. והדולרים חובה: כשנגרור את הנוסחה למטה, מספר הנבדק צריך לזוז, אבל הטבלה צריכה להישאר במקום. בדיוק כמו בפרק 3: חלק דינמי, וחלק קבוע.
- 4
- מאיזו עמודה בטבלה להביא: כאן הרביעית,
anx_fu(העמודות הן id, sat_fu, mind_fu, anx_fu…). - FALSE
- רק התאמה מדויקת. אם מספר הנבדק לא נמצא, הנוסחה מחזירה
#N/A. אפשר לכתוב גם 0. לעולם לא TRUE: הוא מביא את הערך של מספר קרוב, כלומר של תלמיד אחר.
ומה עושים עם #N/A אצל מי שבאמת חסר בקובץ השני? יש שתי דרכים. הוותיקה: מסמנים את העמודה, מעתיקים, ומדביקים Paste Special > Values, כך שבמקום נוסחאות נשארים ערכים. ואז Ctrl+H, מחפשים #N/A ומחליפים בכלום. הקצרה: עוטפים את הנוסחה ב־IFERROR, שמחזירה ערך אחר כשיש שגיאה: =IFERROR(VLOOKUP(A2,Followup!$A$2:$H$201,4,FALSE),""), ומקבלים תא ריק.
הדבקת ערכים שווה כמה מילים, כי תשתמשו בה כל הזמן. נוסחה תלויה בתאים שהיא מסתכלת עליהם: מוחקים את גיליון המעקב, ועמודה שלמה של VLOOKUP הופכת ל־#REF!. לכן, כשהנוסחה סיימה את תפקידה, מעתיקים את העמודה ומדביקים אותה על עצמה כערכים: המספרים נשארים, בלי קשר לנוסחה. הדרך הקצרה: לחיצה ימנית על התא שבו מדביקים, ובאפשרויות ההדבקה בוחרים בסמל שכתוב עליו 123. מהמקלדת: Ctrl+Alt+V פותח את חלון Paste Special, ושם בוחרים Values.
ועוד מילה על "". שני גרשיים הם הדרך לומר לאקסל "תשאיר ריק", אבל התא שמתקבל ריק רק למראה: יש בו טקסט באורך אפס. AVERAGE ו־COUNT מתעלמות ממנו, וכשהקובץ נשמר כ־CSV הוא נשמר כשדה ריק, כך שהתוכנה הסטטיסטית תקרא אותו כחסר. עד כאן הכול בסדר. אבל ISBLANK תחזיר עליו FALSE, ו־COUNTA תספור אותו. לכן, כשבודקים אם תא חסר, כותבים =A2="", שנכון גם לתא ריק באמת וגם לתא כזה, ולא ISBLANK(A2).
בגרסאות החדשות של אקסל (Microsoft 365, ומאקסל 2021) יש פונקציה פשוטה יותר: =XLOOKUP(A2, Followup!$A$2:$A$201, Followup!$D$2:$D$201, ""). מה לחפש, באיזו עמודה לחפש, מאיזו עמודה להביא, ומה לכתוב אם לא נמצא. היא לא מחייבת שעמודת המפתח תהיה ראשונה, וברירת המחדל שלה היא התאמה מדויקת. VLOOKUP עדיין נפוצה יותר, ועובדת בכל גרסה.
IF: משתנה חדש לפי תנאי
לפעמים צריך ליצור משתנה חדש מתוך משתנה קיים. למשל, לחלק את התלמידים לשתי קבוצות: חרדה מעל הממוצע (1) או לא (0). הפונקציה IF בודקת תנאי, ויש לה שלושה חלקים, מופרדים בפסיקים: מה התנאי, מה לכתוב אם הוא מתקיים, ומה לכתוב אחרת.
אם החרדה של התלמיד, בתא AI2, גבוהה מהממוצע שבתא AI202, כתוב 1. אחרת, 0. החלק השלישי הוא "כל השאר": לא צריך תנאי נפרד ל"קטן או שווה". ושוב הדולרים: את הממוצע מקבעים, כדי שכל השורות יושוו לאותו ממוצע. בלי הדולר, השורה השנייה תושווה לתא AI203, שהוא ריק, וכל התלמידים "יעברו" את התנאי. זו טעות שקורה גם למרצים.
עצה מפרק 3 שחשובה כאן במיוחד: בהתחלה, עדיף כמה עמודות פשוטות מנוסחה אחת ארוכה. אם צריך ממוצע, חשבו אותו בתא משלו, ורק אז כתבו את ה־IF. וזכרו גם את פרק 6: חלוקה לשתי קבוצות היא ירידה בסולם, ומאבדת מידע. עושים אותה רק כשיש לה סיבה טובה.
בדיקת הקובץ אחרי ההקלדה
גם עם אימות נתונים, כדאי לבדוק את הקובץ לפני הניתוח. אני ממליץ על זה תמיד: הדבר הראשון שעושים עם קובץ חדש, לפני כל ממוצע וכל מבחן, הוא להסתכל על השכיחויות של כל המשתנים שהוקלדו, כדי לוודא שאין טעויות הקלדה. ארבע בדיקות מהירות:
- מינימום ומקסימום לכל עמודה:
=MIN(J2:J201)ו־=MAX(J2:J201). מקסימום של 33 בפריט מ־1 עד 4 הוא כנראה 3 שהוקלד פעמיים. - ספירת ערכים לא חוקיים:
=COUNTIF(J2:J201,">4")סופר כמה ערכים גדולים מ־4. וזכרו לבדוק אם הם 99, או טעות. - טבלת שכיחויותFrequency table לכל משתנה איכותי: האם יש קודים שלא צריכים להיות שם? באקסל, טבלת ציר (Pivot Table) עושה את זה בכמה לחיצות. נלמד אותה בפרק 9.
- מספר נבדק כפול: קל להקליד בטעות את אותו מספר לשני תלמידים שונים, ואז VLOOKUP יביא לשניהם את אותם נתונים. בעמודה ריקה כותבים
=COUNTIF($A$2:$A$201,A2)וגוררים: כל ערך שגדול מ־1 הוא כפילות. או, בלי נוסחה: מסמנים את עמודה A, ו־Home > Conditional Formatting > Highlight Cells Rules > Duplicate Values צובע כל מספר שמופיע יותר מפעם אחת. בקובץ שלנו לא תמצאו אף אחד: 200 מספרים, 200 תלמידים.
ב־SPSS אפשר לבדוק כפילויות ב־Data > Identify Duplicate Cases, עם id כמשתנה ההתאמה. או פשוט טבלת שכיחויות של id: כל מספר צריך להופיע פעם אחת.
ב־JASP: מגדירים את id כ־Nominal (זה מה שהוא באמת: למספר נבדק גדול או קטן אין משמעות), ומבקשים לו Frequency tables. כל מספר צריך להופיע פעם אחת, כלומר כל השכיחויות הן 1.
ובאקסל אפשר לחשב ממוצע בלי ה־99, גם בלי למחוק אותם: =AVERAGEIF(I2:I201,"<>99"), כלומר ממוצע של כל מה ששונה מ־99.
רוצים להתאמן בלי לחכות לנתונים אמיתיים? אקסל יודע להמציא מספרים. =RANDBETWEEN(1,5) נותנת מספר שלם אקראי בין 1 ל־5. כותבים אותה בתא אחד, גוררים ימינה עד חמש עמודות ולמטה עד 25 שורות, ויש לכם 25 "נבדקים" שענו על שאלון של חמישה פריטים. כמובן, במחקר לא ממציאים נבדקים. זה רק לתרגול, או כדי לייצר רעש ולראות מה הוא עושה לסטטיסטיקה.
שני דברים כדאי לדעת. הראשון: הפונקציה חיה. כל Enter, בכל מקום בגיליון, מגריל את כל המספרים מחדש. כדי להקפיא אותם, מדביקים אותם על עצמם כערכים, בסמל 123 שראינו למעלה. השני: אפשר לייצר גם ערכים חסרים לתרגול. בעמודה סמוכה, =IF(H2=1,"",H2) משאירה ריק בכל מקום שבו הוגרל 1. אחר כך מדביקים כערכים במקום העמודה המקורית. ועוד הערה, שנחזור אליה בפרק 16: בקובץ כזה אין שום קשר בין הפריטים, כי כל מספר הוגרל לבד. "שאלון" כזה לא מודד שום דבר, וזה בדיוק מה שהמהימנותReliability שלו תראה.
בקובץ של מחקר אחר יש משקל בקילוגרמים בעמודה D, וגובה בסנטימטרים בעמודה E. כתבו בתא F2 נוסחה שמחשבת את מדד מסת הגוף, BMI: משקל בק"ג, חלקי הגובה במטרים בריבוע. מה ה־BMI של מי ששוקל 64 ק"ג וגובהו 160 ס"מ?
בדיקת התשובה
שתי מלכודות: הראשונה, הגובה בסנטימטרים, והנוסחה של BMI דורשת מטרים. מי שלא מחלק ב־100 מקבל 0.0025. השנייה, הסוגריים: בלי סוגריים סביב E2/100, אקסל יחשב קודם את 100 בריבוע (פרק 2). ומה עושים כשלא יודעים איך להמיר יחידות, למשל אינצ׳ים לסנטימטרים? מחפשים ברשת.
בדקו את עצמכם5 שאלות
1.סימנתם את עמודות פריטי הקשיבות, והגדרתם אימות נתונים: Whole number, between, מינימום 1 ומקסימום 5. תלמיד לא ענה על פריט, ואתם מקלידים 99. מה יקרה?
=OR(AND(R2>=1,R2<=5),R2=99). ואם החלטתם להשאיר תאים ריקים, הכלל הפשוט מספיק.2.בקובץ המעקב העמודות הן id, sat_fu, mind_fu, anx_fu, attn_fu, soma_fu, teach_fu, clim_fu. איזה מספר עמודה תכתבו ב־VLOOKUP כדי להביא את soma_fu?
soma_fu היא השישית. מי שכותב 5 שכח לספור את id. ו־F היא שם העמודה בגיליון, לא המיקום שלה בטבלה. VLOOKUP צריכה מספר.3.מספר האחים, siblings, נמצא בעמודה I. כתבתם =IF(I2>3,1,0) וגררתם למטה. בקובץ יש 41 תלמידים עם יותר משלושה אחים, ולחמישה תלמידים רשום 99. כמה תלמידים יקבלו 1?
IF כותבת 1 גם לחמשת התלמידים שמספר האחים שלהם לא ידוע. גם תא ריק לא פותר את הבעיה כאן: אקסל משווה תא ריק כאילו היה 0, ויכתוב 0, כאילו יש לתלמיד מעט אחים. דרך בטוחה: =IF(I2=99,"",IF(I2>3,1,0)), כך שמי שחסר נשאר חסר.4.כתבו נוסחה שמחשבת את הממוצע של a3, בעמודה L, בלי ה־99 ובלי למחוק אותם. איזה מספר צריך לצאת?
=AVERAGEIF(L2:L201,"<>99"), כלומר ממוצע של כל מה ששונה מ־99. צריך לצאת 1.89, כמו שחישבנו ביד בסעיף הקודם. ואם יצא 2.86? הנוסחה לא סיננה דבר: בדקו את המירכאות ואת הסימן <>.5.כתבתם =IFERROR(VLOOKUP(A2,Followup!$A$2:$H$201,4,FALSE),""), גררתם, והדבקתם את העמודה על עצמה כערכים. תלמיד אחד חסר בקובץ המעקב, והתא שלו נראה ריק. מה יחזירו =ISBLANK(BD5) ו־=BD5="" בשורה שלו?
"" משאיר בתא טקסט באורך אפס, לא תא ריק באמת. לכן ISBLANK מחזירה FALSE, אבל ההשוואה ל־"" מחזירה TRUE. זו הבדיקה שכדאי להשתמש בה, כי היא נכונה לשני סוגי הריק. AVERAGE מתעלמת מהתא הזה בכל מקרה, וב־CSV הוא נשמר כשדה ריק.מאקסל לתוכנה סטטיסטית
שומרים את הגיליון כקובץ CSV (בעברית: CSV UTF-8), או פותחים את קובץ האקסל ישירות. אחרי כל ייבוא בודקים: כמה שורות, כמה משתנים, והאם הסוג של כל משתנה נכון. ואז מגדירים תוויות, ערכים חסרים וסולמות.
שתי התוכנות הסטטיסטיות קוראות קבצי אקסל, אבל הפורמט הבטוח ביותר להעברה הוא CSV: קובץ טקסט פשוט, שבו כל שורה היא נבדק, והערכים מופרדים בפסיקים. כל תוכנה קוראת אותו. באקסל: File > Save As, ובסוג הקובץ בוחרים CSV UTF-8. ה־UTF-8 שומר על עברית, אם יש בקובץ. ושימו לב: CSV שומר רק את הגיליון הפעיל, בלי נוסחאות ובלי עיצוב. לכן שומרים גם את קובץ האקסל המקורי.
ועוד עצה מניסיון: אל תכינו את הנתונים בתוך התוכנה הסטטיסטית. גם כשהנתונים מגיעים מתוכנה אחרת, ממערכת לשאלונים מקוונים או ממבחן ממוחשב, כדאי לעבור דרך אקסל, לבדוק, ורק אז לייבא. ב־JASP במיוחד: היא נהדרת לניתוח, ופחות נוחה לעריכת נתונים.
באקסל אין שלב של "הגדרת משתנים". מה שיש:
- גיליון data, עם הנתונים בלבד, וגיליון codebook עם מילון המשתנים.
- ערכים חסרים: הכי פשוט להשאיר תאים ריקים, ש־AVERAGE ושאר הפונקציות מתעלמות מהם. אם יש קוד 99, משתמשים ב־
AVERAGEIF, או מחליפים אותו בתא ריק בעמודה המתאימה בלבד: מסמנים את העמודה, Ctrl+H, ובאפשרויות מסמנים Match entire cell contents, כדי ש־199 לא יהפוך ל־1. - הקפאת שורה ראשונה: View > Freeze Panes > Freeze Top Row, כדי ששמות המשתנים יישארו מול העיניים כשגוללים.
- הקפאת שורה ועמודה יחד: בקובץ רחב כמו שלנו, כשגוללים ימינה אל פריטי הקשיבות, עמודת
idנעלמת, ולא ברור של מי השורה. עומדים בתא B2, מתחת לשורה ומימין לעמודה שרוצים להקפיא, ובוחרים View > Freeze Panes > Freeze Panes (בעברית: תצוגה > הקפאת חלוניות). עכשיו גם שמות המשתנים וגם מספרי הנבדקים נשארים במקום. נוח במיוחד כשמקלידים שאלונים ארוכים.
ייבוא: File > Import Data > CSV Data (או Excel). בקובץ אקסל בוחרים את הגיליון של הנתונים, ומסמנים שהשורה הראשונה מכילה את שמות המשתנים (בייבוא אקסל: Read variable names from the first row of data; בייבוא CSV: First line contains variable names). אחרת, השורה "id, school, group…" תיחשב כתלמיד.
בדיקה: ב־Data View צריכות להיות 200 שורות ו־55 עמודות.
הגדרה: במסך Variable View, כל שורה היא משתנה, וכל עמודה היא תכונה שלו. חמש העמודות החשובות:
- Name
- שם קצר באנגלית:
parent_edu. - Label
- תיאור שיופיע בפלט: Parent education. כדאי באנגלית: עברית מוצגת בפלט בצורה לא אמינה.
- Values
- משמעות כל קוד: 1 = Up to 12 years, 2 = Post-secondary, 3 = Bachelor, 4 = Master or higher, 99 = Unknown.
- Missing
- Discrete missing values: 99. שימו לב: התווית של 99 ב־Values עוד לא אומרת ל־SPSS שזה חסר. רק העמודה הזו.
- Measure
- Ordinal (פרק 6).
טיפ: אחרי שהגדרתם משתנה אחד, אפשר להעתיק את התאים שלו (Copy) ולהדביק אותם בשורות של משתנים עם אותם קודים, למשל כל פריטי החרדה. ואת כל ההגדרות אפשר לשמור כסינטקס, ולהריץ שוב על קובץ חדש.
פתיחה: התפריט הראשי (שלושת הפסים) > Open > Computer > Browse, ובוחרים את קובץ ה־CSV. JASP פותח גם קבצי אקסל, אבל קורא רק את הגיליון הראשון. ולכן CSV הוא הבחירה הבטוחה.
בדיקה: 200 שורות, 55 עמודות. ובדקו את הסמל בראש כל עמודה (פרק 6): JASP מנחש את הסוג לפי התוכן. אם group או gender זוהו כ־Scale, לחיצה על הסמל משנה אותם ל־Nominal.
ערכים חסרים: JASP מתייחס לתאים ריקים כחסרים. קוד כמו 99 אפשר להוסיף לרשימת הערכים החסרים בהעדפות (Preferences > Data). בגרסאות קודמות הרשימה הזו חלה על כל העמודות, וזו בעיה בקובץ שלנו: בעמודת id יש תלמיד שמספרו 99. בגרסאות חדשות אפשר להגדיר ערכים חסרים לכל משתנה בנפרד. הדרך הבטוחה בכל גרסה: להחליף את ה־99 בתאים ריקים באקסל, בעמודות הנכונות בלבד, לפני שפותחים ב־JASP.
תוויות: לחיצה על שם המשתנה בראש העמודה פותחת חלון שבו אפשר לתת תווית לכל ערך, למשל 1 = Boy, 2 = Girl. התוויות יופיעו בפלט במקום המספרים.
הקובץ שלנו בנוי במבנה רחב: כל תלמיד בשורה אחת, וכל מדידה בעמודה משלה. זה המבנה שדורשים מבחן t למדגמים מזווגיםPaired-samples t test (פרק 21) וניתוח שונות במדידות חוזרותRepeated measures ANOVA (פרק 35), ב־SPSS וב־JASP. יש ניתוחים, כמו מודלים מעורביםLinear mixed model (פרק 36), שדורשים מבנה ארוךLong format: שורה לכל מדידה. כלומר, שלוש שורות לכל תלמיד, עם עמודה של "זמן" ועמודה אחת של חרדה. ובמערך תוך־נבדקיWithin-subjects design עם איזון סדרCounterbalancing, כמו במחקר המלטונין (פרק 7), מסדרים את העמודות לפי התנאי (פלצבו, מלטונין), לא לפי הלילה, ומוסיפים עמודה של הסדר.
בדקו את עצמכם4 שאלות
1.ייבאתם את קובץ ה־CSV לתוכנה סטטיסטית. בטבלת הנתונים יש 201 שורות, ובשורה הראשונה כתוב id, school, group… מה קרה?
2.באקסל כתבתם במילון המשתנים ש־99 ב־siblings פירושו Unknown, והשארתם את ה־99 בעמודה I. מה יחזיר =AVERAGE(I2:I201)?
AVERAGEIF.2.ב־Variable View כתבתם ב־Values של siblings: 99 = Unknown. לא נגעתם בעמודה Missing. מה יקרה בחישוב הממוצע?
2.ב־JASP נתתם לערך 99 של siblings את התווית Unknown, בלחיצה על שם המשתנה. לא הוספתם את 99 לערכים החסרים. מה יקרה בחישוב הממוצע?
3.בניתם באקסל עמודה anx_high בעזרת IF, ושמרתם את הגיליון כ־CSV UTF-8. מה יהיה בעמודה הזו כשתפתחו את קובץ ה־CSV?
4.באקסל, מה תכתבו במילון המשתנים (גיליון codebook) על gender?
gender. תיאור: מגדר התלמיד. ערכים: 1 = בן, 2 = בת. סולם: שמי (פרק 6). ערך חסר: אין, ולכן אין קוד. כך כל מי שפותח את הקובץ יודע מה פירוש המספרים, גם בלי לשאול.4.ב־Variable View של SPSS, מה תכתבו למשתנה gender בעמודות Values, Missing ו־Measure?
4.ב־JASP, מה תגדירו למשתנה gender: סוג, תוויות וערכים חסרים?
טעויות נפוצות
- קוד חסר שלא הוגדר. 99 נספר כמספר. בכל פלט: N, מינימום, מקסימום.
- קוד חסר שהוגדר לכל העמודות. בעמודה שבה 99 הוא ערך אמיתי, הוא נעלם.
- העתק־הדבק בין קבצים בסדר שונה. הנתונים מגיעים לנבדק הלא נכון, בלי שום הודעת שגיאה. משתמשים ב־VLOOKUP.
- מיון של עמודה אחת. ממיינים תמיד את כל הטבלה יחד, אחרת שורות מתפרקות.
- VLOOKUP בלי דולרים, או עם TRUE. הראשון מזיז את הטבלה, והשני מביא ערך של נבדק אחר.
- מילים במקום קודים. "בת" ו"בת " עם רווח הן שתי קטגוריות.
- מוחקים עמודת מקור לפני הדבקת ערכים. כל הנוסחאות שהשתמשו בה הופכות ל־
#REF!. - סומכים על אימות נתונים לבד. הוא לא בודק ערכים שהודבקו או שהיו שם קודם. Circle Invalid Data, ושכיחויות לפני הכול.
בדקו את עצמכם
סיכום
- שורה לנבדק, עמודה למשתנה. שמות קצרים באנגלית, מספר נבדק ייחודי, וערך אחד בכל תא.
- קודים מספריים, ומילון משתנים שאומר מה כל קוד.
- ערכים חסרים: תא ריק, או קוד שלא יכול להיות תשובה, שמוגדר בתוכנה לכל משתנה בנפרד.
- באקסל: אימות נתונים מונע טעויות, VLOOKUP מחבר קבצים לפי מספר נבדק, IF יוצר משתנה לפי תנאי.
- אחרי כל ייבוא: שורות, עמודות, סוג המשתנים. ובכל פלט: N, מינימום ומקסימום.
מונחים חדשים
תרגול עם הנתונים
בתרגול הזה תשתמשו בשני קבצים: קובץ המחקר, וקובץ המעקב, שבו ציוני המעקב של כל התלמידים, בסדר אחר.
הקבצים עצמם נמצאים גם בתיקיית data בחבילת הספר: care_school.csv, care_school_followup.csv ומילון המשתנים.
- באילו משתנים בקובץ המחקר מופיע הערך 99, וכמה פעמים? באיזה מהם הוא לא קוד חסר?
בדיקת התשובה
השכלת ההורה (6), מספר אחים (5), פריט החרדה
a3(2), ופריט הקשיבותm7(2). ובעמודתidהוא מופיע פעם אחת, כמספר הנבדק של תלמיד אמיתי. באקסל:=COUNTIF(H2:H201,99)לכל עמודה. - חשבו את הממוצע ואת המקסימום של
siblingsעם ה־99 ובלעדיהם. בתוכנה סטטיסטית: הגדירו את 99 כחסר, ובדקו שה־N ירד.בדיקת התשובה
עם: N = 200, M = 4.75, מקסימום 99. בלי: N = 195, M = 2.33, מקסימום 7. באקסל, בלי למחוק:
=AVERAGEIF(I2:I201,"<>99"). - העתיקו את קובץ המחקר, ומחקו בעותק את שבע עמודות המעקב (
sat_fuעדclim_fu). עכשיו החזירו אתanx_fuמקובץ המעקב בעזרת VLOOKUP. איך תבדקו שהצלחתם?בדיקת התשובה
שמים את קובץ המעקב בגיליון בשם Followup, וכותבים ליד התלמיד הראשון
=VLOOKUP(A2,Followup!$A$2:$H$201,4,FALSE), וגוררים. הבדיקה: משווים לעמודהanx_fuבקובץ המחקר המקורי (שם היא בעמודה AW). כשהקבצים מסודרים באותו סדר של מספרי נבדק, הפרש בין שתי העמודות צריך להיות 0 בכל השורות. ואם קיבלתם ערכים שונים? כנראה שכחתם את הדולרים, או כתבתם TRUE. - צרו עמודה חדשה,
anx_high: 1 לתלמיד שהחרדה שלו לפני התוכנית גבוהה מהממוצע, ו־0 אחרת. כמה תלמידים קיבלו 1?בדיקת התשובה
הממוצע של
anx_preהוא 2.236. עם=IF(AI2>$AI$202,1,0)(כשהממוצע בתא AI202), 101 תלמידים מקבלים 1. הממוצע של העמודה החדשה, 0.505, הוא אחוז התלמידים שמעל הממוצע. קיבלתם כמעט רק אחדים? בדקו את הדולר.
כאן מסתיים חלק א. בחלק ב מתחילים לתאר נתונים: בפרק הבא, טבלאות שכיחויותFrequency table וגרפים, וטבלת הציר של אקסל.