এমজিসিভি গেম এলোমেলো প্রভাবের সাথে ভবিষ্যদ্বাণী করা


10

আমি পৃথক জাহাজের জন্য সহজ র্যান্ডম এফেক্টস (যা ফিশারিগুলিতে সময়ের সাথে সাথে পুনরাবৃত্তি করতে পারে) মডেল করতে এমজিসিভিতে গ্যাম ব্যবহার করে মোট মাছ ধরা মডেলিং করতে আগ্রহী। আমার 98 টি বিষয় রয়েছে, তাই আমি ভেবেছিলাম যে এলোমেলো প্রভাবগুলির মডেল করার জন্য আমি গ্যামের পরিবর্তে গ্যাম ব্যবহার করব। আমার মডেলটি হ'ল:

modelGOM <- gam(TotalFish ~ factor(SetYear) + factor(SetMonth) + factor(TimePeriod) +     
s(SST) + s(VesselID, bs = "re", by = dum) + s(Distance, by = TimePeriod) + 
offset(log(HooksSet)), data = GOM, family = tw(), method = "REML")

আমি বিএস = "রে" এবং = ডামের সাথে এলোমেলো প্রভাবকে কোড করেছি (আমি পড়েছি যে এটি আমাকে তাদের পূর্বাভাসিত মান বা শূন্যে জাহাজের প্রভাবগুলির সাথে পূর্বাভাস দেওয়ার অনুমতি দেয়)। "ডাম" হ'ল 1 এর ভেক্টর।

মডেলটি চলে তবে আমার ভবিষ্যদ্বাণী করতে সমস্যা হচ্ছে। আমি ভবিষ্যদ্বাণীগুলির জন্য একটি জাহাজ বেছে নিয়েছি (ভেসেল 21) এবং পূর্বাভাসগুলির আগ্রহের ভবিষ্যদ্বাণী (দূরত্ব) ব্যতীত অন্য কিছুর জন্য গড় মানগুলি।

data.frame("Distance"=seq(min(GOM$Distance),max(GOM$Distance),length = 100),
                             "SetYear" = '2006',
                             "SetMonth" = '6',
                             "TimePeriod" = 'A',
                             "SST" = mean(GOM$SST),
                             "VesselID" = 'Vessel21', 
                             "dum" = '0', #to predict without vessel effect
                             "HooksSet" = mean(GOM$HooksSet))

pred_GOM_A_Swordfish <- predict(modelGOM, grid.bin.GOM_A_Swordfish, type = "response", 
se = T)

আমি যে ত্রুটিটি পাচ্ছি তা হ'ল:

Error in Predict.matrix.tprs.smooth(object, dk$data) : 
    NA/NaN/Inf in foreign function call (arg 1)
    In addition: Warning message:
    In Ops.factor(xx, object$shift[i]) : - not meaningful for factors

আমি মনে করি এটি বলা হচ্ছে কারণ ভেসেলআইডিডি একটি উপাদান, তবে আমি এলোমেলো প্রভাবগুলির জন্য এটি একটি মসৃণ ব্যবহার করছি।

আমি সাধারণ এলোমেলো প্রভাব (বিএস = "পুনরায়") ব্যতীত গাম ব্যবহার করে সফলভাবে পূর্বাভাস দিতে সক্ষম হয়েছি।

ভেসেলআইডি শব্দটি ছাড়াই কীভাবে এই মডেলটির পূর্বাভাস দেওয়া যায় (তবে এখনও এটি উপযুক্তকরণের মধ্যে অন্তর্ভুক্ত করা যায়) আপনি কী কোনও পরামর্শ দিতে পারেন?

ধন্যবাদ!

উত্তর:


20

এমজিসিভি'র ১.৮.৮ সংস্করণ থেকে একটি যুক্তি অর্জন করা হয়েছে যা মডেলটির শর্তাবলী শূন্যের সুযোগ দেয়, এলোমেলো প্রভাব সহ যখন পূর্বাভাস দেওয়া ডামি ট্রিক ব্যতীত পূর্বাভাস দেওয়ার সময় whenpredict.gamexclude

  • predict.gamএবং predict.bamএখন 'exclude'পদক্ষেপ (যেমন র্যান্ডম এফেক্টস) পূর্বাভাসের জন্য শূন্য করা মঞ্জুর করে এমন একটি যুক্তি গ্রহণ করুন। দক্ষতার জন্য, মসৃণ পদগুলিতে termsবা এর মধ্যে নেই excludeসেগুলি আর মূল্যায়ন করা হয় না এবং পরিবর্তে শূন্যে সেট করা হয় বা ফিরে আসে না not দেখুন ?predict.gam
library("mgcv")
require("nlme")
dum <- rep(1,18)
b1 <- gam(travel ~ s(Rail, bs="re", by=dum), data=Rail, method="REML")
b2 <- gam(travel ~ s(Rail, bs="re"), data=Rail, method="REML")

head(predict(b1, newdata = cbind(Rail, dum = dum)))    # ranefs on
head(predict(b1, newdata = cbind(Rail, dum = 0)))      # ranefs off
head(predict(b2, newdata = Rail, exclude = "s(Rail)")) # ranefs off, no dummy

> head(predict(b1, newdata = cbind(Rail, dum = dum)))    # ranefs on
       1        2        3        4        5        6 
54.10852 54.10852 54.10852 31.96909 31.96909 31.96909  
> head(predict(b1, newdata = cbind(Rail, dum = 0)))      # ranefs off
   1    2    3    4    5    6 
66.5 66.5 66.5 66.5 66.5 66.5
> head(predict(b2, newdata = Rail, exclude = "s(Rail)")) # ranefs off, no dummy
   1    2    3    4    5    6 
66.5 66.5 66.5 66.5 66.5 66.5

পুরানো পদ্ধতির

এটি কাজ করছে কিনা তা পরীক্ষা করতে সাইমন উড নিম্নলিখিত সাধারণ উদাহরণ ব্যবহার করেছেন:

library("mgcv")
require("nlme")
dum <- rep(1,18)
b <- gam(travel ~ s(Rail, bs="re", by=dum), data=Rail, method="REML")
predict(b, newdata=data.frame(Rail="1", dum=0)) ## r.e. "turned off"
predict(b, newdata=data.frame(Rail="1", dum=1)) ## prediction with r.e

যা আমার পক্ষে কাজ করে। অনুরূপভাবে:

dum <- rep(1, NROW(na.omit(Orthodont)))
m <- gam(distance ~ s(age, bs = "re", by = dum) + Sex, data = Orthodont)
predict(m, data.frame(age = 8, Sex = "Female", dum = 1))
predict(m, data.frame(age = 8, Sex = "Female", dum = 0))

কাজ করে।

সুতরাং আমি যে ডেটা সরবরাহ করছি তা যাচাই করবো newdataযা আপনি মনে করেন সমস্যাটি যেমনটি নাও হতে পারে তেমনি VesselID- ত্রুটিটি ফাংশন থেকে আসছে যা predict()উপরের উদাহরণগুলিতে কলগুলি দ্বারা ডাকা হত এবং Rail এটি একটি ফ্যাক্টর প্রথম উদাহরণ।


ধন্যবাদ, গ্যাভিন, উদাহরণগুলির জন্য! তাদের মাধ্যমে কাজ করার সময়, আমি এটি আবিষ্কার করেছি। আপনি সঠিক ছিলেন - ত্রুটিটি নতুন ডেটা ডেটা ফ্রেমে ছিল। একবার আমি ভেরিয়েবল দ্বারা "ডাম" এর জন্য '0' এর আশেপাশে উদ্ধৃতি চিহ্নগুলি সরিয়ে ফেললে আমি কোনও ত্রুটি ছাড়াই ভবিষ্যদ্বাণী করতে সক্ষম হয়েছি। রুকি ভুল, তবে আমি এটি নিয়ে সারা দিন লড়াই করে যাচ্ছিলাম এবং ভেসেলআইডি ফ্যাক্টরটি মসৃণ হওয়ার সাথে এটি সমস্যা ছিল বলে মনে করি। তোমাকে অনেক ধন্যবাদ!
মিগান

বাদ দিয়ে কীভাবে একজন একাধিক এলোমেলো প্রভাব নির্দিষ্ট করতে পারে exclude? আমি চেষ্টা করার চেষ্টা করেছি c()কিন্তু মনে হচ্ছে এটি কাজ করে না।
স্টেফানো

পদগুলির একটি ভেক্টর ব্যবহার করে আমার পক্ষে কাজ করে না: উদাহরণগুলি থেকে exclude = c("s(x0)", "s(x2)")নিম্নলিখিত মডেলটি b<-gam(y~s(x0)+s(I(x1^2))+s(x2)+offset(x3),data=dat)থেকে বলুন ?predict.gam। আপনি ভেক্টর প্রেরণ মধ্যে স্ট্রিং নির্দিষ্ট করতে হবে excludeদ্বারা ব্যবহৃত স্বরলিপি সঙ্গে summary()যখন প্রতিটি মসৃণ শব্দটি সম্পর্কে তথ্য প্রদর্শন করার
গেভিন সিম্পসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.