ฉันเป็นผู้ใช้ที่คุ้นเคยกับ R มากขึ้นและพยายามประเมินความลาดแบบสุ่ม (ค่าสัมประสิทธิ์การเลือก) ประมาณ 35 คนตลอด 5 ปีสำหรับตัวแปรที่อยู่อาศัยสี่ตัว ตัวแปรการตอบสนองคือที่อยู่อาศัย "ที่ใช้" (1) หรือ "พร้อมใช้งาน" (0) ที่อยู่อาศัย ("ใช้" ด้านล่าง)
ฉันใช้คอมพิวเตอร์ Windows 64 บิต
ในรุ่น R 3.1.0 ฉันใช้ข้อมูลและการแสดงออกด้านล่าง PS, TH, RS และ HW เป็นเอฟเฟกต์คงที่ (มาตรฐานระยะทางที่วัดได้กับประเภทที่อยู่อาศัย) lme4 V 1.1-7
str(dat)
'data.frame': 359756 obs. of 7 variables:
$ use : num 1 1 1 1 1 1 1 1 1 1 ...
$ Year : Factor w/ 5 levels "1","2","3","4",..: 4 4 4 4 4 4 4 4 3 4 ...
$ ID : num 306 306 306 306 306 306 306 306 162 306 ...
$ PS: num -0.32 -0.317 -0.317 -0.318 -0.317 ...
$ TH: num -0.211 -0.211 -0.211 -0.213 -0.22 ...
$ RS: num -0.337 -0.337 -0.337 -0.337 -0.337 ...
$ HW: num -0.0258 -0.19 -0.19 -0.19 -0.4561 ...
glmer(use ~ PS + TH + RS + HW +
(1 + PS + TH + RS + HW |ID/Year),
family = binomial, data = dat, control=glmerControl(optimizer="bobyqa"))
glmer ให้การประมาณค่าพารามิเตอร์สำหรับเอฟเฟกต์คงที่ซึ่งสมเหตุสมผลสำหรับฉันและความลาดชันแบบสุ่ม (ซึ่งฉันตีความว่าเป็นสัมประสิทธิ์การเลือกสำหรับที่อยู่อาศัยแต่ละประเภท) ก็สมเหตุสมผลเช่นกันเมื่อฉันตรวจสอบข้อมูลในเชิงคุณภาพ โอกาสในการบันทึกสำหรับรุ่นคือ -3050.8
อย่างไรก็ตามงานวิจัยส่วนใหญ่เกี่ยวกับนิเวศวิทยาของสัตว์ไม่ได้ใช้ R เพราะด้วยข้อมูลตำแหน่งของสัตว์ความสัมพันธ์เชิงพื้นที่สัมพันธ์สามารถทำให้ข้อผิดพลาดมาตรฐานมีแนวโน้มที่จะพิมพ์ผิดพลาดได้ ในขณะที่ R ใช้ข้อผิดพลาดมาตรฐานที่ยึดตามแบบจำลองควรใช้ข้อผิดพลาดมาตรฐานเชิงประจักษ์ (เช่น Huber-white หรือ Sandwich)
ในขณะที่ R ไม่ได้เสนอตัวเลือกนี้ (ตามความรู้ของฉัน - โปรดแก้ไขให้ฉันถ้าฉันผิด), SAS ทำ - แม้ว่าฉันจะไม่สามารถเข้าถึง SAS เพื่อนร่วมงานได้ตกลงที่จะให้ฉันยืมคอมพิวเตอร์เพื่อตรวจสอบว่าข้อผิดพลาดมาตรฐาน เปลี่ยนแปลงอย่างมีนัยสำคัญเมื่อใช้วิธีการทดลอง
อันดับแรกเราต้องการให้แน่ใจว่าเมื่อใช้ข้อผิดพลาดมาตรฐานแบบจำลอง SAS จะสร้างการประมาณการที่คล้ายกันกับ R - เพื่อให้แน่ใจว่าแบบจำลองถูกระบุด้วยวิธีเดียวกันในทั้งสองโปรแกรม ฉันไม่สนใจว่าพวกเขาจะเหมือนกัน - คล้ายกัน ฉันลอง (SAS V 9.2):
proc glimmix data=dat method=laplace;
class year id;
model use = PS TH RS HW / dist=bin solution ddfm=betwithin;
random intercept PS TH RS HW / subject = year(id) solution type=UN;
run;title;
ฉันลองแบบฟอร์มอื่น ๆ อีกมากมายเช่นการเพิ่มบรรทัด
random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;
ฉันพยายามโดยไม่ระบุ
solution type = UN,
หรือแสดงความคิดเห็น
ddfm=betwithin;
ไม่ว่าเราจะระบุรุ่นอย่างไร (และเราลองมาหลายวิธีแล้ว) ฉันไม่สามารถสุ่มลาดใน SAS เพื่อคล้ายกับเอาต์พุตเหล่านั้นจาก R - จากระยะไกลถึงแม้ว่าเอฟเฟกต์คงที่จะคล้ายกัน และเมื่อฉันหมายถึงความแตกต่างฉันหมายถึงว่าแม้จะมีอาการไม่เหมือนกัน โอกาสในการเข้าสู่ระบบ -2 ใน SAS คือ 71344.94
ฉันไม่สามารถอัพโหลดชุดข้อมูลแบบเต็มได้ ดังนั้นฉันจึงสร้างชุดข้อมูลของเล่นที่มีบันทึกจากบุคคลสามคนเท่านั้น SAS ให้ผลลัพธ์ในไม่กี่นาที ใน R ใช้เวลากว่าหนึ่งชั่วโมง แปลก. ด้วยชุดข้อมูลของเล่นนี้ฉันได้รับการประมาณการที่แตกต่างกันสำหรับเอฟเฟกต์คงที่
คำถามของฉัน: ทุกคนสามารถให้ความกระจ่างเกี่ยวกับสาเหตุที่การประมาณค่าความชันแบบสุ่มอาจแตกต่างกันอย่างมากระหว่าง R และ SAS มีอะไรที่ฉันสามารถทำได้ใน R หรือ SAS เพื่อแก้ไขโค้ดของฉันเพื่อให้การโทรนั้นให้ผลลัพธ์ที่คล้ายกัน? ฉันต้องการเปลี่ยนรหัสใน SAS เนื่องจากฉัน "เชื่อ" R ของฉันประมาณมากกว่า
ฉันกังวลกับความแตกต่างเหล่านี้และต้องการไปที่จุดต่ำสุดของปัญหานี้!
เอาต์พุตของฉันจากชุดข้อมูลของเล่นที่ใช้เพียงสามใน 35 บุคคลในชุดข้อมูลแบบเต็มสำหรับ R และ SAS จะรวมอยู่ใน jpegs
แก้ไขและอัปเดต:
เนื่องจาก @JakeWestfall ช่วยให้ค้นพบความลาดชันใน SAS ไม่รวมถึงผลกระทบคงที่ เมื่อฉันเพิ่มเอฟเฟกต์คงที่นี่คือผลลัพธ์ - การเปรียบเทียบความชัน R กับความชัน SAS สำหรับเอฟเฟกต์คงที่หนึ่ง "PS" ระหว่างโปรแกรม: (สัมประสิทธิ์การเลือก = ความชันสุ่ม) บันทึกการเปลี่ยนแปลงที่เพิ่มขึ้นใน SAS
0
s และ1
s R
จะจำลองความน่าจะเป็นของการตอบสนอง "1" ในขณะที่ SAS จะจำลองความน่าจะเป็นของการตอบสนอง "0" ที่จะทำให้ SAS รูปแบบน่าจะเป็นของ "1" use(event='1')
คุณจะต้องเขียนตัวแปรการตอบสนองของคุณเป็น แน่นอนว่าแม้จะไม่ทำสิ่งนี้ฉันเชื่อว่าเราควรคาดหวังความแตกต่างของเอฟเฟกต์แบบสุ่มเหมือนกันเช่นเดียวกับการประเมินผลคงที่แบบเดียวกันแม้ว่าจะมีสัญญาณกลับกันก็ตาม
ranef()
coef()
อดีตให้เอฟเฟกต์แบบสุ่มจริงขณะที่ส่วนหลังให้เอฟเฟกต์แบบสุ่มพร้อมกับเวกเตอร์เอฟเฟกต์คงที่ ดังนั้นนี่จึงเป็นเหตุผลว่าทำไมตัวเลขที่แสดงในโพสต์ของคุณจึงแตกต่างกัน แต่ยังมีความคลาดเคลื่อนเหลืออยู่มากมายที่ฉันไม่สามารถอธิบายได้ทั้งหมด
ID
ไม่ใช่ปัจจัยใน R; ตรวจสอบและดูว่ามีการเปลี่ยนแปลงอะไร