การทดสอบการพึ่งพาเชิงเส้นระหว่างคอลัมน์ของเมทริกซ์


26

ฉันมีเมทริกซ์สหสัมพันธ์ของการรักษาความปลอดภัยที่ส่งกลับซึ่งปัจจัยเป็นศูนย์ (นี่เป็นเรื่องที่น่าแปลกใจเล็กน้อยเนื่องจากเมทริกซ์สหสัมพันธ์ตัวอย่างและเมทริกซ์ความแปรปรวนร่วมที่สอดคล้องกันในทางทฤษฎีควรเป็นบวกแน่นอน)

สมมติฐานของฉันคือความปลอดภัยอย่างน้อยหนึ่งรายการขึ้นอยู่กับหลักทรัพย์อื่น ๆ มีฟังก์ชั่นใน R ที่ทดสอบเมทริกซ์เชิงเส้นสำหรับการพึ่งพาเชิงเส้นแต่ละคอลัมน์หรือไม่?

ตัวอย่างเช่นวิธีหนึ่งคือการสร้างเมทริกซ์ความสัมพันธ์หนึ่งการรักษาความปลอดภัยในแต่ละครั้งและคำนวณปัจจัยในแต่ละขั้นตอน เมื่อดีเทอร์มิแนนต์ = 0 แล้วหยุดตามที่คุณระบุความปลอดภัยซึ่งเป็นการรวมกันเชิงเส้นของหลักทรัพย์อื่น ๆ

เทคนิคอื่นใดที่สามารถระบุการพึ่งพาเชิงเส้นในเมทริกซ์นั้นได้รับการชื่นชม


เมทริกซ์ของคุณเป็นบวกกึ่งแน่นอนไม่ใช่บวกแน่นอน แต่เพราะมันเป็นเอกพจน์
ttnphns

มิติข้อมูลคืออะไร (ไม่มีตัวแปร; ไม่. ตัวอย่าง)
Karl

จำนวนคอลัมน์ = 480 # แถวสำหรับแต่ละชุดเวลา = 502 โดยทั่วไปแล้วคุณจะพบว่ายิ่งเวลาอนุกรมใหญ่ขึ้นเมทริกซ์ความแปรปรวนร่วมตัวอย่างมีแนวโน้มที่จะเป็นบวกแน่นอน อย่างไรก็ตามมีหลายกรณีที่คุณต้องการใช้ค่า T (หรือน้ำหนักชี้แจง) เพื่อให้สอดคล้องกับสภาพตลาด
Ram Ahluwalia

3
คำถามไม่ถูกวาง หากเมทริกซ์ข้อมูลของคุณคือ 480 คูณ 502 ให้บอกว่าเมทริกซ์นั้นมีอันดับ (พื้นที่คอลัมน์ของเมทริกซ์มีมิติq < 480 ) เทียบเท่ากับศาสตร์ทางคณิตศาสตร์ที่จะบอกว่าบางคอลัมน์เป็นการรวมเชิงเส้นของชุดอื่น แต่คุณสามารถ ไม่ต้องเลือกหนึ่งคอลัมน์และพูดว่านี่เป็นคอลัมน์ที่ขึ้นอยู่กับแนวเส้นตรง ดังนั้นจึงไม่มีขั้นตอนสำหรับการทำเช่นนี้และขั้นตอนที่แนะนำจะเลือกความปลอดภัยตามอำเภอใจซึ่งขึ้นอยู่กับลำดับที่รวมอยู่ q<480Q<480
NRH

เมทริกซ์ความแปรปรวนร่วมนั้นสมมาตร มันถูกสร้างขึ้นโดยทรานสโพเรน (A) * A. เมทริกซ์ A มีขนาด 480x502 อย่างไรก็ตามเมทริกซ์ความแปรปรวนร่วมคือ 480x480
Ram Ahluwalia

คำตอบ:


6

คุณดูเหมือนจะถามคำถามที่เร้าใจจริงๆ: วิธีการตรวจสอบ, ให้ความสัมพันธ์เอกพจน์ (หรือความแปรปรวนร่วมหรือเมทริกซ์ผลบวกของกำลังสองและข้ามผลิตภัณฑ์) ซึ่งคอลัมน์ขึ้นอยู่กับว่า ฉันคิดว่าการกวาดอาจช่วยได้ นี่คือโพรบของฉันใน SPSS (ไม่ใช่ R) เพื่อแสดง

มาสร้างข้อมูลกันบ้าง:

        v1        v2        v3         v4          v5
    -1.64454    .35119   -.06384    -1.05188     .25192
    -1.78520   -.21598   1.20315      .40267    1.14790
     1.36357   -.96107   -.46651      .92889   -1.38072
     -.31455   -.74937   1.17505     1.27623   -1.04640
     -.31795    .85860    .10061      .00145     .39644
     -.97010    .19129   2.43890     -.83642    -.13250
     -.66439    .29267   1.20405      .90068   -1.78066
      .87025   -.89018   -.99386    -1.80001     .42768
    -1.96219   -.27535    .58754      .34556     .12587
    -1.03638   -.24645   -.11083      .07013    -.84446

มาสร้างเชิงเส้นตรงระหว่าง V2, V4 และ V5:

compute V4 = .4*V2+1.2*V5.
execute.

ดังนั้นเราจึงแก้ไขคอลัมน์ V4 ของเรา

matrix.
get X. /*take the data*/
compute M = sscp(X). /*SSCP matrix, X'X; it is singular*/
print rank(M). /*with rank 5-1=4, because there's 1 group of interdependent columns*/
loop i= 1 to 5. /*Start iterative sweep operation on M from column 1 to column 5*/
-compute M = sweep(M,i).
-print M. /*That's printout we want to trace*/
end loop.
end matrix.

ผลงานพิมพ์ของ M ใน 5 การวนซ้ำ:

M
     .06660028    -.12645565    -.54275426    -.19692972    -.12195621
     .12645565    3.20350385    -.08946808    2.84946215    1.30671718
     .54275426    -.08946808    7.38023317   -3.51467361   -2.89907198
     .19692972    2.84946215   -3.51467361   13.88671851   10.62244471
     .12195621    1.30671718   -2.89907198   10.62244471    8.41646486

M
     .07159201     .03947417    -.54628594    -.08444957    -.07037464
     .03947417     .31215820    -.02792819     .88948298     .40790248
     .54628594     .02792819    7.37773449   -3.43509328   -2.86257773
     .08444957    -.88948298   -3.43509328   11.35217042    9.46014202
     .07037464    -.40790248   -2.86257773    9.46014202    7.88345168

M
    .112041875    .041542117    .074045215   -.338801789   -.282334825
    .041542117    .312263922    .003785470    .876479537    .397066281
    .074045215    .003785470    .135542964   -.465602725   -.388002270
    .338801789   -.876479537    .465602725   9.752781632   8.127318027
    .282334825   -.397066281    .388002270   8.127318027   6.772765022

M
   .1238115070   .0110941027   .0902197842   .0347389906   .0000000000
   .0110941027   .3910328733  -.0380581058  -.0898696977  -.3333333333
   .0902197842  -.0380581058   .1577710733   .0477405054   .0000000000
   .0347389906  -.0898696977   .0477405054   .1025348498   .8333333333
   .0000000000   .3333333333   .0000000000  -.8333333333   .0000000000

M
   .1238115070   .0110941027   .0902197842   .0347389906   .0000000000
   .0110941027   .3910328733  -.0380581058  -.0898696977   .0000000000
   .0902197842  -.0380581058   .1577710733   .0477405054   .0000000000
   .0347389906  -.0898696977   .0477405054   .1025348498   .0000000000
   .0000000000   .0000000000   .0000000000   .0000000000   .0000000000

โปรดสังเกตว่าในที่สุดคอลัมน์ 5 จะเต็มไปด้วยเลขศูนย์ นี่หมายความว่า (เท่าที่ฉันเข้าใจ) ว่า V5 นั้นเชื่อมโยงเชิงเส้นกับคอลัมน์นำหน้าบางส่วน คอลัมน์ไหน ดูการทำซ้ำโดยที่คอลัมน์ 5 สุดท้ายไม่เต็มศูนย์ - การทำซ้ำ 4 เราเห็นว่า V5 ถูกผูกไว้กับ V2 และ V4 ด้วยค่าสัมประสิทธิ์ -.3333 และ. 8333: V5 = -.3333 * V2 + .8333 * V4 ซึ่งสอดคล้องกัน สิ่งที่เราทำกับข้อมูล: V4 = .4 * V2 + 1.2 * V5

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


นี่ไม่ใช่รูปแบบระดับแถวที่ลดลงใช่หรือไม่ ถ้าเป็นเช่นนั้นไม่มีแพ็คเกจ / ฟังก์ชั่นใน R
อรุณ

@Arun ฉันไม่ใช่ผู้ใช้ R จึงไม่ทราบ
ttnphns

25

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

ใน R:

rankifremoved <- sapply(1:ncol(your.matrix), function (x) qr(your.matrix[,-x])$rank)
which(rankifremoved == max(rankifremoved))

1
คำตอบที่มีประโยชน์อย่างมหาศาลในการกำหนดคอลัมน์การกระทำผิดกฎหมายในเมทริกซ์ถดถอยที่ฉันได้รับข้อผิดพลาดsystem is exactly singular: U[5,5] = 0 ซึ่งตอนนี้ฉันรู้ว่าหมายถึงคอลัมน์ 5 เป็นปัญหา (ดูเหมือนชัดเจนกับย้อนหลังที่เป็นคอลัมน์ของศูนย์ครับ)
แมตต์เวลเลอร์

ในความคิดเห็นของ James เขาได้โพสต์สคริปต์: rankifremoved <- sapply (1: ncol (your.matrix), function (x) qr (your.matrix [, - x]) $ rank) ซึ่ง (rankifremoved == max ( rankifremoved)) ฉันทำการทดสอบบนเมทริกซ์ฉันต้องการทราบผลลัพท์ของ R คอลัมน์ของผลลัพธ์นั้นเป็นแบบเชิงเส้นหรือไม่? ขอบคุณ!

@ EltonAraújo: ผลลัพธ์จะเป็นเวกเตอร์ที่ให้ดัชนีของคอลัมน์ที่ขึ้นกับเชิงเส้น: ดังนั้น (2,4,5) สำหรับตัวอย่างในคำตอบของ ttnphns แต่ฉันสงสัยว่าปัญหาของความแม่นยำเชิงตัวเลขจะมีผลกับวิธีนี้อย่างไร
Scortchi - Reinstate Monica

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

สิ่งนี้ไม่ควรส่งคืนชุดว่างyour.matrix = matrix(1:4, 2)หรือ
Holger Brandl

15

คำถามถามเกี่ยวกับ "การระบุความสัมพันธ์พื้นฐาน [เชิงเส้น]" ระหว่างตัวแปร

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

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

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


ลองดูตัวอย่าง (ใช้Rสำหรับการคำนวณและการพล็อต) เริ่มต้นด้วยฟังก์ชั่นเพื่อทำการ PCA ค้นหาส่วนประกอบขนาดเล็กพล็อตพวกมันและส่งคืนความสัมพันธ์เชิงเส้นในหมู่พวกเขา

pca <- function(x, threshold, ...) {
  fit <- princomp(x)
  #
  # Compute the relations among "small" components.
  #
  if(missing(threshold)) threshold <- max(fit$sdev) / ncol(x)
  i <- which(fit$sdev < threshold)
  relations <- fit$loadings[, i, drop=FALSE]
  relations <- round(t(t(relations) / apply(relations, 2, max)), digits=2)
  #
  # Plot the loadings, highlighting those for the small components.
  #
  matplot(x, pch=1, cex=.8, col="Gray", xlab="Observation", ylab="Value", ...)
  suppressWarnings(matplot(x %*% relations, pch=19, col="#e0404080", add=TRUE))

  return(t(relations))
}

ลองใช้สิ่งนี้กับข้อมูลแบบสุ่ม เหล่านี้จะถูกสร้างขึ้นบนสี่ตัวแปร (คนและEของคำถาม) นี่คือฟังก์ชั่นเล็ก ๆ น้อย ๆ ในการคำนวณAเป็นการรวมกันเชิงเส้นของชุดอื่น ๆ จากนั้นจะเพิ่ม iid ค่าที่กระจายตามปกติให้กับตัวแปรทั้งห้า (เพื่อดูว่าโพรซีเดอร์ทำงานได้ดีเพียงใดเมื่อความสัมพันธ์หลายระดับเป็นค่าประมาณเท่านั้นและไม่แน่นอน)B,C,D,EA

process <- function(z, beta, sd, ...) {
  x <- z %*% beta; colnames(x) <- "A"
  pca(cbind(x, z + rnorm(length(x), sd=sd)), ...)
}

B,,EA=B+C+D+EA=B+(C+D)/2+Esweep

n.obs <- 80 # Number of cases
n.vars <- 4 # Number of independent variables
set.seed(17)
z <- matrix(rnorm(n.obs*(n.vars)), ncol=n.vars)
z.mean <- apply(z, 2, mean)
z <- sweep(z, 2, z.mean)
colnames(z) <- c("B","C","D","E") # Optional; modify to match `n.vars` in length

B,,EA

ผล

ผลลัพธ์ที่เกี่ยวข้องกับแผงด้านซ้ายบนคือ

       A  B  C  D  E
Comp.5 1 -1 -1 -1 -1

00ABCDE

ผลลัพธ์สำหรับแผงตรงกลางด้านบนคือ

       A     B     C     D     E
Comp.5 1 -0.95 -1.03 -0.98 -1.02

(A,B,C,D,E)

       A     B     C     D     E
Comp.5 1 -1.33 -0.77 -0.74 -1.07

A=B+C+D+E

1,1/2,1/2,1

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


นี่คือรหัสในการทำซ้ำตัวเลขนี้:

par(mfrow=c(2,3))
beta <- c(1,1,1,1) # Also can be a matrix with `n.obs` rows: try it!
process(z, beta, sd=0, main="A=B+C+D+E; No error")
process(z, beta, sd=1/10, main="A=B+C+D+E; Small error")
process(z, beta, sd=1/3, threshold=2/3, main="A=B+C+D+E; Large error")

beta <- c(1,1/2,1/2,1)
process(z, beta, sd=0, main="A=B+(C+D)/2+E; No error")
process(z, beta, sd=1/10, main="A=B+(C+D)/2+E; Small error")
process(z, beta, sd=1/3, threshold=2/3, main="A=B+(C+D)/2+E; Large error")

(ฉันต้องเล่นซอกับขีด จำกัด ในกรณีข้อผิดพลาดขนาดใหญ่เพื่อแสดงเพียงองค์ประกอบเดียว: นั่นคือเหตุผลสำหรับการจัดหาค่านี้เป็นพารามิเตอร์ให้process)


ผู้ใช้ ttnphns ได้โปรดให้ความสนใจกับหัวข้อที่เกี่ยวข้องอย่างใกล้ชิด หนึ่งในคำตอบ (โดย JM)แนะนำวิธีการที่อธิบายไว้ที่นี่


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

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

"loadings," which are linear combinations of the original variablesAA1

นอกจากนี้ฉันขอให้คุณแสดงความคิดเห็นเกี่ยวกับความเป็นไปได้ในการใช้งานการดำเนินการกวาด ( stats.stackexchange.com/a/16391/3277 ) ในการติดตามตัวแปรย่อยที่ขึ้นอยู่กับตัวแปรเชิงเส้นหรือไม่?
ttnphns

XX=UWVVprincompXV=UWWUW0XVX


3

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

ฉันสร้างห่วงสำหรับ () ที่คำนวณอันดับของเมทริกซ์ทีละคอลัมน์ ดังนั้นสำหรับการวนซ้ำครั้งแรกอันดับจะเป็น 1 อันดับที่สองจะเกิดขึ้นจนกว่าอันดับจะน้อยกว่าหมายเลขคอลัมน์ที่คุณกำลังใช้

ตรงไปตรงมามาก:

for (i in 1:47) {

  print(qr(data.frame[1:i])$rank) 
  print(i) 
  print(colnames(data.frame)[i])
  print("###") 
}

for () การแยกย่อยแบบวนซ้ำ

  1. คำนวณอันดับสำหรับคอลัมน์ ith
  2. พิมพ์หมายเลขซ้ำ
  3. พิมพ์ชื่อคอลัมน์สำหรับการอ้างอิง
  4. แบ่งคอนโซลด้วย "###" เพื่อให้คุณสามารถเลื่อนดูได้อย่างง่ายดาย

ฉันแน่ใจว่าคุณสามารถเพิ่มคำสั่ง if ได้ฉันยังไม่ต้องการเพราะฉันจัดการกับคอลัมน์ 50ish เท่านั้น

หวังว่านี่จะช่วยได้!


2
แม้ว่าจะมีอะไรผิดปกติกับทฤษฎีนี้มันเป็นขั้นตอนวิธีเชิงตัวเลขที่ไม่เสถียรและไม่มีประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อมีคอลัมน์จำนวนมากทำให้ไม่สามารถตรวจจับระยะใกล้คอลลิเนียริตี้และตรวจจับคอลลิเออริตี้ที่ไม่มีอยู่จริง
whuber

2

อันดับ, rของเมทริกซ์ = จำนวนคอลัมน์ (หรือแถว) เชิงเส้นของเมทริกซ์ สำหรับn โดย nเมทริกซ์, ยศ (A) = n => คอลัมน์ทั้งหมด (หรือแถว) มีความเป็นอิสระเป็นเส้นตรง


2

ไม่ใช่ว่าคำตอบ @Whuber จำเป็นต้องขยายออกไปจริงๆ แต่ฉันคิดว่าฉันจะให้คำอธิบายสั้น ๆ เกี่ยวกับคณิตศาสตร์

ถ้าเป็นการรวมเชิงเส้น X'Xโวลต์=0 สำหรับ โวลต์0 แล้วก็ โวลต์ เป็นไอเก็นนักแสดงของ X'X เกี่ยวข้องกับค่าลักษณะเฉพาะ λ=0. ค่าลักษณะเฉพาะและค่าลักษณะเฉพาะของX'X นอกจากนี้ยังมีค่าลักษณะเฉพาะและค่าลักษณะเฉพาะของ Xดังนั้นไอจีอีของ X'X เกี่ยวข้องกับค่าลักษณะเฉพาะที่อยู่ใกล้ λ=0เป็นตัวแทนของค่าสัมประสิทธิ์สำหรับความสัมพันธ์เชิงเส้นโดยประมาณในหมู่ regressors การวิเคราะห์องค์ประกอบหลักส่งผลให้ค่าลักษณะเฉพาะและค่าลักษณะเฉพาะของX'Xดังนั้นคุณสามารถใช้ eigenvectors โวลต์ เกี่ยวข้องกับขนาดเล็ก λ เพื่อตรวจสอบว่ามีความสัมพันธ์เชิงเส้นอยู่ในกลุ่ม regressors ของคุณหรือไม่

วิธีการหนึ่งในการพิจารณาว่าค่าลักษณะเฉพาะมีขนาดเล็กอย่างเหมาะสมเพื่อใช้เป็นค่าความเป็นคู่หรือไม่คือการใช้ดัชนีสภาพ:

κJ=λม.axλJ
ซึ่งวัดขนาดของค่าลักษณะเฉพาะที่เล็กที่สุดเทียบกับค่าที่ใหญ่ที่สุด กฎทั่วไปของหัวแม่มือก็คือ multicollinearity เจียมเนื้อเจียมตัวเกี่ยวข้องกับดัชนีเงื่อนไขระหว่าง 100 และ 1,000 ในขณะที่ multicollinearity รุนแรงเกี่ยวข้องกับดัชนีเงื่อนไขเหนือ 1,000 (Montgomery, 2009)

สิ่งสำคัญคือการใช้วิธีการที่เหมาะสมในการพิจารณาว่าค่าลักษณะเฉพาะมีขนาดเล็กหรือไม่เพราะขนาดของค่าลักษณะเฉพาะไม่ได้เป็นขนาดสัมพัทธ์ของดัชนีสภาพที่สำคัญซึ่งสามารถเห็นได้ในตัวอย่าง พิจารณาเมทริกซ์

X'X=[0.0010000.0010000.001].
ค่าลักษณะเฉพาะสำหรับเมทริกซ์นี้คือ λ1=λ2=λ3=0.001. แม้ว่าค่าลักษณะเฉพาะเหล่านี้จะมีขนาดเล็กดัชนีเงื่อนไขคือ
κ=λม.axλม.ผมn=1
บ่งบอกถึงการไม่มี multicolinearity และในความเป็นจริงคอลัมน์ของเมทริกซ์นี้มีความเป็นอิสระเชิงเส้น

อ้างอิง

Montgomery, D. (2012) การวิเคราะห์การถดถอยเชิงเส้นเบื้องต้นรุ่นที่ 5 John Wiley & Sons Inc.


1
Use of the condition indices is a good idea (+1). I would like only to point out two things. First, it would be more numerically stable and more directly relevant to compute their reciprocals: divide each eigenvalue by the largest of them all and see how close to zero it is. Second (referring to your initial discussion), unless X is square, it cannot have eigenvalues or eigenvectors: the concept makes no sense for non-square matrices.
whuber

Why dont you perform a QR-Decomposition of X (which may be n by k, n>>k)? Any rank deficiencies of X are also in R on which you could perform the aforementioned eigenvalue-decomposition to detect linear dependent columns (which are easy identified even under pivoting) - this is the reference: page 179 of Wood Generalized Additive Models an Introduction with R.
Druss2k
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.