วิธีการสร้างเมทริกซ์สหสัมพันธ์แบบสุ่มที่มีการแจกแจงแบบเส้นทแยงมุมประมาณปกติโดยมีค่าเบี่ยงเบนมาตรฐานที่กำหนด


11

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

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


ฉันรู้วิธีการหนึ่ง แต่ส่วนเบี่ยงเบนมาตรฐานที่เกิดขึ้น (จากการกระจายตัวขององค์ประกอบนอกแนวทแยงมุม) มีขนาดเล็กเกินไปสำหรับจุดประสงค์ของฉัน: สร้างแถวสม่ำเสมอหรือแบบสุ่มปกติของเมทริกซ์มาตรฐานแถว (ลบค่าเฉลี่ย หารด้วยค่าเบี่ยงเบนมาตรฐาน) จากนั้นเมทริกซ์สหสัมพันธ์ตัวอย่างมีการแจกแจงรายการแบบทแยงมุมตามปกติ [ อัปเดตหลังจากความคิดเห็น: ส่วนเบี่ยงเบนมาตรฐานจะเป็น ]X 1nX1n1XXn1/2

ทุกคนสามารถแนะนำวิธีที่ดีกว่าที่ฉันสามารถควบคุมค่าเบี่ยงเบนมาตรฐานได้หรือไม่?


1
@ Richard ขอบคุณสำหรับคำถามของคุณ ขออภัยวิธีที่คุณอธิบายข้างต้นจะไม่สร้างรายการที่มีการเผยแพร่ตามปกติ เส้นทแยงมุมจะ 1 น่าจะเป็นหนึ่งและปิดเส้นทแยงมุมจะกระโดดระหว่างและ+1ตอนนี้รายการrescaledจะมาบรรจบกัน asymptotically กับการกระจายปกติอยู่กึ่งกลางรอบศูนย์ คุณช่วยให้ข้อมูลเพิ่มเติมเกี่ยวกับปัญหาที่คุณพยายามแก้ไขได้จริงหรือไม่? และทำไมคุณต้องการ "กระจายตามปกติ" นอกแนวทแยงมุม? + 11+1
พระคาร์ดินัล

1
@ ริชาร์ดสิ่งที่ฉันหมายถึงคือสมมติว่าและเป็นเวกเตอร์อิสระสองรายการที่รายการของแต่ละรายการเป็นมาตรฐานมาตรฐาน iid คำนวณ ; นั่นคือความสัมพันธ์ระหว่างกลุ่มตัวอย่างและYจากนั้นรวมการกระจายไปยังตัวแปรสุ่มมาตรฐานแบบปกติ โดย "rescaled" ฉันหมายถึงการคูณด้วยซึ่งเป็นสิ่งที่จำเป็นเพื่อให้ได้การกระจายแบบไม่ จำกัด Y = ( Y 1 , Y 2 , ... , Y n ) ρ n = s x Y / ( s x s Y ) X Y n 1 / 2 ρ n n 1 / 2X=(X1,X2,,Xn)Y=(Y1,Y2,,Yn)ρ^n=sxy/(sxsy)XYn1/2ρ^nn1/2
พระคาร์ดินัล

1
@Richard สาระสำคัญของ "ปัญหา" คือการสร้างข้อ จำกัด สองข้อ (a) บรรทัดฐานของแต่ละแถวคือ 1 และ (b) รายการที่สร้างขึ้นจากตัวอย่างแบบสุ่มคุณจำเป็นต้องบังคับให้มีความสัมพันธ์ค่อนข้างมาก เล็ก (ตามลำดับของ ) เหตุผลคือคุณไม่สามารถมีความสัมพันธ์ขนาดใหญ่โดยพลการระหว่างแถวและยังคงได้รับบรรทัดฐานของแต่ละแถวให้เป็น 1 ต่อหน้าความเป็นอิสระจำนวนมากn1/2
สำคัญ

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

1
แน่นอนว่าเราจะลองทำกรณีง่าย ๆ เรียกเมทริกซ์การสร้างซึ่งเราจะถือว่าเป็นโดยไม่สูญเสียความสามารถทั่วไป ตอนนี้สร้างคอลัมน์ของเป็น IID เวกเตอร์ดังกล่าวว่าองค์ประกอบของแต่ละเวกเตอร์ที่มีมาตรฐานตัวแปรสุ่มปกติที่ equicorrelated กับความสัมพันธ์\ตอนนี้ใช้ขั้นตอนที่คุณได้รับ Letแสดงถึงความสัมพันธ์ตัวอย่างระหว่าง TH และ TH แถว * * ของXจากนั้นสำหรับตายตัวปล่อยให้ ,เมตร× n X ρ ρฉันเจฉันเจX n →การn 1 / 2 ( ρฉันเจ - ρ ) N ( 0 , ( 1 - ρ 2 ) 2 )Xm×nXρρ^ijijXmnn1/2(ρ^ijρ)ลู่เข้าหาการกระจายไปยังตัวแปรสุ่ม N(0,(1ρ2)2)
พระคาร์ดินัล

คำตอบ:


5

ฉันได้เตรียมสิ่งที่ฉันตอนนี้เชื่อว่าเป็นคำตอบที่ดีที่สุดย่อย; ดังนั้นฉันจึงแก้ไขคำตอบของฉันเพื่อเริ่มต้นด้วยคำแนะนำที่ดีกว่า


ใช้วิธีการเถาวัลย์

ในหัวข้อนี้: วิธีสร้างเมทริกซ์สหสัมพันธ์แบบกึ่งบวกแบบสุ่มที่มีประสิทธิภาพได้อย่างไร - ฉันอธิบายและให้รหัสสำหรับอัลกอริธึมที่มีประสิทธิภาพสองวิธีในการสร้างเมทริกซ์สหสัมพันธ์แบบสุ่ม ทั้งคู่มาจากบทความของLewandowski, Kurowicka และ Joe (2009)

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

วิธีการเถาวัลย์

สิ่งเดียวที่เปลี่ยนแปลงระหว่างย่อยเป็นพารามิเตอร์หนึ่งว่าการควบคุมวิธีการมากการกระจายตัวของความสัมพันธ์บางส่วนมีความเข้มข้นรอบ1 เมื่อ OP ขอให้มีการแจกแจงแบบปกติประมาณแนวทแยงนี่คือพล็อตที่มีฮิสโตแกรมขององค์ประกอบนอกแนวทแยง (สำหรับเมทริกซ์เดียวกันกับด้านบน):±1

องค์ประกอบแนวทแยงมุม

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


คำตอบเดิมของฉัน

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

เคล็ดลับคือการสร้างตัวอย่างของสัมพันธ์กันของคุณ(ไม่ใช่คุณลักษณะ แต่เป็นตัวอย่าง) นี่คือตัวอย่าง: ฉันสร้างเมทริกซ์แบบสุ่มของขนาด (องค์ประกอบทั้งหมดจากมาตรฐานปกติ) แล้วเพิ่มจำนวนสุ่มจากเพื่อแต่ละแถวสำหรับ0,1,2,5 สำหรับเมทริกซ์ความสัมพันธ์องค์ประกอบ (หลังจากมาตรฐานคุณลักษณะ) จะมีการปิดเส้นทแยงมุมประมาณกระจายตามปกติที่มีค่าเบี่ยงเบนมาตรฐาน{1000} สำหรับX 1000 × 100 [ - a / 2 , a / 2 ] a = 0 , 1 , 2 , 5 a = 0 XX 1 / XX1000×100[a/2,a/2]a=0,1,2,5a=0XX >0=0,1,2,51/1000a>0ผมคำนวณสัมพันธ์เมทริกซ์โดยไม่ต้องอยู่ตรงกลางตัวแปร (รักษาความสัมพันธ์นี้แทรก) และค่าเบี่ยงเบนมาตรฐานขององค์ประกอบปิดขวางเติบโตไปพร้อมกับดังแสดงในรูปนี้ (แถวตรงตามลักษณะที่ ):aa=0,1,2,5

เมทริกซ์สหสัมพันธ์แบบสุ่ม

เมทริกซ์เหล่านี้ทั้งหมดแน่นอนแน่นอนเป็นบวก นี่คือรหัส MATLAB:

offsets = [0 1 2 5];
n = 1000;
p = 100;

rng(42) %// random seed

figure
for offset = 1:length(offsets)
    X = randn(n,p);
    for i=1:p
        X(:,i) = X(:,i) + (rand-0.5) * offsets(offset);
    end
    C = 1/(n-1)*transpose(X)*X; %// covariance matrix (non-centred!)

    %// convert to correlation
    d = diag(C);
    C = diag(1./sqrt(d))*C*diag(1./sqrt(d));

    %// displaying C
    subplot(length(offsets),3,(offset-1)*3+1)
    imagesc(C, [-1 1])

    %// histogram of the off-diagonal elements
    subplot(length(offsets),3,(offset-1)*3+2)
    offd = C(logical(ones(size(C))-eye(size(C))));
    hist(offd)
    xlim([-1 1])

    %// QQ-plot to check the normality
    subplot(length(offsets),3,(offset-1)*3+3)
    qqplot(offd)

    %// eigenvalues
    eigv = eig(C);
    display([num2str(min(eigv),2) ' ... ' num2str(max(eigv),2)])
end

ผลลัพธ์ของรหัสนี้ (eigenvalues ​​ขั้นต่ำและสูงสุด) คือ:

0.51 ... 1.7
0.44 ... 8.6
0.32 ... 22
0.1 ... 48

คุณสามารถพล็อตค่าของค่าลักษณะเฉพาะที่เล็กที่สุดที่คุณได้รับโดยใช้วิธีนี้ควบคู่ไปกับการแปลง
user603

1
โดยไม่ต้องเปลี่ยนรูปฉันสามารถเขียนตรงนี้ได้ว่าค่าลักษณะเฉพาะที่เล็กที่สุดคือ 0.5, 0.4, 0.3 และ 0.1 ตามลำดับ (สำหรับแต่ละแถวของรูปของฉัน) ตัวที่ใหญ่ที่สุดเติบโตจาก 1.7 เป็น 48.
อะมีบา

แต่ค่าเหล่านี้เป็นค่าเฉพาะของเมทริกซ์สหสัมพันธ์หรือของ X'X หรือไม่
user603

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

ฉันไม่คิดว่ามันเป็นไปไม่ได้ฉันไม่สามารถดูได้จากโค้ด (ตอนนี้ไม่ได้ใช้ matlab มานานหลายปี)
user603


1

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


แต่เราสามารถควบคุมค่าเบี่ยงเบนมาตรฐานขององค์ประกอบนอกแนวทแยงที่เกิดด้วยพารามิเตอร์ของการแจกแจง Wishart ได้หรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร
อะมีบา

1

นี่ไม่ใช่คำตอบที่ซับซ้อนมาก แต่ฉันอดไม่ได้ที่จะคิดว่ามันยังเป็นคำตอบที่ดี ...

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

คุณอาจมีเหตุผลที่ดีที่จะไม่ทำสิ่งนี้ แต่ฉันก็ยังไม่ชัดเจนสำหรับคำถามของคุณ

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