هنگامی که در حال انجام یک تجزیه و تحلیل اکتشافی از داده های سری زمانی هستید، باید روندها را شناسایی کنید و در عین حال نوسانات تصادفی در داده های خود را نادیده بگیرید. راه های متعددی برای حل این مشکل آماری رایج در R با تخمین خطوط روند وجود دارد. ما در این مقاله نحوه تجسم آن را با استفاده از بسته Plotly به شما نشان خواهیم داد.
1. خطوط روند جهانی
یکی از سادهترین روشها برای شناسایی روندها، برازش مدل رگرسیون حداقل مربعات معمولی به دادهها است. مدلی که اکثر مردم با آن آشنا هستند، مدل خطی است، اما میتوانید برای انعطافپذیری بیشتر، اصطلاحات چند جملهای دیگر را اضافه کنید. در عمل، از چندجملهای با درجههای بزرگتر از سه اجتناب کنید، زیرا پایداری کمتری دارند.
مجموعه داده های EuStockMarkets (موجود در مجموعه داده های R) برای ساخت خطوط روند خطی، درجه دوم و مکعبی.
2. صاف کننده های موضعی
مدلهای جهانی فرض میکنند که سریهای زمانی یک روند واحد را دنبال میکنند. با این حال، برای بسیاری از مجموعه های داده، ما می خواهیم این فرض را کاهش دهیم. در بخش زیر، استفاده از نرمافزارهای محلی را با استفاده از مجموعه دادههای نیل نشان میدهیم. این شامل اندازه گیری های جریان سالانه رودخانه نیل در طول 100 سال است و نسبت به مجموعه داده های EuStockMarkets منظم تر است.
من. میانگین های متحرک
روش میانگین متحرک (همچنین به عنوان میانگین در حال اجرا شناخته میشود) شامل گرفتن میانگین تعداد ثابتی از نقاط نزدیک است. حتی با این روش ساده می بینیم که این سوال که چگونه محله را انتخاب کنیم برای هموارکننده های محلی بسیار مهم است. افزایش پهنای باند از 5 به 20 نشان می دهد که به جای کاهش شدید در حدود سال 1900، به تدریج در جریان رودخانه سالانه از 1890 تا 1905 کاهش می یابد.
بسیاری از بستهها شامل توابعی برای محاسبه میانگین در حال اجرا هستند مانند caTools::runmean و forecast::ma که ممکن است ویژگیهای اضافی داشته باشند، اما فیلتر در بسته آماری پایه میتواند برای محاسبه میانگین متحرک بدون نصب بستههای اضافی استفاده شود.
داده ("نیل") xx = نیل x. info = attr(xx، "tsp") tt = seq(from=x. info[1], to = x. info[2], by=1/x. info(3)plotly) p. rm = plot_ly(x=tt, y=xx, type="scatter", mode="lines", line=data. fmt, name="Data") p. rm = add_lines(p. rm, x=tt, y=rmean20, line=line. fmt, name="Bandwidth = 20") p. rm = add_lines(p. rm, x=tt, y=rmean5, line=line. fmt, name=" پهنای باند= 5") p. rm = طرح (p. rm، عنوان = "Running mean") print (p. rm)
iiصاف کننده خطوط در حال اجرا
صاف کننده خط در حال اجرا با قرار دادن یک رگرسیون خطی در یک همسایگی محلی از مقدار هدف، بایاس را کاهش می دهد. یک الگوریتم محبوب که از نرمافزار خط در حال اجرا استفاده میکند، supsmu فوقالعادهتر فریدمن است که بهطور پیشفرض از اعتبارسنجی متقاطع برای یافتن بهترین فاصله استفاده میکند.
rlcv = supsmu(tt, xx) rlst = supsmu(tt, xx, span = 0. 05) rllt = supsmu(tt, xx, span = 0. 75) p. rl = plot_ly(x=tt, y=xx, type="scatter", mode="lines", line = data. fmt, name="Data") p. rl = add_lines(p. rl, x=tt, y=rllt$y, line=line. fmt, name="Span= 0. 75") p. rl = add_lines(p. rl، x=tt، y=rlst$y، line=line. fmt، name="Span = 0. 05") p. rl = add_lines(p. rl، x=tt, y=rlcv$y, line=line. fmt, name="Cross-validated span") p. rl = layout(p. rl, title = "Sunning line smoothers") print(p. rl)
III. صاف کننده های هسته
یک رویکرد جایگزین برای مشخص کردن یک محله، کاهش وزنها دورتر از مقدار هدف است. این تخمینها بسیار روانتر از نتایج حاصل از هموارکنندههای میانگین یا در حال اجرا هستند.
IVصاف کردن اسپلاین
اسپلین ها از یک چند جمله ای قطعه قطعه شده با قطعات تعریف شده توسط دنباله ای از گره ها تشکیل شده اند که در آن قطعات به طور هموار می پیوندند. با به حداقل رساندن یک معیار حاوی مجازات برای خوبی از تناسب و صاف بودن ، اسپلین های صاف کننده تخمین زده می شود. تجارت بین این دو توسط پارامتر صاف کننده Lambda کنترل می شود ، که به طور معمول با اعتبارسنجی متقابل انتخاب می شود.
در بسته پایه ، Smooth. Spline می تواند برای محاسبه اسپلین ها استفاده شود ، اما استفاده از عملکرد GAM در MGCV رایج تر است. هر دو عملکرد از اعتبار سنجی متقاطع برای انتخاب پارامتر پیش فرض هموار سازی استفاده می کنند. اما همانطور که در نمودار بالا مشاهده می شود ، نتایج بین پیاده سازی ها متفاوت است. مزیت دیگر استفاده از GAM این است که تخمین فواصل اطمینان را فراهم می کند.
v. loess
Loess (تخمین زده شده محلی ScatterPlot Smoother) با استفاده از رگرسیون چند جمله ای با وزنه برداری محلی (به طور پیش فرض ، رگرسیون درجه دوم با وزن های سه جوراب) ، رگرسیون محلی را با هسته ها ترکیب می کند. همچنین امکان تخمین فواصل اطمینان تقریبی را فراهم می کند. با این حال ، توجه به این نکته حائز اهمیت است که برخلاف SUPSMU ، Smooth. Sline یا GAM ، Loess از اعتبارسنجی متقاطع استفاده نمی کند. به طور پیش فرض ، دهانه روی 0. 75 تنظیم شده است. یعنی تخمین زده شده در هر مقدار هدف از رگرسیون محلی ساخته شده است که با استفاده از 75 ٪ از نقاط داده نزدیک به مقدار هدف ساخته شده است. این دهانه نسبتاً بزرگ است و منجر به مقادیر تخمین زده شده نسبت به روشهای دیگر می شود.
ll. rough = loess (xx~tt ، span = 0. 1) ll. smooth = loess (xx~tt ، span = 0. 75) p. ll = plot_ly (x = tt ، y = xx ، type = "پراکندگی" ، mode = "خطوط" ، line = data. fmt ، name = "data") p. ll = add_lines (p. ll ، x = tt ، y = پیش بینی (ll. smooth) ، line = line. fmt ، name = "span = 0. 75") p. ll = add_lines (p. ll ، x = tt ، y = پیش بینی (ll. rough) ، line = line. fmt ، name = "span = 0. 10") p. ll = طرح (p. ll ، title = "loess") چاپ (p. ll)