หลังจากปีในโรงเรียนที่จบที่ความเข้าใจของฉัน "ถ่วงน้ำหนักน้อยสแควร์" คือต่อไปนี้ให้ ,จะมีบางเมทริกซ์ออกแบบ\ 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 \ epsilon
สิ่งที่ฉันอยากรู้เป็นพิเศษคือวิธีR
จัดการน้ำหนักในlm()
ฟังก์ชั่นเมื่อกำหนดน้ำหนักให้เป็นจำนวนเต็ม จากการใช้?lm
:
NULL
น้ำหนักที่ไม่สามารถนำมาใช้เพื่อระบุว่าการสังเกตที่แตกต่างกันมีความแปรปรวนที่แตกต่างกัน หรือเท่ากันเมื่อองค์ประกอบของน้ำหนักเป็นจำนวนเต็มบวกว่าแต่ละคำตอบคือค่าเฉลี่ยของการสังเกตน้ำหนักหน่วย (รวมถึงกรณีที่มี การสังเกตเท่ากับและข้อมูลได้รับการสรุป)
ฉันได้อ่านย่อหน้านี้ซ้ำหลายครั้งและมันไม่มีเหตุผลสำหรับฉัน ใช้กรอบที่ฉันพัฒนาด้านบนสมมติว่าฉันมีค่าจำลองต่อไปนี้:
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
การใช้เฟรมเวิร์กที่ฉันพัฒนาด้านบนพารามิเตอร์เหล่านี้ได้มาอย่างไร นี่คือความพยายามของฉันในการทำสิ่งนี้ด้วยมือ: สมมติว่าเรามี และทำสิ่งนี้ด้วยการให้ (โปรดทราบว่าการสลับกลับไม่ทำงานในกรณีนี้ดังนั้นฉันจึงใช้อินเวอร์สทั่วไป)
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()
ผลลัพธ์ ผมทำอะไรผิดหรือเปล่า?