การกำหนดค่าที่ขาดหายไปสำหรับ PCA


23

ฉันใช้prcomp()ฟังก์ชั่นเพื่อทำการ PCA (การวิเคราะห์องค์ประกอบหลัก) ใน R อย่างไรก็ตามมีข้อผิดพลาดในฟังก์ชั่นดังกล่าวว่าna.actionพารามิเตอร์ไม่ทำงาน ผมขอความช่วยเหลือใน StackOverflow ; สองผู้ใช้มีการเสนอสองวิธีที่แตกต่างกันในการจัดการกับNAค่า อย่างไรก็ตามปัญหาของทั้งสองวิธีคือเมื่อมีNAค่าแถวนั้นจะถูกดร็อปและไม่ถูกพิจารณาในการวิเคราะห์ PCA ชุดข้อมูลจริงของฉันคือเมทริกซ์ 100 x 100 และฉันไม่ต้องการเสียทั้งแถวเพียงเพราะมันมีNAค่าเดียว

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าprcomp()ฟังก์ชั่นไม่ได้คืนองค์ประกอบหลักใด ๆ สำหรับแถว 5 เนื่องจากมันมีNAค่า

d       <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10), 
                      V3 = sample(1:100, 10))
result  <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x                                # $
d$V1[5] <- NA                           # $
result  <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x

ฉันสงสัยว่าฉันสามารถตั้งNAค่าเป็นค่าตัวเลขที่เฉพาะเจาะจงเมื่อcenterและscaleถูกตั้งค่าเพื่อTRUEให้prcomp()ฟังก์ชันทำงานและไม่ลบแถวที่มีNAแต่จะไม่มีผลต่อผลลัพธ์ของการวิเคราะห์ PCA

ฉันคิดเกี่ยวกับการแทนที่NAค่าด้วยค่ามัธยฐานในคอลัมน์เดียวหรือด้วยค่าที่ใกล้เคียงกับ 0 มากที่สุด แต่ฉันไม่แน่ใจว่าสิ่งนั้นมีอิทธิพลต่อการวิเคราะห์ PCA อย่างไร

ใครสามารถคิดวิธีที่ดีในการแก้ปัญหานั้นได้บ้าง


8
ปัญหาของคุณไม่ใช่ปัญหา PCA แต่ปัญหาtrearment ค่าที่ขาดหายไปกว้างขึ้น หากคุณไม่คุ้นเคยกับมันโปรดอ่านนิดหน่อย คุณมีโอกาสมากมาย: (1) ลบรายชื่อตามรายการหรือ (2) เป็นคู่หรือ (3) แทนที่ข้อผิดพลาดด้วยค่าเฉลี่ยหรือค่ามัธยฐาน หรือ (4) แทนที่ด้วยการสุ่มเลือกค่าที่ถูกต้อง (วิธี hot-deck) หรือห้ามการพลาดโดย (5) การถดถอยร่วม (โดยมีหรือไม่มีการเพิ่มเสียง) หรือโดยวิธีการที่ดีกว่า (6) วิธีการ EM
ttnphns

ในขณะที่ความคิดเห็นและคำตอบปรากฏขึ้นกุญแจสำคัญในการได้รับคำตอบที่ดีคือการอธิบายว่าNAคุณค่าหมายถึงอะไร : สาเหตุของการหายไปคืออะไร?
whuber

2
ฉันคิดว่าแพคเกจ "pcaMethods" สามารถแก้ปัญหาของคุณได้ ( ที่นี่ )
ToNoY

คำตอบ:


22

มีวิธีการจัดทำเอกสารที่ดีในการจัดการกับเมทริกซ์ที่มีความสุข - คุณสามารถสลายเมทริกซ์ความแปรปรวนร่วมสร้างจากข้อมูลของคุณCซึ่งถูกปรับสัดส่วนด้วยจำนวนค่าที่ใช้ร่วมกัน n : C = 1Xn

C=1nXTX,                CJล.=X.JY.ล.¯

จากนั้นจึงขยายค่าสัมประสิทธิ์หลักผ่านช่องสี่เหลี่ยมที่น้อยที่สุด (ตามที่ @ user969113 กล่าวถึง) นี่คือตัวอย่าง

อย่างไรก็ตามมีปัญหาหลายอย่างเกี่ยวกับวิธีการนี้ที่เกี่ยวข้องกับความจริงที่ว่าเมทริกซ์ความแปรปรวนร่วมไม่แน่นอนแน่นอนอีกต่อไปและค่า eigen / เอกพจน์มีแนวโน้มที่จะพองตัว บทวิจารณ์ที่ดีเกี่ยวกับปัญหาเหล่านี้สามารถพบได้ในBeckers และ Rixen (2003)ซึ่งพวกเขายังเสนอวิธีการแก้ไขช่องว่างที่ขาดหายไปอย่างเหมาะสมที่สุด - DINEOF (ฟังก์ชั่นการแก้ไขมุมฉากข้อมูลเชิงประจักษ์) ฉันเพิ่งเขียนฟังก์ชั่นที่ใช้ DINEOFและดูเหมือนว่าจะเป็นวิธีที่ดีกว่ามาก คุณสามารถดำเนินการ DINEOF บนของชุดโดยตรงแล้วใช้ชุดข้อมูลที่เป็นหยันใส่ลงในXprcomp

ปรับปรุง

ตัวเลือกอื่นสำหรับการทำ PCA บนชุดข้อมูลที่มีความสุขก็คือ นอกจากนี้ยังแก้ไขปัญหาบางอย่างด้วยวิธีกำลังสองน้อยที่สุดและคำนวณได้เร็วกว่า DINEOF โพสต์นี้เปรียบเทียบทั้งสามวิธีในแง่ของความแม่นยำของการสร้างข้อมูลใหม่โดยใช้พีซี

อ้างอิง

Beckers, Jean-Marie และ M. Rixen "การคำนวณ EOF และการเติมข้อมูลจากชุดข้อมูล Oceanographic ที่ไม่สมบูรณ์" วารสารเทคโนโลยีบรรยากาศและมหาสมุทร 20.12 (2546): 1839-1856

เทย์เลอร์, M. , Losch, M. , Wenzel, M. , & Schröter, J. (2013) เกี่ยวกับความไวของการสร้างสนามใหม่และการทำนายโดยใช้ฟังก์ชั่นมุมฉากเชิงประจักษ์ซึ่งได้มาจากข้อมูล gappy วารสารสภาพภูมิอากาศ, 26 (22), 9194-9205


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

ขอบคุณ @whuber - ฉันเชื่อว่าวิธีนี้มีข้อดีมากมายเช่นกัน แม้ว่าคุณจะไม่สนใจค่า interpolated แต่วิธีนี้ดีกว่าการอธิบาย EOFs / PCs สำหรับชุดข้อมูลเช่นข้อผิดพลาดระหว่างข้อมูลที่สร้างขึ้นใหม่และต้นฉบับจะถูกย่อให้เล็กสุดผ่านอัลกอริธึม
Marc ในกล่อง

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

@whuber - คุณอาจสนใจบทความต่อไปนี้ที่อธิบายขั้นตอนการปรับความแปรปรวนแบบเมทริกซ์ซ้ำซ้อนแบบใกล้เคียงกับข้อมูลที่เบาบาง: Bien, Jacob และ Robert J. Tibshirani "การประมาณค่าแบบกระจัดกระจายของเมทริกซ์ความแปรปรวนร่วม" Biometrika 98.4 (2011): 807-820
Marc ในกล่อง

ขอบคุณ @Marc น่าเสียดายที่การเซ็นเซอร์และการเว้นวรรคเป็นสองสิ่งที่แตกต่างกันซึ่งมีความกังวลต่างกัน
whuber

6

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

ถัดไปหากมีข้อมูลขาดหายไปคุณควรพิจารณาว่าข้อมูลนั้นหายไปโดยการสุ่มสุ่มขาดหายไปหรือไม่สุ่ม ฉันขอแนะนำการใส่หลายครั้งในสองกรณีแรกและบางครั้งในกรณีที่สาม - หากข้อมูลไม่ถูกบิดเบือนอย่างมากจากสถานะ NMAR ของฉันฉันคิดว่าการใส่หลายครั้งจะดีกว่าการลบแบบรายการ (Joe Schafer แห่ง Penn State ได้ทำ ทำงานมากกับข้อมูลที่ขาดหายไป - ฉันจำได้ว่างานของเขาแสดงให้เห็นว่าการใส่ร้ายหลายครั้งทำงานได้ค่อนข้างดีแม้ในบางกรณีของ NMAR) อย่างไรก็ตามถ้าข้อมูลเป็น MCAR หรือ MAR คุณสมบัติของการใส่หลาย ๆ สามารถพิสูจน์ได้

หากคุณตัดสินใจที่จะใช้ MI โปรดทราบหนึ่งข้อด้วยความระมัดระวังเนื่องจากสัญญาณของส่วนประกอบใน PCA นั้นไม่มีกฎเกณฑ์และการเปลี่ยนแปลงเล็กน้อยของข้อมูลสามารถพลิกสัญญาณได้ จากนั้นเมื่อคุณทำ PCA คุณจะได้รับเรื่องไร้สาระ นานมาแล้วที่ฉันหาทางออกใน SAS - มันไม่ยาก แต่เป็นสิ่งที่ต้องระวัง


1

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


3
ฉัน googled สำหรับ PCA และข้อมูลที่หายไปและพบว่า: 4.2 SIMCA รับมือกับข้อมูลที่หายไปได้อย่างไร ใส่อัลกอริธึม NIPALS เพียงแค่แทรกจุดหายไปโดยใช้กำลังสองน้อยที่สุด แต่ให้ข้อมูลที่ขาดหายไปโดยไม่มีผลกับโมเดล การวนซ้ำอย่างต่อเนื่องจะปรับแต่งค่าที่หายไปโดยเพียงแค่คูณคะแนนและการโหลดสำหรับจุดนั้น มีวิธีการต่าง ๆ มากมายสำหรับข้อมูลที่ขาดหายไปเช่นการประมาณค่า แต่โดยทั่วไปแล้วพวกมันจะรวมกันเป็นโซลูชันเดียวกัน ข้อมูลที่ขาดหายไปเป็นที่ยอมรับหากมีการกระจายแบบสุ่ม ระบบบล็อกของข้อมูลที่หายไปเป็นปัญหา
user969113

1
ฉันไม่รู้ว่าคุณหมายถึงอะไรโดยไม่มีอิทธิพลต่อโมเดล ตัวเลือกค่าที่หายไปสำหรับพิกัดจะมีผลกับส่วนประกอบหลัก
Michael R. Chernick

1

กระดาษที่ผ่านมาซึ่งความคิดเห็นแนวทางในการจัดการกับค่าขาดหายไปใน PCA วิเคราะห์เป็น"การวิเคราะห์องค์ประกอบหลักที่มีค่าหายไป: การสำรวจเปรียบเทียบวิธีการ" โดยสาลี่และจอยซ์ (2015) สองวิธีที่รู้จักกันดีที่สุดของวิธี PCA ที่อนุญาตให้มีค่าที่ขาดหายไปคืออัลกอริทึม NIPALS นำมาใช้ในการnipalsทำงานของade4แพคเกจและซ้ำ PCA (Ipca หรือ EM-PCA) นำมาใช้ในimputePCAทำงานของmissMDAแพคเกจ กระดาษสรุปว่าวิธี Ipca ทำได้ดีที่สุดภายใต้เงื่อนไขที่กว้างที่สุด

สำหรับตัวอย่างไวยากรณ์ของคุณคือ:

สำหรับ NIPALS:

library(ade4)
nipals(d[,c(1,2)])

สำหรับ Ipca:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.