(47) כיצד לחשב מתאם נע (moving correlation) בין שתי סדרות עיתיות (time series)?
קטגוריה |
תיאור |
מספר חח"ע מתוך ה-Repository | 47 |
מוצר | SAS |
סביבה | Linux / Windows |
סימפטומים | אנחנו צריכים לחשב מתאם נע (moving correlation) בין שתי סדרות עיתיות (time series) |
בעיית השורש | אנחנו צריכים לחשב באופן מהיר ואמין מתאם נע בין שתי סדרות עיתיות. |
פתרון | נעשה שימוש בפונקציה של SAS בשם proc expand לחישוב מדדים נעים שעל בסיסם נחשב את המתאם הנע.
נכין נתונים לדוגמא: proc sort data=SASHELP.PRDSALE out=SALES(rename=(month=Date)); by month product; where country='CANADA' and region='WEST' and division='CONSUMER' and prodtype='OFFICE'; format month ddmmyy10. actual comma20.; run;
proc transpose data=SALES out=SALES(drop=_NAME_ _LABEL_); var actual; id product; by date ; run;
הקוד הבא יחשב לנו את המתאם הנע בין שתי סדרות. נגדיר את שם הסדרות ואת חלון הזמן (time window) עבור החישוב כמשתנים כדי שנוכל לשנותם בקלות. לבסוף גם נציג את הנתונים על גבי גרף: %let series1=CHAIR; %let series2=DESK; %let num_periods=5;
data SALES1; set SALES; Obs=1; Product = &series1*&series2; run;
proc expand data = SALES1 OUT = SALES1 method = none; id date; convert &series1 = Sum_S1 / transformout = (movsum &num_periods); convert &series2 = Sum_S2 / transformout = (movsum &num_periods); convert product = Sum_Product / transformout = (movsum &num_periods) ; convert obs = Sum_Obs / transformout = (movsum &num_periods) ; convert &series1 = SS_S1 / transformout = (movcss &num_periods) ; convert &series2 = SS_S2 / transformout = (movcss &num_periods) ; Run ;
Data SALES2(keep= date covariance) ; set SALES1; if _N_ > &num_periods; Covariance = (Sum_Product – (Sum_S1 * Sum_S2)/Sum_Obs) / (sqrt(SS_S1)*sqrt(SS_S2)); Run ;
data SALES_ALL; merge SALES2 SALES; by date; run;
ods graphics/width=1200px height=600px; proc sgplot data=SALES_ALL; series x=date y=&series1/lineattrs=(thickness=2px); series x=date y=&series2/lineattrs=(thickness=2px); series x=Date y=Covariance/lineattrs=(thickness=2px pattern=2) y2axis ; refline 0 / axis=y2 lineattrs=(pattern=2); yaxis display=(nolabel); xaxis display=(nolabel); y2axis min=-1 max=1; run;
הדוגמא לעיל ממחישה רק חלק קטן מהיכולות של proc expand. הפונקציה הזאת מאפשרת לנו גם לסכום או לפצל סדרות עיתיות ליחידות זמן שונות (למשל להפוך סדרה חודשית לשנתית וסדרה רבעונית לחודשית), לבצע מגוון רחב מאוד של חישובים נעים (למשל חציון נע, מקסימום נע) ועוד ועוד. proc expand הוא חלק מחבילת SAS/ETS. במידה ואין לכם את החבילה הזאת אנא פנו אלינו |
לינקים | התיעוד של proc expand באתר של SAS |
®SAS מובילה עם נתח שוק בינ"ל של 30.8% בקטגורית האנליטיקה המתקדמת – ׁׁׁׁIDC, 2017ׂ
SAS® -מהבנקים העולמיים בחרו ב
משתמשים בישראל
SAS® בחרו במערכת של