مقدمه ای بر داده های گمشده در R


1402/06/14

دسترسی سریع


داده های گمشده در R

داده های گمشده در یکی از مشکلات جدی در تحقیقاتی هستند که امکان کنترل انحصاری بر تمام جنبه های تحقیق وجود ندارد. در عمل، اکثر محققان رشته های علوم انسانی و پزشکی باید خود را برای دست و پنجه نرم کردن با داده های گمشده آماده کنند چرا که این معضل در این رشته ها بسیار رایج است. در گذشته، این داده ها به سادگی نادیده گرفته می شدند. برای مثال، اگر یکی از آزمودنی ها به چند سوال پرسشنامه پاسخ نمی داد، آن ازمودنی را حذف می کردند. یا بدتر از آن، نرم افزار های آماری به طور خودکار آزمودنی هایی را که داده های گمشده داشتند، متناسب با متغیر های بکارگرفته شده در مدل، حذف می کردند (و هنوز هم این کار را می کنند و خواهند کرد چون سعی می کنند تا آنجا که ممکن است کمتر برای کاربران مزاحمت ایجاد کنند، به هر قیمتی که شده!).

مثال دیگری در علوم پزشکی می زنم. فرض کنید که در حال تست دارویی بر روی فشار خون هستید و از آزمودنی ها می خواهید که طی ۲ ماه هر هفته به آزمایشگاه بیایند و آزمایش خون بدهند. در حالت ایده آل همه آزمودنی ها سر زمان مقرر شده در آزمایشگاه حضور پیدا کرده و با آزمایشگر همکاری می کنند. اما در دنیای واقعی بسیاری از آنها یک هفته در میان می آیند یا شاید در طول آزمایش به جای ۸ بار آزمایش خون تنها ۲ بار آزمایش بدهند یا همان ۲ بار را هم نیایند. با آزمودنی هایی که در تمام دفعات آزمایش حضور نیافتند چکار می کنید؟ آیا آنها را حزف می کنید؟

حذف کردن آزمودنی ها می تواند هزینه سنگینی بر آزمایش داشته باشد، به خصوص اگر عواملی در عدم حضور آزمودنی ها وجود داشته باشد که از دید شما پنهان باشد. مثال خنده دادی می زنم. فرض کنید که داروی جدیدی که شما روی آزمودنی ها امتحان کردید باعث شده که آزمودنی های مسن روانه بیمارستان شوند و نتوانند برای آزمایش خون حضور پیدا کنند! از طرف دیگر، این دارو اثر منفی روی آزمودنی های جوانتر نداشته است. آیا با حذف آزمودنی های مسن از آزمایش همان نتیجه ای حاصل می شود که با حذف نکردن آنها حاصل می شود؟

در این سلسه مقالات در مورد معضل داده های گمشده و راهبرد های مختلف برای کنترل آنها در نرم افزار آر صحبت خواهم کرد. این پست مقدمه ای بر این مشکل خواهد بود.

rcjKXp5cR

فرض کنید یک مجموعه شامل اعداد یک تا پنج را در آر تعریف کرده و نام آن را A می گذاریم. سپس میانگین آنها را می گیریم.

A <- c(1,2,3,4,5)
mean(A)
## [1] 3

اکنون اگر این یکی از ارقام این مجموعه را به داده گمشده تبدیل کنیم، به عنوان مثال رقم ۵ را به گمشده تبدیل کنیم، آر در محاسبه میانگین این مجموعه ارقام دچار سردرگمی می شود چرا که نمی توانید داده ای را که محتوایش مشخص نیست را دا بقیه ارقام جمع کرد و بر تعدادشان تقسیم کرد.

A <- c(1,2,3,4,NA)
mean(A)
## [1] NA

خوبی آر این است که به صورت خودکار این داده را حذف نمی کند هرچند سایر نرم افزارهای آماری از جمله اس پی اس اس و استاتا در محاسبه میانگین و دیگر عملیات ریاضی داده های گمشده را بدون گزارش دادن به شما نادیده می گیرند. حال می توانیم به آر بگوییم که داده ی گمشده را نادیده بگیرد و میانگین ارقام موجود را گزارش دهد. برای این کار از آپشن na.rm استفاده می کنیم.

A <- c(1,2,3,4,NA)
mean(A, na.rm = TRUE)
## [1] 2.5

هرچه تحلیل داده های شما پیچیده تر باشد، داده های گمشده می توانند بیشتر مشکل آفرین باشند. در ادامه از یک مجموعه داده تخیلی استفاده می کنم که در وبسایت استاتا استفاده شده است. این مجموعه داده مشاهده های ساختگی در مورد حملات قلبی ارئه می کند. این مجموعه داده را می توانید از وبسایت استاتا-بلاگ دانلود کنید. برای این کار کدهای زیر را در آر تایپ کنید.

url <- "http://www.stata-blog.com/resources/data/mheart0.csv"
data <- read.csv(url, header = T)

این مجموعه داده شامل متغیر هایی از قبیل حمله قلبی (متغیر وابسته) و متغیر های مستقلی از قبیل سیگار کشیدن، مصرف الکل، سن، جنسیت، میزان تحصیلات و وضعیت تعهل است. البته تعدادی از مشاهده های این مجموعه داده گمشده هستند. من یک تحلیل رگرسیون لوجستیک انجام می دهم و متغیر هایی را که حمله قلبی را پیشبینی می کنند را در مدل قرار می دهم. فرض کنید که فرضیات من بر این است که مصرف الکل و سیگار باعث افزایش احتمال حمله قلبی می شود و جنسیت مذکر و سن هم این احتمال را افزایش می دهند و نهایتا هم میزان تحصیلات بالا احتمال حمله قلبی را کم می کند. برای این تحلیل رگرسیون از جعبه نرم افزاری aod استفاده می کنم. نخست این نرم افزار را در آر نصب و بارگزاری می کنم. برای نصب aod کد ("install.packages("aod را در آر تایپ کنید. سپس با دستور library آن را بارگزاری کنید.

library(aod)

اکنون مدل را در آر تعریف می کنم.

glm(attack ~ smokes + age + bmi + hsgrad + female, data = data, family="binomial")

 ##
 ## Call:  glm(formula = attack ~ smokes + age + bmi + hsgrad + female,
 ##     family = "binomial", data = data)
 ##
 ## Coefficients:
 ## (Intercept)       smokes          age          bmi       hsgrad
 ##     -5.4084       1.5441       0.0261       0.1130       0.4048
 ##      female
 ##      0.2255
 ##
 ## Degrees of Freedom: 131 Total (i.e. Null);  126 Residual
 ##   (22 observations deleted due to missingness)
 ## Null Deviance:       183
 ## Residual Deviance: 159   AIC: 171

دقت کنید که دامنه آزادی تحلیل رگرسیون به ۱۳۱ کاهش یافته است و آر به شما اخطار می دهد که ۲۲ مشاهده به دلیل داشتن داده های گمشده از تحلیل حذف شدند.

داده های گمشده در R

نظرات

هیچ نظری وجود ندارد.


افزودن نظر

Sitemap
Copyright © 2017 - 2023 Khavarzadeh®. All rights reserved