محاسبه میانگین متحرک

ساخت وبلاگ

من سعی می کنم از R برای محاسبه میانگین متحرک بیش از یک سری از مقادیر در یک ماتریس استفاده کنم. به نظر نمی رسد یک عملکرد داخلی در R وجود داشته باشد که به من امکان محاسبه میانگین های متحرک را می دهد. آیا بسته ای یکی را ارائه می دهد؟یا آیا باید خودم را بنویسم؟

17 پاسخ 17

یا می توانید آن را به سادگی با استفاده از فیلتر محاسبه کنید ، در اینجا عملکردی که من استفاده می کنم وجود دارد:

اگر از dplyr استفاده می کنید ، مراقب باشید که آمار را مشخص کنید :: در عملکرد بالا فیلتر کنید.

باید خاطرنشان کنم که "طرف = 2" ممکن است در موارد استفاده بسیاری از افراد که نمی خواهند از آن غافل شوند ، گزینه مهمی باشد. اگر می خواهید فقط اطلاعاتی را در میانگین متحرک خود داشته باشید ، باید از طرفین = 1 استفاده کنید.

چند سال بعد اما dplyr اکنون یک عملکرد فیلتر دارد ، اگر این بسته را بارگذاری کرده اید از آمار استفاده کنید :: فیلتر

طرف = 2 معادل Align = "مرکز" برای باغ وحش :: Rollmean یا RCPProll :: Roll_Mean است. طرف = 1 معادل تراز "راست" است. من راهی برای انجام تراز "سمت چپ" یا محاسبه با داده های "جزئی" (2 یا بیشتر مقادیر) نمی بینم؟

  • نورد به معنی/حداکثر/واسطه در بسته باغ وحش (Rollmean)
  • حرکت در TTR
  • MA در پیش بینی

میانگین در حال حرکت در R حاوی مقادیر آینده زمانی است که از زمان بندی استفاده نمی شود؟من پیش بینی کردم :: MA و شامل همه محله ها است ، درست نیست.

به جای آن ، عملکرد FILTER را امتحان کنید. در آنجا می توانید طرفین = 1 را فقط برای مقادیر گذشته تنظیم کنید. به عنوان مثال. آمار :: فیلتر (x ، rep (1،5) ، طرفین = 1)/5 برای میانگین بیش از 5 مقدار.

استفاده از cumsum باید کافی و کارآمد باشد. با فرض اینکه شما یک بردار X دارید و می خواهید تعداد شماره N در حال اجرا باشد

همانطور که در نظرات Mzuther اشاره شد ، این فرض می کند که هیچ NA در داده ها وجود ندارد. برای مقابله با آن ها نیاز به تقسیم هر پنجره بر اساس تعداد مقادیر غیر NA دارد. در اینجا یکی از راه های انجام این کار ، شامل اظهار نظر از ricardo cruz:

این مسئله هنوز هم این مسئله را دارد که اگر تمام مقادیر موجود در پنجره NAS باشد ، یک خطای صفر تقسیم می شود.

Ericardo Cruz: بهتر است NAS را برداشته و طول بردار را بر این اساس تنظیم کنید. به یک وکتور با تعداد زیادی NA فکر کنید - صفر ها میانگین را به سمت صفر می کشند ، در حالی که حذف NAS میانگین آن را به طور متوسط ترک می کند. این همه به داده های شما و سوالی که می خواهید به آن پاسخ دهید بستگی دارد.:)

mzuther ، من پاسخ را به دنبال نظرات شما به روز کردم. با تشکر از ورودیمن فکر می کنم روش صحیح برخورد با داده های گمشده ، گسترش پنجره (با از بین بردن مقادیر NA) نیست ، بلکه با میانگین هر پنجره توسط مخرج صحیح است.

RN

در Data. Table 1. 12. 0 عملکرد جدید FrollMean برای محاسبه میانگین نورد سریع و دقیق با دقت استفاده از مقادیر NA ، NAN و +INF ، -INF اضافه شده است.

از آنجا که هیچ نمونه قابل تکرار در سؤال وجود ندارد ، چیزهای بیشتری برای پرداختن به اینجا وجود ندارد.

می توانید اطلاعات بیشتری در مورد؟ frollmean در کتابچه راهنمای کاربر ، همچنین به صورت آنلاین در؟ frollmean پیدا کنید.

نمونه هایی از کتابچه راهنمای زیر:

بسته Catools دارای میانگین/min/max/sd بسیار سریع و چند عملکرد دیگر است. من فقط با RunMean و Runsd کار کرده ام و آنها سریعترین بسته های دیگر ذکر شده تا به امروز هستند.

می توانید از RCPProll برای میانگین های بسیار سریع حرکت شده در C ++ استفاده کنید. فقط با عملکرد ROLL_MEAN تماس بگیرید. اسناد را می توان در اینجا یافت.

در غیر این صورت ، این (کندتر) برای حلقه باید این ترفند را انجام دهد:

آیا می توانید لطفاً با جزئیات به من توضیح دهید ، این الگوریتم چگونه کار می کند؟زیرا من نمی توانم ایده را درک کنم

ابتدا او یک بردار با همان طول را با res = arr آغاز می کند. سپس یک حلقه وجود دارد که از N یا ، عنصر پانزدهم ، تا انتهای آرایه شروع می شود. این بدان معناست که اولین زیر مجموعه ای که او میانگین ARR [1:15] را می گیرد که Spot Res را پر می کند [15]. اکنون ، من تنظیم res = rep (na ، طول (arr)) به جای res = arr را ترجیح می دهم تا هر عنصر res [1:14] برابر با NA باشد و نه یک عدد ، جایی که ما نتوانستیم میانگین کامل 15 عنصر را بدست آوریمبشر

در اینجا کد مثال نشان داده شده است که چگونه می توان با استفاده از عملکرد Rollmean از بسته باغ وحش ، میانگین حرکت محور و میانگین متحرک دنباله دار را محاسبه کرد.

در واقع RCPProll بسیار خوب است.

کد ارسال شده توسط cantdutchthis باید در خط چهارم به پنجره اصلاح شود:

روش دیگر ، که به دست می دهد Missings ، در اینجا آورده شده است.

روش سوم ، بهبود کد کانتدچ این برای محاسبه میانگین های جزئی یا خیر ، به شرح زیر است:

به منظور تکمیل جواب Cantdutchthis و Rodrigo Remedio ؛

شما ممکن است میانگین متحرک یک بردار X را با عرض پنجره K توسط: محاسبه کنید:

پسوند این به Data. Frames: Apply (DF ، RC ، Fun = Function (x) اعمال شود (تعبیه شده (x ، k) ، 1 ، میانگین)). RC به ترتیب برای ردیف یا ستون می تواند یک یا دو باشد.

از بسته کشویی می توان برای این کار استفاده کرد. این رابط کاربری دارد که به طور خاص طراحی شده است تا احساس مشابهی با PURRR داشته باشد. این هر عملکرد دلخواه را می پذیرد و می تواند هر نوع خروجی را برگرداند. فریم های داده حتی از روی ردیف عاقلانه تکرار می شوند. سایت PKGDown در اینجا است.

سربار هر دو کشویی و Data. Table Frollapply () باید بسیار کم باشد (بسیار سریعتر از باغ وحش). FrollApply () به نظر می رسد برای این مثال ساده در اینجا کمی سریعتر باشد ، اما توجه داشته باشید که فقط ورودی عددی را می گیرد و خروجی باید یک مقدار عددی مقیاس باشد. توابع کشویی کاملاً عمومی هستند و می توانید هر نوع داده را برگردانید.

ویرایش: از اضافه کردن پارامتر جانبی ، برای میانگین متحرک (یا جمع ، یا.) به عنوان مثال ، شادی زیادی گرفت. 7 روز گذشته یک بردار تاریخ.

برای افرادی که فقط می خواهند خودشان را محاسبه کنند ، چیزی بیش از این نیست:

اما لذت بردن از آن از میانگین () سرگرم کننده می شود ، بنابراین می توانید هر عملکرد "متحرک" را محاسبه کنید!

اگرچه کمی آهسته است اما می توانید از Zoo :: Rollapply برای انجام محاسبات روی ماتریس نیز استفاده کنید.

جایی که x مجموعه داده است ، سرگرم کننده = میانگین عملکرد است. همچنین می توانید آن را به حداقل ، حداکثر ، SD و غیره تغییر دهید و عرض آن پنجره نورد است.

کند نیست ؛. مقایسه آن با پایه R ، بسیار سریعتر است. set. seed (123) ؛ایکس

می توان از بسته Runner برای توابع متحرک استفاده کرد. در این حالت عملکرد متوسط_run. مشکل با کاممان این است که مقادیر NA را اداره نمی کند ، اما Mead_run چنین می کند. بسته Runner همچنین از سری زمانی نامنظم پشتیبانی می کند و ویندوز می تواند به تاریخ بستگی داشته باشد:

همچنین می توان گزینه های دیگری مانند LAG را مشخص کرد و فقط در شاخص های خاص چرخید. بیشتر در اسناد بسته و عملکرد.

در اینجا یک عملکرد ساده با فیلتر نشان می دهد که یک راه برای مراقبت از شروع و پایان دادن به NAS با بالشتک و محاسبه میانگین وزنی (پشتیبانی شده توسط فیلتر) با استفاده از وزن های سفارشی:

لطفاً پاسخ خود را به این سؤال مرتبط کنید و برخی از خروجی ها را درج کنید که نشان می دهد به این سوال پاسخ داده شده است. ببینید که چگونه برای راهنمایی در مورد پاسخ خوب پاسخ دهید.

من از کل به همراه یک بردار ایجاد شده توسط Rep () استفاده می کنم. این مزیت استفاده از CBIND () برای جمع آوری بیش از 1 ستون در DataFrame در زمان را دارد. در زیر نمونه ای از میانگین متحرک 60 برای یک بردار (V) از طول 1000 وجود دارد:

توجه داشته باشید اولین آرگومان در Rep این است که به سادگی مقادیر منحصر به فرد کافی برای دامنه متحرک را بر اساس طول بردار و مبلغی که به طور متوسط انجام می شود ، بدست آورید. آرگومان دوم طول را برابر با طول بردار نگه می دارد ، و آخرین مقادیر آرگومان اول را به همان تعداد بار به عنوان دوره متوسط تکرار می کند.

در جمع می توانید از چندین کارکرد (میانه ، حداکثر ، حداقل) استفاده کنید - به عنوان مثال نشان داده شده است. باز هم ، می تواند از یک فرمول با CBIND استفاده کند تا این کار را در بیش از یک ستون (یا همه) در یک DataFrame انجام دهد.

راهنمای تجارت فارکس...
ما را در سایت راهنمای تجارت فارکس دنبال می کنید

برچسب : نویسنده : لیال حقیقی بازدید : 54 تاريخ : سه شنبه 8 فروردين 1402 ساعت: 3:37