สำหรับเนื้อเรื่องที่ 1 ฉันสามารถทดสอบการเชื่อมโยงระหว่าง x และ y ได้โดยทำการสหสัมพันธ์อย่างง่าย
สำหรับพล็อต 2 ที่ความสัมพันธ์ไม่เป็นเชิงเส้น แต่มีความสัมพันธ์ที่ชัดเจนระหว่าง x และ y ฉันจะทดสอบความสัมพันธ์และเลเบลลักษณะของมันได้อย่างไร
สำหรับเนื้อเรื่องที่ 1 ฉันสามารถทดสอบการเชื่อมโยงระหว่าง x และ y ได้โดยทำการสหสัมพันธ์อย่างง่าย
สำหรับพล็อต 2 ที่ความสัมพันธ์ไม่เป็นเชิงเส้น แต่มีความสัมพันธ์ที่ชัดเจนระหว่าง x และ y ฉันจะทดสอบความสัมพันธ์และเลเบลลักษณะของมันได้อย่างไร
คำตอบ:
... ความสัมพันธ์ไม่เป็นเชิงเส้น แต่มีความสัมพันธ์ที่ชัดเจนระหว่าง x และ y ฉันจะทดสอบความสัมพันธ์และติดฉลากธรรมชาติของมันได้อย่างไร
วิธีหนึ่งในการทำเช่นนี้จะเป็นเพื่อให้พอดีกับเป็นฟังก์ชั่นประมาณกึ่ง parametrically ของใช้ตัวอย่างเช่นทั่วไปรูปแบบสารเติมแต่งและการทดสอบหรือไม่ว่าการประมาณการการทำงานเป็นค่าคงที่ซึ่งจะแสดงให้เห็นความสัมพันธ์ระหว่างและxวิธีการนี้ทำให้คุณปลอดจากการทำพหุนามถดถอยและบางครั้งการตัดสินใจโดยพลการเกี่ยวกับคำสั่งของพหุนามเป็นต้น
หากคุณมีข้อสังเกตคุณสามารถใส่โมเดลได้:
และทดสอบสมมติฐานx ในคุณสามารถทำได้โดยใช้ฟังก์ชั่น หากเป็นผลลัพธ์ของคุณและเป็นตัวทำนายของคุณคุณสามารถพิมพ์:R
gam()
y
x
library(mgcv)
g <- gam(y ~ s(x))
พิมพ์ดีดsummary(g)
จะให้ผลการทดสอบสมมติฐานดังกล่าวข้างต้น เท่าที่อธิบายลักษณะของความสัมพันธ์สิ่งนี้จะทำได้ดีที่สุดกับเนื้อเรื่อง วิธีหนึ่งในการทำสิ่งนี้ในR
(สมมติว่ามีการป้อนรหัสด้านบนแล้ว)
plot(g,scheme=2)
หากตัวแปรการตอบสนองของคุณไม่ต่อเนื่อง (เช่นไบนารี) คุณสามารถรองรับได้ภายในกรอบการทำงานนี้โดยใส่ GAM logistic ที่เหมาะสม (ในR
คุณจะต้องเพิ่มfamily=binomial
การเรียกของคุณgam
) นอกจากนี้ถ้าคุณมีพยากรณ์หลายท่านอาจรวมถึงแง่สารเติมแต่งหลาย ๆ (หรือข้อตกลงเชิงเส้นสามัญ) หรือพอดีกับฟังก์ชั่นหลายตัวแปรเช่นถ้าคุณมีการพยากรณ์ ความซับซ้อนของความสัมพันธ์จะถูกเลือกโดยอัตโนมัติโดยการตรวจสอบข้ามถ้าคุณใช้วิธีการเริ่มต้นแม้ว่าจะมีความยืดหยุ่นมากที่นี่ - ดูไฟล์ช่วยเหลือหากสนใจx, z
gam
หากความสัมพันธ์ที่ไม่เป็นเชิงเส้นมีความสัมพันธ์แบบโมโนโพนิค (Rho's Spearman) จะเหมาะสม ในตัวอย่างของคุณมีพื้นที่เล็ก ๆ ที่ชัดเจนที่มีการเปลี่ยนแปลงเส้นโค้งจาก monotoncally ที่เพิ่มขึ้นเพื่อ montonically ลดลงเช่นพาราโบลาจะทำในจุดที่อนุพันธ์แรกเท่ากับ0
ฉันคิดว่าถ้าคุณมีความรู้ในการสร้างแบบจำลอง (นอกเหนือจากข้อมูลเชิงประจักษ์) ที่จุดเปลี่ยนนั้นเกิดขึ้น (พูดที่ ) จากนั้นคุณสามารถอธิบายความสัมพันธ์เป็นบวกและใช้ Rho ของ Spearman กับชุดของคู่โดยที่เพื่อให้การประมาณการของความสัมพันธ์ที่และใช้ประมาณการอีกหนึ่งของความสัมพันธ์สเปียร์แมนสำหรับที่ความสัมพันธ์เป็นลบ การประมาณทั้งสองนี้จะอธิบายลักษณะโครงสร้างความสัมพันธ์ระหว่างและและไม่เหมือนกับการประมาณค่าความสัมพันธ์ซึ่งจะใกล้เคียงเมื่อประมาณการโดยใช้ข้อมูลทั้งหมดการประมาณการเหล่านี้จะมีขนาดใหญ่และตรงข้ามกับเครื่องหมาย( x , Y ) x < x > x Y 0
บางคนอาจโต้แย้งว่าเพียงข้อมูลเชิงประจักษ์ ( เช่นคู่ที่สังเกตก็เพียงพอที่จะพิสูจน์สิ่งนี้
คุณสามารถทดสอบการพึ่งพาใด ๆ โดยใช้การทดสอบความสัมพันธ์ของระยะทาง ดูที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสัมพันธ์ของระยะทาง: ทำความเข้าใจเกี่ยวกับการคำนวณความสัมพันธ์ของระยะทาง
และนี่คือกระดาษต้นฉบับ: https://arxiv.org/pdf/0803.4101.pdf
ใน R จะมีการใช้งานในenergy
แพ็คเกจพร้อมกับdcor.test
ฟังก์ชั่น
มีคนแก้ไขฉันถ้าความเข้าใจของฉันผิดที่นี่ แต่วิธีหนึ่งในการจัดการกับตัวแปรที่ไม่ใช่เชิงเส้นคือใช้การประมาณเชิงเส้น ตัวอย่างเช่นการบันทึกการแจกแจงแบบเอ็กซ์โพเนนเชียลควรอนุญาตให้คุณจัดการกับตัวแปรเป็นการแจกแจงแบบปกติ มันอาจถูกใช้เพื่อแก้ปัญหาเช่นการถดถอยเชิงเส้นใด ๆ
ฉันเคยใช้โมเดลเสริมทั่วไปเพื่อตรวจจับความสัมพันธ์ที่ไม่ใช่เชิงเส้นระหว่างตัวแปรสองตัว แต่เมื่อเร็ว ๆ นี้ฉันได้ค้นพบความสัมพันธ์ที่ไม่เกี่ยวข้องกับเส้นตรงที่นำมาใช้ผ่านnlcor
แพ็คเกจใน R คุณสามารถใช้วิธีนี้ในลักษณะเดียวกับ Pearson correlation สัมประสิทธิ์สหสัมพันธ์อยู่ระหว่าง 0 ถึง 1 และไม่ใช่ -1 และ 1 เช่นเดียวกับ Pearson correlation ค่าสัมประสิทธิ์สหสัมพันธ์ที่สูงขึ้นหมายถึงการดำรงอยู่ของความสัมพันธ์ที่ไม่ใช่เชิงเส้นที่แข็งแกร่ง สมมติว่าเป็นอนุกรมเวลาสองค่าx2
และy2
การทดสอบความสัมพันธ์แบบไม่เชิงเส้นระหว่างอนุกรมเวลาสองชุดมีดังนี้
install.packages("devtools")
library(devtools)
install_github("ProcessMiner/nlcor")
library(nlcor)
c <- nlcor(x2, y2, plt = T)
c$cor.estimate
[1] 0.897205
ดูเหมือนว่าตัวแปรสองตัวนั้นมีความสัมพันธ์กันอย่างมากผ่านความสัมพันธ์แบบไม่เชิงเส้นคุณยังสามารถรับค่า p-value ที่ปรับปรุงสำหรับค่าสัมประสิทธิ์สหสัมพันธ์
c$adjusted.p.value
[1] 0
คุณสามารถพล็อตผลลัพธ์
print(c$cor.plot)
คุณสามารถดูลิงค์นี้สำหรับรายละเอียดเพิ่มเติม