การแปลงตัวแปรสำหรับการถดถอยหลายครั้งใน R


26

ฉันพยายามทำการถดถอยหลายRครั้ง อย่างไรก็ตามตัวแปรตามของฉันมีพล็อตต่อไปนี้:

DV

นี่คือเมทริกซ์ scatterplot พร้อมตัวแปรทั้งหมดของฉัน ( WARเป็นตัวแปรตาม):

SPLOM

ฉันรู้ว่าฉันต้องทำการเปลี่ยนแปลงในตัวแปรนี้ (และอาจเป็นตัวแปรอิสระหรือไม่?) แต่ฉันไม่แน่ใจว่าจำเป็นต้องมีการแปลงที่แน่นอนหรือไม่ ใครบางคนชี้ให้ฉันในทิศทางที่ถูกต้อง? ฉันยินดีที่จะให้ข้อมูลเพิ่มเติมเกี่ยวกับความสัมพันธ์ระหว่างตัวแปรอิสระและตัวแปรตาม

กราฟิกการวินิจฉัยจากการถดถอยของฉันมีลักษณะดังนี้:

แปลงวินิจฉัย

แก้ไข

หลังจากเปลี่ยนตัวแปรตามและอิสระโดยใช้การแปลง Yeo-Johnson แผนการวินิจฉัยมีลักษณะดังนี้:

หลังจากเปลี่ยนรูป

ถ้าฉันใช้ GLM กับลิงค์ล็อกกราฟิกวินิจฉัยคือ:

GLM พร้อมลิงค์บันทึก


3
สวัสดี @ zglaa1 และยินดีต้อนรับ ทำไมคุณคิดว่าคุณต้องเปลี่ยนตัวแปร? ขั้นตอนแรกคือการปรับให้พอดีกับการถดถอยกับ varibales ดั้งเดิมแล้วมองที่พอดี (เหลือ ฯลฯ ) ส่วนที่เหลือควรกระจายตามปกติประมาณไม่ตัวแปร บางทีคุณอาจพบว่าโพสต์นี้น่าสนใจ
COOLSerdash

ขอบคุณสำหรับลิงก์และคำแนะนำ ฉันเรียกใช้การถดถอยของฉันและฉันรู้ว่าตัวแปรจำเป็นต้องถูกแปลงตามพล็อตต่อไปนี้: i.imgur.com/rbmu14M.jpg ฉันเห็นความเป็นกลางและขาดความแปรปรวนคงที่ในส่วนที่เหลือ นอกจากนี้พวกเขาไม่ปกติ
zgall1

@COOLSerdash ฉันลองดูที่ลิงค์ ฉันมีภูมิหลังพื้นฐานทางสถิติดังนั้นฉันจึงเข้าใจการสนทนา อย่างไรก็ตามปัญหาของฉันคือฉันมีประสบการณ์ จำกัด กับการใช้เทคนิคจริง ๆ ที่ฉันได้เรียนรู้มาแล้วดังนั้นฉันจึงพยายามหาว่าฉันต้องทำอะไรกับข้อมูลของฉัน (ทั้งใน Excel หรือ R) เพื่อทำการแปลงที่จำเป็นจริงๆ
zgall1

ขอบคุณสำหรับกราฟิก คุณพูดถูกว่าอย่างนี้พอดี คุณช่วยสร้างเมทริกซ์ scatterplot ด้วย DV และ IV ในการถดถอยได้ไหม? สามารถทำได้Rด้วยคำสั่งpairs(my.data, lower.panel = panel.smooth)ที่my.dataจะเป็นชุดข้อมูลของคุณ
COOLSerdash

2
lmboxcox(my.lm.model)MASSλ

คำตอบ:


30

จอห์นฟ็อกซ์หนังสืออาสหายกับการถดถอยประยุกต์เป็น Ressource Rที่ดีในการสร้างแบบจำลองการถดถอยการประยุกต์ใช้กับ แพคเกจcarที่ฉันใช้ตลอดในคำตอบนี้คือแพ็คเกจที่แนบมาด้วย หนังสือเล่มนี้ยังมีเว็บไซต์ที่มีบทเพิ่มเติม


การแปลงการตอบสนอง (หรือที่รู้จักว่าตัวแปรขึ้นอยู่กับผลลัพธ์)

RlmboxCoxcarλfamily="yjPower"

boxCox(my.regression.model, family="yjPower", plotit = TRUE)

สิ่งนี้สร้างพล็อตเหมือนกับที่ต่อไปนี้:

Box-Cox lambdaplot

λλ

ในการแปลงตัวแปรตามของคุณทันทีให้ใช้ฟังก์ชันyjPowerจากcarแพ็คเกจ:

depvar.transformed <- yjPower(my.dependent.variable, lambda)

lambdaλboxCox

สำคัญ:แทนที่จะเปลี่ยนตัวแปรที่ต้องอาศัยการบันทึกคุณควรพิจารณาให้พอดีกับ GLM กับลิงค์ล็อก นี่คือการอ้างอิงบางอย่างที่ให้ข้อมูลเพิ่มเติมคือ: ครั้งแรก , สอง , สาม ในการทำสิ่งนี้Rให้ใช้glm:

glm.mod <- glm(y~x1+x2, family=gaussian(link="log"))

ที่yเป็นตัวแปรขึ้นอยู่กับคุณและx1, x2ฯลฯ เป็นตัวแปรอิสระของคุณ


การแปลงตัวทำนาย

การเปลี่ยนแปลงของตัวทำนายเชิงบวกที่เข้มงวดสามารถประเมินได้โดยความเป็นไปได้สูงสุดหลังจากการเปลี่ยนแปลงของตัวแปรตาม ในการทำเช่นนั้นให้ใช้ฟังก์ชั่นboxTidwellจากcarแพ็คเกจ (สำหรับกระดาษต้นฉบับดูที่นี่ ) ใช้มันเหมือนที่: boxTidwell(y~x1+x2, other.x=~x3+x4). สิ่งสำคัญที่นี่คือตัวเลือกที่other.xระบุเงื่อนไขของการถดถอยที่จะไม่ถูกแปลง นี่จะเป็นตัวแปรเด็ดขาดทั้งหมดของคุณ ฟังก์ชันสร้างผลลัพธ์ของฟอร์มต่อไปนี้:

boxTidwell(prestige ~ income + education, other.x=~ type + poly(women, 2), data=Prestige)

          Score Statistic   p-value MLE of lambda
income          -4.482406 0.0000074    -0.3476283
education        0.216991 0.8282154     1.2538274

incomeλincomeincomenew=1/incomeold

อีกประการหนึ่งที่น่าสนใจมากโพสต์ในเว็บไซต์เกี่ยวกับการเปลี่ยนแปลงของตัวแปรอิสระที่เป็นคนนี้


ข้อเสียของการเปลี่ยนแปลง

1/yλλ


การสร้างแบบจำลองความสัมพันธ์ที่ไม่เชิงเส้น

ทั้งสองวิธีมีความยืดหยุ่นมากทีเดียวที่จะความสัมพันธ์ที่ไม่เป็นเชิงเส้นพอดีมีหลายชื่อเศษส่วนและเส้นโค้ง เหล่านี้สามเอกสารมีการแนะนำที่ดีมากที่จะทั้งสองวิธี: ครั้งแรก , ครั้งที่สองและสาม นอกจากนี้ยังมีทั้งหนังสือRเกี่ยวกับพหุนามและเศษส่วน R แพคเกจmfpการดำเนินการหลายตัวแปรพหุนามเศษส่วน งานนำเสนอนี้อาจมีข้อมูลเกี่ยวกับพหุนามเศษส่วน เพื่อให้พอดีกับเส้นโค้งคุณสามารถใช้ฟังก์ชั่นgam(รุ่นเสริมทั่วไปดูที่นี่สำหรับการแนะนำที่ยอดเยี่ยมด้วยR) จากแพ็คเกจmgcvหรือฟังก์ชั่นns(เส้นโค้งธรรมชาติลูกบาศก์) และbs(ลูกบาศก์ B- เส้นโค้ง) จากแพ็คเกจsplines(ดูที่นี่สำหรับตัวอย่างของการใช้ฟังก์ชันเหล่านี้) การใช้gamคุณสามารถระบุตัวทำนายที่คุณต้องการให้พอดีกับการใช้เส้นโค้งโดยใช้s()ฟังก์ชั่น:

my.gam <- gam(y~s(x1) + x2, family=gaussian())

ที่นี่x1จะได้รับการติดตั้งโดยใช้เส้นโค้งและx2เป็นเส้นตรงในการถดถอยเชิงเส้นปกติ ภายในgamคุณสามารถระบุตระกูลการแจกจ่ายและฟังก์ชันลิงก์glmได้ ดังนั้นเพื่อให้พอดีกับรุ่นที่มีฟังก์ชั่นการเข้าสู่ระบบการเชื่อมโยงคุณสามารถระบุตัวเลือกfamily=gaussian(link="log")ในเช่นเดียวกับในgamglm

ดูที่โพสต์นี้จากเว็บไซต์


1
คำอธิบายที่ดี ฉันไม่ทราบว่า Box-Cox อย่างชัดเจนเป็นวิธีการทั่วไปในการเลือกการแปลง หากคุณนับคนที่เลือกบันทึกด้วยวิธีใดก็ตามฉันเดาได้เลยว่ามันเป็นวิธีการของชนกลุ่มน้อย จุดพิถีพิถันนั้นไม่ส่งผลกระทบอะไรเลย
Nick Cox

@NickCox ขอบคุณ (+1 สำหรับคำตอบของคุณ btw) คำแถลงว่า Box-Cox เป็นวิธีการที่พบบ่อยที่สุดมาจากหนังสือของ John Fox ฉันเอามันมาที่มูลค่าเนื่องจากฉันไม่มีประสบการณ์เพียงพอที่จะตัดสินแถลงการณ์ ฉันจะลบคำสั่ง
COOLSerdash

ขอบคุณมากสำหรับคำอธิบายโดยละเอียด ฉันจะลองและนำไปใช้กับข้อมูลของฉันตอนนี้
zgall1

@COOLSerdash โดยใช้คำแนะนำแบบละเอียดของคุณฉันใช้การแปลง Box Cox กับตัวแปรอิสระและตัวแปรอิสระและมีพล็อตตัวแปรการวินิจฉัยของฉันต่อไปนี้ - i.imgur.com/eO01djl.jpgเห็นได้ชัดว่ามีการปรับปรุง แต่ดูเหมือนว่ายังคงมี เป็นปัญหาเกี่ยวกับความแปรปรวนอย่างต่อเนื่องและความเป็นกลางและมีปัญหากับภาวะปกติ ฉันจะไปจากที่นี่ได้ที่ไหน
zgall1

1
@ zgall1 ขอบคุณสำหรับความคิดเห็นของคุณฉันขอขอบคุณ หืมใช่การเปลี่ยนแปลงไม่ได้ช่วยอะไรมากมาย :) ณ จุดนี้ผม probabily จะพยายามที่จะใช้เส้นโค้งสำหรับการพยากรณ์โดยใช้แบบจำลองทั่วไปสารเติมแต่ง (Gams) กับแพคเกจและmgcv gamถ้าไม่ช่วยฉันก็อยู่ในจุดสิ้นสุดของฉันฉันก็กลัว มีคนที่นี่ซึ่งมีประสบการณ์มากกว่าฉันและบางทีพวกเขาสามารถให้คำแนะนำเพิ่มเติมแก่คุณได้ ฉันยังไม่รู้เกี่ยวกับกีฬาเบสบอล อาจมีรูปแบบเชิงตรรกะที่เหมาะสมกับข้อมูลเหล่านี้มากขึ้น
COOLSerdash

8

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

โปรดทราบว่าค่าลบสำหรับกฎการตอบสนองจะมีการแปลงลอการิทึมแบบตรง แต่ไม่ใช่ล็อก (การตอบกลับ + ค่าคงที่) และไม่ใช่โมเดลเชิงเส้นทั่วไปที่มีลิงก์ลอการิทึม

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

GLM พร้อมลิงค์บันทึกยังคงเป็นไปได้

หรืออาจเป็นไปได้ว่าแบบจำลองของคุณสะท้อนให้เห็นถึงกระบวนการผสมบางประเภทซึ่งในกรณีนี้รูปแบบที่กำหนดเองซึ่งสะท้อนกระบวนการสร้างข้อมูลอย่างใกล้ชิดจะเป็นแนวคิดที่ดี

(ต่อ)

OP มี WAR ที่ผันแปรได้ซึ่งมีค่าตั้งแต่ประมาณ 100 ถึง -2 เพื่อแก้ไขปัญหาเกี่ยวกับการหาค่าลอการิทึมของค่าศูนย์หรือค่าลบ OP เสนอค่าความผิดพลาดของค่าศูนย์และค่าลบเป็น 0.000001 ขณะนี้อยู่ในระดับลอการิทึม (ฐาน 10) ค่าเหล่านั้นมีตั้งแต่ประมาณ 2 (100 หรือดังนั้น) จนถึง -6 (0.000001) ส่วนน้อยของคะแนน fudged ในระดับลอการิทึมตอนนี้เป็นส่วนน้อยของค่าผิดปกติขนาดใหญ่ ลงจุด log_10 (fudged WAR) กับสิ่งอื่นเพื่อดูสิ่งนี้


ในขณะที่คุณอาจบอกได้จาก scatterplot ที่โพสต์ไว้ด้านบนฉันใช้ชุดข้อมูลสถิติเบสบอล ตัวแปรอิสระ WAR เป็นตัวชี้วัดการสะสมของมูลค่าที่ผู้เล่นมีต่ออาชีพของพวกเขาในระดับเมเจอร์ลีก ตัวแปรอิสระ AdjSLG, SOPct และ BBPct เป็นสถิติของลีกย่อยที่คิดกันโดยทั่วไปว่าจะทำนายความสำเร็จในระดับเมเจอร์ลีก ตัวแปรอายุคืออายุที่ผู้เล่นสร้างสถิติของลีกย่อย ตัวแปรดัมมี่ใช้เพื่อระบุระดับลีกย่อยที่มีการสร้างสถิติ
zgall1

เมื่อพิจารณาถึงปัญหาตัวแปรอิสระ (WAR) เชิงลบด้วยเหตุผลที่ซับซ้อนเล็กน้อยจึงมีเหตุผลที่จะให้รหัสเหล่านั้นเป็นศูนย์อีกครั้งหากทำให้กระบวนการแปลงง่ายขึ้น ภายในกรอบของชุดข้อมูลนี้เป็นขั้นตอนที่สมเหตุสมผล หากคุณต้องการให้ฉันเข้าไปดูรายละเอียดเพิ่มเติม (คำเตือน - จำเป็นต้องใช้ศัพท์แสงเบสบอล) ฉันมีความสุขที่ได้ทำ
zgall1

1
มันดูเหมือนว่าสงครามเป็นของคุณขึ้นอยู่กับตัวแปร คุณให้หลักฐานสำหรับการยืนยันของฉันซึ่งเป็นข้อพิพาทที่อื่นในเว็บไซต์นี้ว่าทั้งสองคำมักจะสับสน คำแนะนำของฉันคือไม่ recode ค่าลบเพื่อศูนย์ (maltreats ข้อมูล) แต่จะใช้ GLM กับลิงค์บันทึก โปรดสมมติความสนใจหรือความรู้ของฉันเกี่ยวกับเบสบอล minutiae ที่ด้านข้างของฉัน
Nick Cox

คุณถูกต้องว่าสงครามเป็นตัวแปรที่ขึ้นอยู่กับฉัน ฉันจะดูเป็น GLM พร้อมลิงค์บันทึก ขอบคุณสำหรับคำแนะนำ.
zgall1

1
อาจเป็นประโยชน์ในการทราบว่าคำนวณอาชีพสงครามอย่างไร (aka เข้าใจกระบวนการสร้างข้อมูล)
เลียนแบบ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.