lm ()을 사용할 때 R의 가중치 인수 뒤에있는 이론


12

1 년 후 대학원에서 "가중 최소 제곱"에 대한 나의 이해는 다음과 같습니다. , 는 설계 행렬 \ \ mathbb {R} ^ p는에 boldsymbol \ 베타 \ 파라미터 벡터 될 \ boldsymbol \ 엡실론 \에서 \ mathbb {R} ^ N 될 에러 벡터되도록 \ boldsymbol \ 엡실론 \ SIM \ mathcal {N} (\ mathbf {0}, \ sigma ^ 2 \ mathbf {V}) , 여기서 \ mathbf {V} = \ text {diag} (v_1, v_2, \ dots, v_n)\ sigma ^ 2> 0 입니다. 그런 다음 \ mathbf {y} = \ mathbf {X} \ boldsymbol \ beta + \ boldsymbol \ epsilon 모델yRn n × pXn×pβRp ϵ N ( 0 , σ 2 V ) V = diag ( v 1 , v 2 , , v n ) σ 2 > 0 y = X β + ϵϵRnϵN(0,σ2V)V=diag(v1,v2,,vn)σ2>0

y=Xβ+ϵ
가정에서 "가중 최소 제곱"모델이라고합니다. WLS 문제는 \ begin {equation} \ arg \ min _ {\ boldsymbol \ beta} \ left (\ mathbf {y}-\ mathbf {X} \ boldsymbol \ beta \ right) ^ {T} \ mathbf {V} ^ {-1} \ left (\ mathbf {y}-\ mathbf {X} \ boldsymbol \ beta \ right) \ text {.} \ end {equation} \ mathbf {y} = \ begin {bmatrix
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

보다 간결하게 대답하기 위해 weightsin R을 사용한 가중 최소 제곱 회귀 분석 은 다음과 같은 가정을 weights = c(w_1, w_2, ..., w_n)합니다. 하자 , 가 수 설계 행렬 파라미터 벡터, 그리고 은 평균 및 분산 행렬 갖는 오류 벡터입니다 . 여기서 입니다. 그런 다음 원래 게시물의 유도 단계와 동일한 단계에 따라 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.