ทำนายค่าหลังจากเรียกใช้ฟังก์ชัน mlogit ใน R


11

นี่คือสิ่งที่ฉันต้องการทำ แต่ดูเหมือนจะไม่มีpredictวิธีสำหรับ mlogit ความคิดใด ๆ

library(mlogit)
data("Fishing", package = "mlogit")
Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")

Fish_fit<-Fish[-1,]
Fish_test<-Fish[1,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)

4
คุณเคยอ่านบทความสั้น ๆ เกี่ยวกับการประเมินโมเดลโลจิคัลหลายช่องใน R: The mlogit Packageหรือไม่? ดูเหมือนว่าคุณจะต้องใช้ค่าสัมประสิทธิ์ที่พอดีกับข้อมูลใหม่ใช่ไหม?
chl

@chl นั่นคือสิ่งที่ฉันต้องทำใช่ แต่ฉันหวังว่าฉันจะไม่ต้องคิดค้นล้อใหม่อีกครั้ง
ซัค

คำตอบ:


2

นี่คือเคล็ดลับที่มีประโยชน์: เพิ่มข้อมูลที่คุณต้องการคาดการณ์ลงในตัวอย่างการประมาณค่าดั้งเดิมของคุณ แต่ใช้ตัวแปรน้ำหนักเพื่อตั้งค่าน้ำหนักของการสังเกตการณ์ใหม่เหล่านั้น ประเมินโมเดล (ด้วยการสังเกตใหม่ซึ่งมีน้ำหนักเป็นศูนย์) และรับการทำนายจากผลลัพธ์ "ความน่าจะเป็น" ด้วยวิธีนี้คุณสามารถข้ามฟังก์ชันคาดการณ์ซึ่งเป็นระเบียบ


6

แพ็คเกจ mlogit มีเมธอดทำนาย () อย่างน้อยในเวอร์ชันที่ฉันใช้ (0.2-3 กับ R 2.15.3)

รหัสที่ใส่โดย @Zach มีข้อผิดพลาดหนึ่งข้อ ข้อมูล "รูปแบบยาว" ที่ใช้โดย mlogit () มีหนึ่งแถวสำหรับแต่ละทางเลือก นี่เป็นรูปแบบที่สร้างโดยฟังก์ชัน mlogit.data () ดังนั้นเพื่อให้ได้คำทำนายสำหรับกรณีแรกคุณต้องดึงแถวทั้งหมดออกสำหรับกรณีนั้นและมี 4:

Fish_fit<-Fish[-(1:4),]
Fish_test<-Fish[1:4,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)

ซึ่งให้ผลลัพธ์ที่ดี


4

หลังจากใช้ความพยายามอย่างมากในการพยายามใช้ฟังก์ชันทำนายสำหรับประชากรฉันคิดว่าฉันสามารถเพิ่มความเข้าใจให้กับคำตอบทั้งหมดของคุณ

predictการทำงานของ mlogit ทำงานได้ดีคุณก็ต้องทำการปรับเปลี่ยนบางอย่างและให้แน่ใจว่าสิ่งต่อไปนี้ได้รับการดูแล:

  1. newdata(ตามคาด) ควรจะรวมถึงว่าข้อมูลเช่นเดียวกับกลุ่มตัวอย่างที่ใช้ในการประมาณค่าของรูปแบบ ซึ่งหมายความว่าควรตรวจสอบคุณสมบัติ "ซ่อน" ของข้อมูล (เช่นfactorที่สืบทอดระดับที่ไม่มีอยู่ - droplevelอาจเป็นประโยชน์ในกรณีนี้ - หรือไม่แนะนำในตัวอย่างปัจจัยหรือผิดcolnameฯลฯ )

  2. คุณต้องเลือกอย่างอิสระในข้อมูลใหม่ของคุณ (หากไม่มี) สิ่งที่สามารถทำได้อย่างง่ายดายโดยใช้sampleฟังก์ชั่น:

    MrChoice <-sample(c("Car", "Bus", "Walk"),nrow(datase),replace=TRUE, prob = c(0.5, 0.4, 0.1))
    mynewData$mode<-MrChoice
  3. ขั้นตอนที่จำเป็นต่อไปคือการแปลงข้อมูลเป็น mlogit data อีกครั้งโดยใช้ฟังก์ชั่นเดียวกับที่ใช้สำหรับข้อมูลตัวอย่างเช่น:

    ExpData3<- mlogit.data(mynewData, shape="wide", choice = "mode",sep=".",id = "TripID")
  4. ขั้นตอนสุดท้ายคือการคาดการณ์จริงโดยใช้predictฟังก์ชั่น

    resulted<-predict(ml1,newdata=ExpData3)

2

เพื่อตอบคำถามของฉันฉันได้ย้ายไปใช้แพ็คเกจ 'glmnet' เพื่อให้พอดีกับการบันทึกแบบมัลติโนเมียลของฉันซึ่งมีข้อได้เปรียบเพิ่มเติมจากการใช้ lasso หรือ elastic net เพื่อทำให้ตัวแปรอิสระของฉันเป็นปกติ ดูเหมือนว่า glmnet จะเป็นแพ็คเกจ 'เสร็จสิ้น' มากกว่า mlogit พร้อมด้วยฟังก์ชัน 'ทำนาย'


1

mlogitมีฟังก์ชั่นคาดการณ์ แต่ฉันพบว่ามันใช้งานยากมาก ฉันเขียนชุดฟังก์ชั่นที่น่าเกลียดมากสำหรับการใช้งานที่ฉันมี ทุกคนยินดีที่จะใช้หรือปรับปรุงพวกเขาเก็บไว้ในโปรไฟล์GitHubของฉัน


0

ฉันค่อนข้างแน่ใจว่าสิ่งนี้ทำได้อย่างง่ายดายด้วยแพ็คเกจ mlogit ที่กำหนดโดยใช้ฟังก์ชั่นที่ติดตั้งแล้วจากนั้นฟังก์ชั่น R ทำนายมาตรฐาน ตามที่ chl ชี้ให้เห็นถึงแม้ว่าฉันยังไม่ได้ทำมันเอง (อย่างน้อยก็ไม่ได้คาดการณ์) แต่ก็มีการตรวจสอบแพ็กเกจ vignettes ที่นี่ในหน้า 29


1
บทความสั้น ๆ ที่เรียบง่าย ในทางปฏิบัติฉันไม่สามารถหาวิธีนำไปใช้กับข้อมูลใหม่ได้ ดังนั้นฉันจึงเขียนโค้ดของตัวเองเชื่อมโยงด้านล่าง
gregmacfarlane
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.