ทฤษฎีที่อยู่เบื้องหลังอาร์กิวเมนต์น้ำหนักใน R เมื่อใช้ lm ()


12

หลังจากปีในโรงเรียนที่จบที่ความเข้าใจของฉัน "ถ่วงน้ำหนักน้อยสแควร์" คือต่อไปนี้ให้ ,จะมีบางเมทริกซ์ออกแบบ\ boldsymbol \ beta \ in \ mathbb {R} ^ pเป็นเวกเตอร์พารามิเตอร์\ boldsymbol \ epsilon \ in \ mathbb {R} ^ nเป็นเวกเตอร์ข้อผิดพลาดที่\ boldsymbol \ epsilon \ sim \ mathcal {N} (\ mathbf {0} \ ซิก ^ 2 \ mathbf {V})ที่\ mathbf {V} = \ ข้อความ {diag} (v_1, v_2 \ จุด v_n)และ\ ซิก ^ 2> 0 จากนั้นแบบจำลอง \ mathbf {y} = \ mathbf {X} \ boldsymbol \ beta + \ boldsymbol \ epsilonyRnXn×pβRpϵRnϵN(0,σ2V)V=diag(v1,v2,,vn)σ2>0

y=Xβ+ϵ
ภายใต้สมมติฐานที่เรียกว่าแบบจำลอง "ถ่วงน้ำหนักอย่างน้อยกำลังสอง" ปัญหาของ WLS คือการหา
argminβ(yXβ)TV1(yXβ).
สมมติว่าy=[y1yn]T , β=[β1βp]Tและ
X=[x11x1px21x2pxn1xnp]=[x1Tx2TxnT].
xiTβR1ดังนั้น
yXβ=[y1x1Tβy2x2TβynxnTβ].
นี่จะให้
(yXβ)TV1=[y1x1Tβy2x2TβynxnTβ]diag(v11,v21,,vn1)=[v11(y1x1Tβ)v21(y2x2Tβ)vn1(ynxnTβ)]
v_n ^ {- 1} (y_n- \ mathbf {x} _ {n} ^ {T} \ boldsymbol \ beta) \ end {bmatrix} \ end {align} จึงให้
argminβ(yXβ)TV1(yXβ)=argminβi=1nvi1(yixiTβ)2.
βประเมินโดยใช้
β^=(XTV1X)1XTV1y.
นี่คือขอบเขตของความรู้ที่ฉันคุ้นเคย ฉันไม่เคยถูกสอนว่าควรเลือกv1,v2,,vnแม้ว่าจะดูเหมือนว่าตัดสินโดยที่นี่ซึ่งโดยปกติคือVar(ϵ)=diag(σ12,σ22,,σn2)ซึ่งทำให้เข้าใจได้ง่าย (ให้น้ำหนักที่มีความผันแปรสูงน้ำหนักน้อยลงในปัญหา WLS และให้การสังเกตที่มีความแปรปรวนน้ำหนักน้อยกว่า)

สิ่งที่ฉันอยากรู้เป็นพิเศษคือวิธีRจัดการน้ำหนักในlm()ฟังก์ชั่นเมื่อกำหนดน้ำหนักให้เป็นจำนวนเต็ม จากการใช้?lm:

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

ฉันได้อ่านย่อหน้านี้ซ้ำหลายครั้งและมันไม่มีเหตุผลสำหรับฉัน ใช้กรอบที่ฉันพัฒนาด้านบนสมมติว่าฉันมีค่าจำลองต่อไปนี้:

x <- c(0, 1, 2)
y <- c(0.25, 0.75, 0.85)
weights <- c(50, 85, 75)

lm(y~x, weights = weights)

Call:
lm(formula = y ~ x, weights = weights)

Coefficients:
(Intercept)            x  
     0.3495       0.2834  

การใช้เฟรมเวิร์กที่ฉันพัฒนาด้านบนพารามิเตอร์เหล่านี้ได้มาอย่างไร นี่คือความพยายามของฉันในการทำสิ่งนี้ด้วยมือ: สมมติว่าเรามี และทำสิ่งนี้ด้วยการให้ (โปรดทราบว่าการสลับกลับไม่ทำงานในกรณีนี้ดังนั้นฉันจึงใช้อินเวอร์สทั่วไป)V=diag(50,85,75)

[β^0β^1]=([111111]diag(1/50,1/85,1/75)[111111]T)1[111111]Tdiag(1/50,1/85,1/75)[0.250.750.85]
R
X <- matrix(rep(1, times = 6), byrow = T, nrow = 3, ncol = 2)
V_inv <- diag(c(1/50, 1/85, 1/75))
y <- c(0.25, 0.75, 0.85)

library(MASS)
ginv(t(X) %*% V_inv %*% X) %*% t(X) %*% V_inv %*% y

         [,1]
[1,] 0.278913
[2,] 0.278913

สิ่งเหล่านี้ไม่ตรงกับค่าจากlm()ผลลัพธ์ ผมทำอะไรผิดหรือเปล่า?

คำตอบ:


4

เมทริกซ์ควรเป็น ไม่ใช่ นอกจากนี้คุณควรจะไม่X

[101112],
[111111].
V_invdiag(weights)diag(1/weights)
x <- c(0, 1, 2)
y <- c(0.25, 0.75, 0.85)
weights <- c(50, 85, 75)
X <- cbind(1, x)

> solve(t(X) %*% diag(weights) %*% X, t(X) %*% diag(weights) %*% y)
       [,1]
  0.3495122
x 0.2834146

ขอบคุณสำหรับการล้างเมทริกซ์การออกแบบที่ไม่ถูกต้องโดยเฉพาะอย่างยิ่ง! ฉันค่อนข้างเป็นสนิมกับวัสดุนี้ ดังนั้นเป็นคำถามสุดท้ายคำถามนี้หมายความว่าในสมมติฐาน WLS หรือไม่ Var(ϵ)=diag(1/weights)
Clarinetist

ใช่แม้ว่าน้ำหนักจะต้องเป็นสัดส่วนกับ 1 / ความแปรปรวนเท่านั้นไม่จำเป็นต้องเท่ากัน ตัวอย่างเช่นหากคุณใช้weights <- c(50, 85, 75)/2ในตัวอย่างคุณจะได้ผลลัพธ์เดียวกัน
mark999

3

เพื่อที่จะตอบมากกว่านี้รัดกุมถ่วงน้ำหนักถดถอยน้อยสแควร์โดยใช้weightsในการRทำให้สมมติฐานดังต่อไปนี้: weights = c(w_1, w_2, ..., w_n)สมมติว่าเรามี ปล่อย ,เป็นเมทริกซ์ออกแบบเป็นเวกเตอร์พารามิเตอร์และเป็นเวกเตอร์ข้อผิดพลาดที่มีค่าเฉลี่ยและแปรปรวนเมทริกซ์ที่0 จากนั้น ทำตามขั้นตอนเดียวกันของการสืบทอดในโพสต์ต้นฉบับเรามี yRnXn×pβRpϵRn0σ2Vσ2>0

V=diag(1/w1,1/w2,,1/wn).
argminβ(yXβ)TV1(yXβ)=argminβi=1n(1/wi)1(yixiTβ)2=argminβi=1nwi(yixiTβ)2
และคาดว่าจะใช้ จากGLS สมมติฐานβ
β^=(XTV1X)1XTV1y
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.