ডিনলেম আর প্যাকেজ সহ 1 পদক্ষেপের পূর্বাভাস


11

আমি বেশ কয়েকটি স্বতন্ত্র ভেরিয়েবল সহ একটি মডেল ফিট করেছি, যার মধ্যে একটি ডায়ানলম প্যাকেজ ব্যবহার করে নির্ভরশীল ভেরিয়েবলের ল্যাগ।

আমার স্বাধীন ভেরিয়েবলের জন্য আমার 1-পদক্ষেপের পূর্বাভাস আছে বলে ধরে নিচ্ছি, আমি কীভাবে আমার নির্ভরশীল ভেরিয়েবলগুলির জন্য 1-পদক্ষেপের পূর্বাভাস পেতে পারি?

এখানে একটি উদাহরণ:

library(dynlm)

y<-arima.sim(model=list(ar=c(.9)),n=10) #Create AR(1) dependant variable
A<-rnorm(10) #Create independant variables
B<-rnorm(10)
C<-rnorm(10)
y<-y+.5*A+.2*B-.3*C #Add relationship to independant variables 
data=cbind(y,A,B,C)

#Fit linear model
model<-dynlm(y~A+B+C+L(y,1),data=data)

#Forecast
A<-c(A,rnorm(1)) #Assume we already have 1-step forecasts for A,B,C
B<-c(B,rnorm(1))
C<-c(C,rnorm(1))
y=window(y,end=end(y)+c(1,0),extend=TRUE)
newdata<-cbind(y,A,B,C)
predict(model,newdata)

এবং এখানে ডিন প্যাকেজ ব্যবহার করে একটি উদাহরণ দেওয়া হয়েছে, যা কাজ করে।

library(dyn)

#Fit linear model
model<-dyn$lm(y~A+B+C+lag(y,-1),data=data)

#Forecast
predict(model,newdata)the dyn packages, which works:

কেবল dynlmপ্যাকেজ ব্যবহার করা আপনার নির্ভরশীল ভেরিয়েবলগুলির জন্য পূর্বাভাস সরবরাহ করবে না। আপনার নির্ভরশীল ভেরিয়েবলগুলির জন্য পূর্বাভাস সরবরাহের জন্য তাদের ব্যাখ্যা করার জন্য একটি মডেল এবং সম্ভবত অতিরিক্ত ডেটা প্রয়োজন। আমি আপনাকে পরামর্শ দিচ্ছি যে জনসন এবং উইচারনের "অ্যাপ্লাইড মাল্টিভারিয়েট স্ট্যাটিস্টিকাল অ্যানালাইসিস" এর মতো মাল্টিভারিয়েট রিগ্রেশন সম্পর্কে কিছু পড়ুন। বা পূর্বাভাসের জন্য একটি কোর্স: duke.edu/~rnau/411home.htm
Deps_stats

1
@ deps_stats নির্ভরশীল পরিবর্তনশীলটি আমি পূর্বাভাস দিতে চাই। আমি ধরে নিচ্ছি যে আমার ইতিমধ্যে আমার স্বাধীন ভেরিয়েবলগুলির পূর্বাভাস রয়েছে। আমার উদাহরণ কোডে, y হ'ল নির্ভরশীল পরিবর্তনশীল যা আমি পূর্বাভাস দেওয়ার চেষ্টা করছি এবং এ, বি, সি স্বতন্ত্র ভেরিয়েবল, যার জন্য ইতিমধ্যে আমার পূর্বাভাস রয়েছে। আমি পোস্ট করা উদাহরণ কোডটি যদি আপনি চালনা করেন তবে আপনি আমার সমস্যার প্রকৃতি বুঝতে পারবেন।
Zach

@ জাচ: চমৎকার কাগল রেটিং! (আমি আপনার মাউস ওভার প্রোফাইলের লিঙ্কটি ক্লিক করেছি)
হিউ পার্কিনস

উত্তর:


13

অভিনন্দন, আপনি একটি বাগ খুঁজে পেয়েছেন। dynlmল্যাগযুক্ত ভেরিয়েবলগুলি ব্যবহার করা হলে নতুন ডেটা সহ প্রেডিকশন ভাঙা is কেন আউটপুট তাকান তা দেখতে

predict(model)
predict(model,newdata=data)

ফলাফলগুলি একই হওয়া উচিত, তবে তা নয়। newdataযুক্তি ছাড়াই , predictফাংশনটি আউটপুট modelথেকে মূলত উপাদানটি ধরে dynlmnewdataযুক্তি দিয়ে predictনতুন মডেল থেকে ম্যাট্রিক্স গঠনের চেষ্টা করে newdata। যেহেতু এতে সরবরাহিত সূত্রটি পার্সিংয়ের সাথে জড়িত dynlmএবং সূত্রটির কার্যকারিতা রয়েছে Lযা কার্যকরীভাবে কেবল ইন্টার্নালি সংজ্ঞায়িত করা হয়েছে dynlm, তাই ভুল মডেল ম্যাট্রিক্স গঠিত হয়। আপনি যদি ডিবাগ করার চেষ্টা করেন, আপনি দেখতে পাবেন যে newdataআর্গুমেন্ট সরবরাহের ক্ষেত্রে পিছিয়ে থাকা নির্ভরশীল ভেরিয়েবলটি পিছিয়ে নেই ।

আপনি যা করতে পারেন তা নির্ভরশীল ভেরিয়েবলকে পিছিয়ে রাখা এবং এটিতে অন্তর্ভুক্ত করা newdata। এই পদ্ধতির চিত্রিত কোড এখানে। আমি set.seedএটি ব্যবহার করি তাই এটি সহজেই পুনরুত্পাদনযোগ্য হবে।

library(dynlm)

set.seed(1)
y<-arima.sim(model=list(ar=c(.9)),n=10) #Create AR(1) dependant variable
A<-rnorm(10) #Create independant variables
B<-rnorm(10)
C<-rnorm(10)
y<-y+.5*A+.2*B-.3*C #Add relationship to independant variables 
data=cbind(y,A,B,C)

#Fit linear model
model<-dynlm(y~A+B+C+L(y,1),data=data)

বগী আচরণ এখানে:

> predict(model)
       2        3        4        5        6        7        8        9       10 
3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738 
> predict(model,newdata=data)
        1         2         3         4         5         6         7         8         9        10 
2.1628335 3.7063579 2.9781417 2.1374301 3.2582376 1.9534558 1.3670995 2.4547626 0.8448223 1.8762437 

গঠন newdata

#Forecast fix.
A<-c(A,rnorm(1)) #Assume we already have 1-step forecasts for A,B,C
B<-c(B,rnorm(1))
C<-c(C,rnorm(1))

newdata<-ts(cbind(A,B,C),start=start(y),freq=frequency(y))

newdata<-cbind(lag(y,-1),newdata)
colnames(newdata) <- c("y","A","B","C")

মডেল ফিটের সাথে পূর্বাভাসের তুলনা করুন:

> predict(model)
       2        3        4        5        6        7        8        9       10 
3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738 
> predict(model,newdata=newdata)
       1        2        3        4        5        6        7        8        9       10       11 
      NA 3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738 1.102367 

আপনি যেমন historicalতিহাসিক ডেটা দেখতে পাচ্ছেন পূর্বাভাস মিলে যায় এবং শেষ উপাদানটিতে 1-পদক্ষেপের পূর্বাভাস থাকে।


একই সূত্রে আপনার যেখানে দুটি লগ রয়েছে সেই মামলাটি আপনি কীভাবে পরিচালনা করতে পারবেন? lag(y,-1)+lag(y,-2)?
হিউ পার্কিনস

1
ঠিক আছে, তাহলে এই সমাধানটি কাজ করে না। আপনার নিজের ভবিষ্যদ্বাণী ফাংশনটি লিখতে হবে।
mpiktas

আহ, এটাই আমি আসলে করেছি :
হিউ পার্কিনস

1
আপনি কী এটিকে ডিল্ম লেখকের কাছে জমা দেওয়ার কথা বিবেচনা করেছেন? এটি একটি উদ্ভট পরিস্থিতি, আপনি ডিনম ব্যবহার করে ভবিষ্যদ্বাণী করতে পারবেন না।
এমপিটিকাস

হুম, আপনি বলছেন যে তারা জাদুকরীভাবে স্ট্যাকওভারফ্লো নিরীক্ষণ করবে না এবং বাগগুলি ঠিক করবে? আমার ধারণা সম্ভবত এটি সত্য!
হিউ পারকিনস

2

@ এমডি-আজিমুল-হকের অনুরোধ অনুসরণ করে, আমি আমার 4 বছরের পুরানো উত্স কোডটি খনন করেছি এবং নীচের যথাযথভাবে নামকরণ করা ফাংশনটি পেয়েছি। @ এমডি-আজিমুল-হক এটি কি খুঁজছেন তা নিশ্চিত নন?

# pass in training data, test data,
# it will step through one by one
# need to give dependent var name, so that it can make this into a timeseries
predictDyn <- function( model, train, test, dependentvarname ) {
    Ntrain <- nrow(train)
    Ntest <- nrow(test)
    # can't rbind ts's apparently, so convert to numeric first
    train[,dependentvarname] <- as.numeric(train[,dependentvarname])
    test[,dependentvarname] <- NA
    testtraindata <- rbind( train, test )
    testtraindata[,dependentvarname] <- ts( as.numeric( testtraindata[,dependentvarname] ) )
    for( i in 1:Ntest ) {
       cat("predicting i",i,"of",Ntest,"\n")
       result <- predict(model,newdata=testtraindata,subset=1:(Ntrain+i-1))
       testtraindata[Ntrain+i,dependentvarname] <- result[Ntrain + i + 1 - start(result)][1]
    }
    testtraindata <- testtraindata[(Ntrain+1):(Ntrain + Ntest),dependentvarname]
    names(testtraindata) <- 1:Ntest
    return( testtraindata )
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.