שְׁאֵלָה:
כיצד לבצע בדיקה באמצעות R כדי לראות אם הנתונים עוקבים אחר ההתפלגות הנורמלית
Skarab
2010-09-28 13:29:33 UTC
view on stackexchange narkive permalink

יש לי מערך נתונים עם המבנה הבא:

  מילה | מספר המופע של מילה במסמך | מזהה מסמך 

כיצד אוכל לבצע בדיקה להפצה רגילה ב- R? כנראה שאלה קלים אבל אני מתחיל R.

@Skarab אולי אני לגמרי לא בסדר, אבל האם לא היית מצפה שהתדירות של מילה כלשהי תהיה ביחס הפוך לדרגה בטבלת התדרים של מילים, על פי חוק זיף (http://j.mp/9er2lv)? במקרה זה, בדוק את החבילה `zipfR`.
אני מסכים עם @chl - זה יהיה נס קטן אם הנתונים שלך היו מופצים בדרך כלל. אולי שאלה אחרת לגבי מה אתה רוצה לעשות עם הנתונים תהיה כדאית. אל תמציא את הגלגל מחדש!
כיצד ניתן היה להפיץ את הנתונים שלך על פי מודל שנותן הסתברות לא אפס להתרחשות שלילית?
מה הסיבה לעשות בדיקה זו?
אני רוצה להעריך אם התוצאה העצומה של הפקת מידע נכונה. אני רוצה לבדוק אם התפלגות הישויות שנמצאת בטקסט עוקבת אחר הציפיות שלי (אני מכיר את התחום ואת קורפוס הטקסט).
@chi הייתי צריך לבדוק נתונים הקשורים למיצוי מידע לצורך זה הייתי זקוק לבדיקה. כמובן, המילה תדר עוקבת אחרי Zipf.
שֵׁשׁ תשובות:
#1
+50
csgillespie
2010-09-28 14:13:07 UTC
view on stackexchange narkive permalink

אם אני מבין נכון את שאלתך, אז כדי לבדוק אם הופעות מילים בסט מסמכים עוקבות אחר התפלגות נורמלית, אתה יכול פשוט להשתמש במבחן shapiro-Wilk ובכמה עלילות qq. לדוגמא,

  ## צור שתי קבוצות נתונים ## ראשונה רגילה, שנייה מ- t-distributionwords1 = rnorm (100); words2 = rt (100, df = 3) ## הסתכל על צפיפות המגרש (צפיפות (מילים 1)); עלילה (צפיפות (מילים 2)) ## בצע את testshapiro.test (מילים 1); shapiro.test (words2) ## עלילה באמצעות qqplotqqnorm (words1); qqline (words1, col = 2) qqnorm (words2); qqline (words2, col = 2)  

qqplot פקודות נותנות: alt text

אתה יכול לראות שמערך הנתונים השני הוא ללא ספק לא נורמלי על ידי הזנבות הכבדים ( מידע נוסף).

במבחן הנורמליות של שפירו-ווק, ערך p גדול עבור מערך הנתונים הראשון (> .9) אך קטן מאוד עבור מערך הנתונים השני (<.01). זה יוביל אותך לדחות את השערת האפס לשנייה.

מדוע ברור שזה לא נורמלי?
אני חושב שהנקודות המתוארות צריכות להיות מונחות על חציית הרבע I-III קרוב ככל שהן משרטטות התפלגות נורמלית.
באופן כללי יותר (ממוצע! = 0), ל- 'qqline' יש שיפוע אחד ו- * mu * יירוט.
@HermanToothrot זה לא נורמלי כשמסתכלים על העלילה השנייה שכן יש סטייה גדולה מאוד בערכי הזנב.עלילת ה- QQ היא גרף של הכמות התיאורטית (אם היא הייתה נורמלית) בפסוקי המדגם (מתוך הנתונים).אם נתוני המדגם תקינים אנו מצפים שהתצפיות יהיו קרובות לקו, כפי שהן לגבי העלילה הראשונה.שימו לב גם לסולם ההבדל מאוד בציר y עבור חלקות אלה.
#2
+16
nico
2010-09-28 14:10:34 UTC
view on stackexchange narkive permalink

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

  היסט (מילים $ ספירות, 100, col = "שחור")  

כאשר 100 הוא מספר הפחים

ניתן גם לבצע עלילת QQ רגילה באמצעות

qqnorm(words$counts)

לבסוף, תוכל גם להשתמש במבחן Shapiro-Wilk לנורמליות

  shapiro.test (מילה $ סופרת)  

אמנם, התבונן בדיון זה: בדיקת נורמליות: 'חסר תועלת במהותה?'

#3
+14
Glen_b
2010-09-29 03:12:46 UTC
view on stackexchange narkive permalink

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

אך ספירות אינן נורמליות בכל מקרה, הן מספרים שלמים חיוביים - מה הסבירות שתצפית מהתפלגות נורמלית תיקח ערך שאינו מספר שלם? (... זה אירוע של הסתברות 1).

מדוע תבדוק לנורמליות במקרה זה? ברור שזה לא נכון.

[במקרים מסוימים זה לא בהכרח חשוב שתוכל לדעת שהנתונים שלך לא ממש תקינים. נתונים אמיתיים לעולם לא (או כמעט אף פעם) לא יישאבו מהתפלגות נורמלית.]

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

#4
+9
Joren Bredman
2012-09-14 08:43:38 UTC
view on stackexchange narkive permalink

דרך רשמית יותר להסתכל על הנורמליות היא על ידי בדיקה האם הקורטוזיס והטיפויות שונים באופן משמעותי מאפס.

לשם כך, עלינו להשיג:

  kurtosis.test <- function (x) {m4 <- sum ((x-mean (x)) ^ 4) / אורך (x) s4 <- var (x) ^ 2kurt <- (m4 / s4) - 3sek <- sqrt (24 / length (x)) totest <- kurt / sekpvalue <- pt (totest, (אורך (x) -1)) pvalue}  

לקורטוזיס, ו-:

  skew.test <- function (x) {m3 <- sum ( (x- ממוצע (x)) ^ 3) / אורך (x) s3 <- sqrt (var (x)) ^ 3skew <- m3 / s3ses <- sqrt (6 / length (x)) totest <- skew / sespt (totest, (אורך (x) -1)) pval <- pt (totest, (אורך (x) -1)) pval}  

לטיה.

שתי המבחנים הללו הם חד-זנוניים, כך שתצטרך להכפיל את ערך p ב -2 כדי להפוך לשני זנבות. אם ערך ה- p שלך גדל מאחד תצטרך להשתמש ב- 1-kurtosis.test () במקום ב- kurtosis.test.

אם יש לך שאלות אחרות, אתה יכול לשלוח לי דוא"ל לכתובת [email protected]

מה ההבדלים, בין שתי הפונקציות לעיל, בנוגע לפונקציות 'קורטוזיס ()' ו'הטיה () 'מחבילת * רגעים *?התוצאות באמצעות דגימות 'rnorm ()' שונות.
#5
+5
Laurent
2010-09-28 19:30:30 UTC
view on stackexchange narkive permalink

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

#6
+5
Dr Nisha Arora
2016-06-09 15:34:57 UTC
view on stackexchange narkive permalink

על ידי שימוש בחבילת nortest של R, ניתן לבצע בדיקות אלה:

  • בצע מבחן נורמליות של אנדרסון-דרלינג

     ad.test(data1)
  • בצע Cramér-von Mises מבחן לנורמליות

      cvm.test (data1 )  
  • בצע בדיקת פירסון צ'י בריבוע לנורמליות

      pearson.test (data1)  
  • בצע מבחן שפירא-פרנסיה לנורמליות

      sf.test (data1)  

ניתן לבצע בדיקות רבות אחרות באמצעות חבילת normtest . ראה תיאור ב https://cran.r-project.org/web/packages/normtest/normtest.pdf

@Nick;הזכרתי את הבדיקה הזו מתוך חבילת ** 'nortest' ** שנמצאה כאן: (https://cran.r-project.org/web/packages/nortest/nortest.pdf).חבילה שימושית אחרת היא ** 'normtest' ** כאמור לעיל.
אוקיי תודה.בבורותי הנחתי ששם אחד הוא שגיאת הקלדה.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 2.0 עליו הוא מופץ.
Loading...