นี่ไม่ใช่ข้อผิดพลาด
ตามที่เราได้สำรวจ (อย่างกว้างขวาง) ในความคิดเห็นมีสองสิ่งที่เกิดขึ้น ประการแรกคือคอลัมน์ของUถูก จำกัด ให้เป็นไปตามข้อกำหนดของ SVD: แต่ละคอลัมน์จะต้องมีความยาวหน่วยและเป็นมุมฉากสำหรับส่วนอื่น ๆ ทั้งหมด การดูUเป็นตัวแปรสุ่มที่สร้างจากเมทริกซ์สุ่มXผ่านอัลกอริธึม SVD เฉพาะเราจึงทราบว่าk ( k +เหล่านี้k(k+1)/2จำกัด อิสระหน้าที่สร้างอ้างอิงทางสถิติในหมู่คอลัมน์ของUU
อ้างอิงเหล่านี้อาจได้รับการเปิดเผยในระดับที่มากหรือน้อยโดยการศึกษาความสัมพันธ์ระหว่างองค์ประกอบของU , แต่เป็นปรากฏการณ์ที่สองโผล่ออก : วิธีการแก้ปัญหา SVD ที่ไม่ซ้ำกัน อย่างน้อยที่สุดแต่ละคอลัมน์ของUสามารถถูกทำให้เป็นอิสระได้โดยอิสระให้โซลูชันที่แตกต่างอย่างน้อย2kกับคอลัมน์kความสัมพันธ์ที่แข็งแกร่ง (เกิน1/2 ) สามารถชักนำโดยการเปลี่ยนสัญญาณของคอลัมน์ที่เหมาะสม (วิธีหนึ่งที่จะทำเช่นนี้จะได้รับในการแสดงความคิดเห็นครั้งแรกของฉันที่จะตอบอะมีบาของในหัวข้อนี้: ผมบังคับให้ทุกuii,i=1,…,kจะมีเครื่องหมายเดียวกันทำให้พวกเขาทั้งหมดเป็นลบหรือบวกทั้งหมดด้วยความน่าจะเป็นที่เท่าเทียมกัน) ในอีกทางหนึ่งความสัมพันธ์ทั้งหมดสามารถทำให้หายไปได้โดยการเลือกสัญญาณแบบสุ่มอิสระด้วยความน่าจะเป็นที่เท่าเทียมกัน (ฉันยกตัวอย่างด้านล่างในส่วน "แก้ไข")
ด้วยการดูแลที่เราบางส่วนสามารถมองเห็นทั้งสองปรากฏการณ์เหล่านี้เมื่ออ่านเมทริกซ์ scatterplot ของส่วนประกอบของUUลักษณะบางอย่าง - เช่นการปรากฏตัวของจุดเกือบกระจายอย่างสม่ำเสมอในภูมิภาควงกลมที่กำหนดอย่างดี - การขาดความเป็นอิสระ คนอื่น ๆ เช่น scatterplots แสดงความสัมพันธ์ที่ไม่ใช่ศูนย์ชัดเจนขึ้นอยู่กับตัวเลือกที่ทำในอัลกอริทึม - แต่ตัวเลือกดังกล่าวเป็นไปได้เพียงเพราะการขาดความเป็นอิสระในตอนแรก
การทดสอบขั้นสุดท้ายของอัลกอริธึมการสลายตัวอย่างเช่น SVD (หรือ Cholesky, LR, LU และอื่น ๆ ) ไม่ว่าจะเป็นสิ่งที่มันอ้าง ในกรณีนี้มันพอเพียงที่จะตรวจสอบว่าเมื่อ SVD ส่งกลับเมทริกซ์สามเท่า(U,D,V) , Xนั้นจะถูกกู้คืน, ขึ้นอยู่กับข้อผิดพลาดของจุดลอยตัวที่คาดไว้โดยผลิตภัณฑ์UDV′ ; คอลัมน์ของUและVเป็น orthonormal; และDนั้นเป็นเส้นทแยงมุม, องค์ประกอบในแนวทแยงนั้นไม่เป็นลบ, และถูกจัดเรียงตามลำดับจากมากไปน้อย ฉันใช้การทดสอบดังกล่าวกับsvd
อัลกอริทึมในR
และไม่เคยพบว่ามีข้อผิดพลาด แม้ว่าจะไม่ได้รับประกันว่ามันจะถูกต้องอย่างสมบูรณ์ประสบการณ์เช่นนี้ - ซึ่งฉันเชื่อว่ามีผู้คนมากมายร่วมแบ่งปัน - ชี้ให้เห็นว่าข้อผิดพลาดใด ๆ ที่จะต้องมีการป้อนข้อมูลพิเศษบางอย่างเพื่อให้ประจักษ์
สิ่งที่ตามมาคือการวิเคราะห์รายละเอียดเพิ่มเติมของประเด็นเฉพาะที่เกิดขึ้นในคำถาม
ใช้R
's svd
ขั้นตอนแรกที่คุณสามารถตรวจสอบว่าเป็นkการเพิ่มขึ้นของความสัมพันธ์ระหว่างค่าสัมประสิทธิ์ของUเติบโตอ่อนแอแต่พวกเขายังคงเป็นศูนย์ หากคุณเพียงแค่ทำการจำลองที่มีขนาดใหญ่ขึ้นคุณจะพบว่าพวกเขามีความสำคัญ (เมื่อไหร่k=3 , 50,000 การทำซ้ำควรจะพอเพียง) ตรงกันข้ามกับการยืนยันในคำถามความสัมพันธ์ไม่ "หายไปอย่างสิ้นเชิง"
ประการที่สองวิธีที่ดีกว่าในการศึกษาปรากฏการณ์นี้คือกลับไปที่คำถามพื้นฐานเรื่องความเป็นอิสระของสัมประสิทธิ์ แม้ว่าความสัมพันธ์มีแนวโน้มที่จะใกล้ศูนย์ในกรณีส่วนใหญ่ขาดความเป็นอิสระที่เห็นได้ชัด นี้จะทำที่ชัดเจนมากที่สุดโดยการศึกษาการกระจายหลายตัวแปรเต็มรูปแบบของค่าสัมประสิทธิ์ของUUธรรมชาติของการแจกแจงปรากฏขึ้นแม้ในสถานการณ์จำลองขนาดเล็กซึ่งไม่สามารถตรวจพบความสัมพันธ์ที่ไม่ใช่ศูนย์ได้ ตัวอย่างเช่นตรวจสอบเมทริกซ์กระจายของค่าสัมประสิทธิ์ เพื่อให้สามารถใช้งานได้จริงฉันตั้งค่าขนาดของชุดข้อมูลจำลองแต่ละชุดเป็น4และเก็บk=2ไว้ดังนั้นจึงวาด1000การรับรู้ของเมทริกซ์U × 4×2สร้างเมทริกซ์1000 × 8 นี่คือเมทริกซ์ scatterplot เต็มรูปแบบโดยมีตัวแปรตามตำแหน่งภายในU :U1000×8U
สแกนลงคอลัมน์แรกเผยให้เห็นถึงการขาดความน่าสนใจของการเป็นอิสระระหว่างu11และอื่น ๆuij : ดูที่วิธีการด้านบนของ scatterplot กับu21เกือบจะว่างเช่น; หรือตรวจสอบคลาวด์แบบขึ้น - ลงที่เป็นรูปไข่ซึ่งอธิบายถึงความสัมพันธ์(u11,u22)และเมฆที่ลาดลงสำหรับ(u21,u12)คู่ การมองอย่างใกล้ชิดแสดงให้เห็นถึงการขาดความเป็นอิสระอย่างชัดเจนในหมู่ค่าสัมประสิทธิ์เกือบทั้งหมด: มีน้อยคนที่ดูเป็นอิสระจากระยะไกลแม้ว่าส่วนใหญ่จะมีความสัมพันธ์ใกล้เคียงกันก็ตาม
(หมายเหตุ: เมฆทรงกลมส่วนใหญ่เป็นการคาดการณ์จาก hypersphere ที่สร้างขึ้นโดยเงื่อนไขการทำให้เป็นมาตรฐานบังคับให้ผลรวมของกำลังสองของส่วนประกอบทั้งหมดของแต่ละคอลัมน์เป็นเอกภาพ)
Scatterplot เมทริกซ์ที่มีk=3และk=4แสดงรูปแบบที่คล้ายกัน: ปรากฏการณ์เหล่านี้ไม่ได้ จำกัด อยู่ที่k=2และไม่ขึ้นอยู่กับขนาดของชุดข้อมูลจำลองแต่ละอัน: พวกมันเพียงสร้างและตรวจสอบได้ยากขึ้น
คำอธิบายสำหรับรูปแบบเหล่านี้ไปยังอัลกอริทึมที่ใช้เพื่อให้ได้Uในการสลายตัวของค่าเอกพจน์ แต่เรารู้ว่ารูปแบบของความไม่อิสระดังกล่าวจะต้องมีอยู่โดยคุณสมบัติที่กำหนดของU : เนื่องจากแต่ละคอลัมน์ที่ต่อเนื่องกัน เงื่อนไข orthogonality เหล่านี้กำหนดการพึ่งพาการทำงานระหว่างค่าสัมประสิทธิ์ซึ่งแปลการพึ่งพาทางสถิติระหว่างตัวแปรสุ่มที่สอดคล้องกัน
แก้ไข
ในการตอบสนองต่อความคิดเห็นมันอาจคุ้มค่าที่จะกล่าวถึงขอบเขตที่ปรากฏการณ์การพึ่งพาอาศัยเหล่านี้สะท้อนถึงอัลกอริธึมพื้นฐาน (เพื่อคำนวณ SVD) และจำนวนที่มีอยู่ในธรรมชาติของกระบวนการ
เฉพาะรูปแบบของความสัมพันธ์ระหว่างค่าสัมประสิทธิ์ขึ้นอยู่กับการจัดการที่ดีเกี่ยวกับทางเลือกโดยพลการทำโดยอัลกอริทึม SVD,เพราะวิธีการแก้ปัญหาที่ไม่ซ้ำกัน: คอลัมน์ของUเสมออาจเป็นอิสระคูณ−1หรือ11ไม่มีวิธีที่แท้จริงในการเลือกสัญญาณ ดังนั้นเมื่ออัลกอริธึม SVD สองตัวสร้างทางเลือกที่แตกต่างกัน (โดยพลการหรือสุ่ม) พวกเขาสามารถทำให้เกิดรูปแบบที่แตกต่างกันของ scatterplots ของ(uij,ui′j′)ค่า หากคุณต้องการที่จะเห็นสิ่งนี้แทนที่stat
ฟังก์ชั่นในรหัสด้านล่างโดย
stat <- function(x) {
i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
u <- svd(x[i, ])$u # Perform SVD
as.vector(u[order(i), ]) # Unpermute the rows of u
}
นี่เป็นครั้งแรกที่สุ่มสั่งการสังเกตการณ์x
ดำเนินการ SVD จากนั้นใช้การเรียงลำดับผกผันเพื่อu
ให้ตรงกับลำดับการสังเกตเดิม เนื่องจากเอฟเฟ็กต์คือสร้างรูปแบบผสมของสแคทเทอร์พล็อตดั้งเดิมที่มีการสะท้อนและแบบหมุนดังนั้นสแลตต์พล็อตในเมทริกซ์จะดูสม่ำเสมอกว่ามาก ความสัมพันธ์ตัวอย่างทั้งหมดจะใกล้เคียงกับศูนย์มาก (โดยการก่อสร้าง: ความสัมพันธ์พื้นฐานคือศูนย์อย่างแน่นอน ) อย่างไรก็ตามการขาดความเป็นอิสระจะยังคงชัดเจน (ในรูปทรงกลมสม่ำเสมอที่ปรากฏขึ้นโดยเฉพาะระหว่างui,jและui,j′ )
การขาดข้อมูลในจตุภาคของบางส่วนของสแคทเทอร์พล็อตดั้งเดิม (ดังแสดงในรูปด้านบน) เกิดขึ้นจากวิธีที่ R
อัลกอริธึม SVD เลือกสัญญาณสำหรับคอลัมน์
ไม่มีอะไรเปลี่ยนแปลงเกี่ยวกับข้อสรุป เพราะคอลัมน์ที่สองของUคือ orthogonal ถึงแรกมัน (พิจารณาว่าเป็นตัวแปรสุ่มหลายตัวแปร) จึงขึ้นอยู่กับแรก (ถือเป็นตัวแปรสุ่มหลายตัวแปร) คุณไม่สามารถมีองค์ประกอบทั้งหมดของหนึ่งคอลัมน์ที่เป็นอิสระจากองค์ประกอบทั้งหมดของอื่น ๆ ; สิ่งที่คุณทำได้คือการดูข้อมูลในรูปแบบที่ไม่ชัดเจนการพึ่งพา - แต่การพึ่งพาจะยังคงมีอยู่
นี่คือR
โค้ดที่ได้รับการอัพเดตเพื่อจัดการเคสk>2และวาดส่วนของเมทริกซ์สแคทเทอร์ล็อต
k <- 2 # Number of variables
p <- 4 # Number of observations
n <- 1e3 # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")