Ця публікація детально описує відповіді в коментарях до питання.
Нехай . Зафіксуйте будь-яку e 1 ∈ R n одиничної довжини. Такий вектор завжди може бути завершений на ортонормальній основі ( e 1 , e 2 , ... , e n ) (наприклад, за допомогою процесу Грам-Шмідта ). Ця зміна основи (зі звичайної) є ортогональною: вона не змінює довжини. Таким чином розподілX=(X1,X2,…,Xn)e1∈Rn(e1,e2,…,en)
( е1⋅ X)2| | Х| |2=(e1⋅X)2X21+X22+⋯+X2n
не залежить від . Якщо взяти e 1 = ( 1 , 0 , 0 , … , 0 ), видно, що цей розподіл має таке ж, як іe1e1=(1,0,0,…,0)
X21X21+X22+⋯+X2n.(1)
Так як являюсь IID Normal, то вони можуть бути записані в вигляді СГА рази IID стандартних нормальних змінних Y 1 , ... , Y п і їх квадрати σ 2 рази Г ( 1 / 2 ) розподілів. Так як сума п - 1 незалежного Г ( 1 / 2 ) розподілу є Γ ( ( п - 1 ) / 2 )XiσY1,…,Ynσ2Γ(1/2)n−1Γ(1/2)Γ((n−1)/2), ми визначили, що розподіл є розподілом(1)
σ2Uσ2U+σ2V=UU+V
де і V = ( Х 2 2 + ⋯ + Х 2 н ) / сгU=X21/σ2∼Γ(1/2) є незалежними. Цедобре відомощо це відношення має Beta ( 1 / 2 , ( п - 1V=(X22+⋯+X2n)/σ2∼Γ((n−1)/2) розподіл. (Також дивіться тісно пов'язані нитки прирозподілі X Y, якщо X ∼ Beta ( 1 , K - 1 ) і Y ∼ chi-квадрат з 2 K градусами.)(1/2,(n−1)/2)XYX∼(1,K−1)Y∼2K
Оскільки
X1+⋯+Xn=(1,1,…,1)⋅(X1,X2,⋯,Xn)=n−−√e1⋅X
для одиничного вектора , робимо висновок, щоZє( √e1=(1,1,…,1)/n−−√Zразів більше Beta(1(n−−√)2=n варіювати. (1/2,(n−1)/2) Тому длявін має функцію щільностіn≥2
fZ(z)=n1−n/2B(12,n−12)(n−z)n−3z−−−−−−−−−√
на інтервалі (інакше дорівнює нулю).(0,n)
В якості перевірки, я імітованих незалежних реалізацій Z для сг100,000Z і п = 2 , 3 , 10 , завданих їх гістограм і накладають на графіку відповідної щільності бети (червоний колір). Угоди відмінні.σ=1n=2,3,10
Ось R
код. Він здійснює моделювання за формулою sum(x)^2 / sum(x^2)
для , де вектор довжини, породжений . Решта - це просто циклічне ( , ) та побудова графіків ( , ).Zx
n
rnorm
for
apply
hist
curve
for (n in c(2, 3, 10)) {
z <- apply(matrix(rnorm(n*1e5), nrow=n), 2, function(x) sum(x)^2 / sum(x^2))
hist(z, freq=FALSE, breaks=seq(0, n, length.out=50), main=paste("n =", n), xlab="Z")
curve(dbeta(x/n, 1/2, (n-1)/2)/n, add=TRUE, col="Red", lwd=2)
}