Identifying and handling missing values

NA R का honest "unknown" है: यह जो भी calculation छूता है उसे infect करता है (mean NA return करता है), is.na() से मिलता है, और na.rm = TRUE या na.omit() से handle होता है, इसे कभी zero मानकर नहीं।

9 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

वह mean जिसने जवाब देने से इनकार किया

पिछले lesson की cleaning के बाद, roll 121 का impossible screen time NA बन गया। अब आप average माँगते हैं:

mean(survey$screen)

[1] NA

R जवाब देने से मना करता है। कोई error नहीं, कोई guess नहीं: एक सपाट "unknown"।

चिढ़ाने वाला? यह इस course का सबसे honest behaviour है: एक value unknown है, तो exact mean unknowable है, और R यही कहता है। आज: छेद कैसे ढूँढें, और उनके आसपास काम करने के तीन legitimate तरीक़े।

Theory

Attendance register में blank

एक register row दिखाता है: present, present, blank, present। blank का मतलब क्या है? "absent" नहीं: absent का अपना mark होता है। blank का मतलब है किसी ने इसे record ही नहीं किया: unknown।

NA वही blank है। यह 0 नहीं है (एक असली measured zero), "" नहीं है (एक empty text), NULL नहीं है (कोई box ही नहीं): यह एक box है जिसके contents किसी को नहीं पता। और एक blank पर OVER compute किया कोई भी total ख़ुद... blank है। R इस logic को गंभीरता से लेता है।

Theory

NA propagate करता है, और == इसे नहीं देख सकता

दो rules NA को govern करते हैं:

Propagation: NA छूती कोई भी arithmetic NA देती है: mean, sum, sd, यहाँ तक कि 5 + NA। Missingness results को infect करती है, ज़ोर से, design से।

Comparison blindness: x == NA NA return करता है, कभी TRUE नहीं: "क्या यह unknown उस unknown के बराबर है?" पूछने का कोई जवाब नहीं है। आपने यह बिल्कुल यही logic BCA303 में देखी: SQL का = NULL वैसे ही fail हुआ था, उसी कारण से।

Eकमात्र honest detector एक dedicated function है: is.na()।

Practical

पहले detect कीजिए, फिर एक strategy चुनिए

screen <- c(120, 90, NA, 240, 150, NA)

# DETECT
is.na(screen)          # FALSE FALSE TRUE FALSE FALSE TRUE
sum(is.na(screen))     # [1] 2      how many holes
mean(is.na(screen))    # [1] 0.333  what fraction is missing

# the wrong way (comparison blindness):
screen == NA           # NA NA NA NA NA NA   never TRUE!

# STRATEGY 1: compute around the holes
mean(screen, na.rm = TRUE)   # [1] 150   NAs removed for this calc

# STRATEGY 2: keep only complete rows (whole data frame)
survey_complete <- na.omit(survey)

# per-column hole count for a data frame:
colSums(is.na(survey))

# STRATEGY 3 (advanced, use with care): impute
# screen[is.na(screen)] <- median(screen, na.rm = TRUE)

Quiz

एक student survey$screen[is.na(survey$screen)] <- 0 से NA problem "fix" करता है और गर्व से नया mean report करता है। क्या ग़लत है?

  1. Zero एक CLAIM है (student बिल्कुल screen इस्तेमाल नहीं करता), absence नहीं: fake zeros mean को नीचे खींचते हैं और हर statistic को bias करते हैं
  2. कुछ नहीं: 0 और NA का मतलब एक ही है
  3. Syntax invalid है: NAs पर assign नहीं किया जा सकता
  4. यह सिर्फ़ तब fail होता है जब आधे से ज़्यादा values NA हों
Show the answer

Zero एक CLAIM है (student बिल्कुल screen इस्तेमाल नहीं करता), absence नहीं: fake zeros mean को नीचे खींचते हैं और हर statistic को bias करते हैं

NA कहता है "हमें नहीं पता"; 0 कहता है "हमें पता है, और यह zero है": एक को दूसरे से replace करना data manufacture करता है, और हर fake 0 mean को zero की तरफ़ खींचता है (हमारे छह values में दो fake zeros 150 की जगह 100 report करेंगे)। Mechanically-correct fixes हैं na.rm = TRUE या na.omit(); median से imputation defensible advanced option है: report में एक note के साथ। सवाल में syntax valid R है: crime statistical है, syntactic नहीं।

Think first

चार outputs अंदाज़ा लगाइए

x <- c(10, NA, 30) के साथ, tap करने से पहले हर एक अंदाज़ा लगाइए:

1. sum(x)

2. sum(x, na.rm = TRUE)

3. x == NA

4. sum(is.na(x))

Show the answer

1. NA: propagation: एक unknown पूरे total को unknown बना देता है।

2. 40: इस calculation के लिए hole एक तरफ़ रख दिया गया।

3. NA NA NA: NA के साथ comparisons कभी resolve नहीं होते: blindness rule।

4. 1: is.na() honest detector है, और इसके TRUEs जोड़ना holes गिनता है।

चार lines, चारों NA rules: exams topic को बिल्कुल इसी चौकड़ी से test करते हैं, और यही तरीक़ा है जिससे आपको किसी statistic पर भरोसा करने से पहले किसी भी dataset को self-check करना चाहिए।

Watch out

Strategy ईमानदारी से चुनना

na.rm = TRUE: quick statistics जब holes कम और random हों।

na.omit(): complete rows चाहती analyses: पर check कीजिए आप कितनी rows खोते हैं (nrow पहले बनाम बाद में): चुपचाप आधी survey drop करना अपना ही crime है।

Imputation: NA को mean/median से replace करना row रखता है पर value manufacture करता है: practice में acceptable, हमेशा disclosed।

कभी नहीं: NA → 0। और किसी भी statistic के साथ हमेशा hole count report कीजिए।

Theory

वह concept जिससे आप अब तीन बार मिले हैं

SQLite ने इसे NULL कहा (IS NULL, वह = NULL trap), pandas ने इसे NaN दिखाया, R इसे NA spell करता है: तीन languages, एक idea: unknown एक value नहीं है, और equality इसे नहीं देख सकती। यह cross-language recognition किसी भी अकेली syntax से ज़्यादा मायने रखता है: interviewers बिल्कुल यही probe करते हैं। अगला lesson: types convert और recode करना: वह factor trap भी जो categories को ग़लत numbers में बदल देता है।

Summary

Key takeaways

  • NA = unknown: 0 (एक असली zero), "" (empty text) और NULL (कोई object नहीं) से अलग।
  • NA propagate करता है: किसी भी NA पर mean/sum/sd NA return करते हैं: design से ज़ोर से।
  • x == NA कभी काम नहीं करता (NA return करता है): is.na() से detect कीजिए; sum(is.na(x)) से गिनिए।
  • na.rm = TRUE से holes के आसपास compute कीजिए; na.omit() से incomplete rows drop कीजिए (row loss check कीजिए)।
  • Imputation (median/mean) data manufacture करता है: sparingly इस्तेमाल कीजिए, हमेशा disclose कीजिए; NA → 0 कभी नहीं।
  • SQL NULL और pandas NaN जैसा ही concept।
  • Memory hook: register में blank एक zero नहीं है।

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Data Filtering and cleaning

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Identifying and handling missing values · Statistical Methods and Data Analysis (MDC-03) · Gri-Learn