Studiecirkel: Statistics One

Diskutera sådant som rör föreningen Vetenskap och Folkbildning eller den skeptiska rörelsen i allmänhet.
tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » tor 01 nov 2012, 01:37

föreläsning 7a, del 2

Vi har hittills studerat hur vi kan transformera koordinater fram och tillbaka mellan två cartesiska koordinatsystem (u,v) och (x,y). I varje koordinatsustem kan vi för en mängd av punkter i planet beräkna deras varianser och kovarianser (d.v.s. deras kovariansmatris), eller ekvivalent deras standardavvikelser och linjära korrelationskoefficient. För att beräkna dessa i ett transformerat koordinatssystem så transformerade vi först koordinaterna för varje punkt var för sig, och beräknade sedan kovariansmatrisen för den nya uppsättningen koordinatkolumnvektorer. Men eftersom koordinaterna för varje punkt har transformerats med samma transformationsmatris, skulle vi inte kunna beräkna den nya kovariansmatrisen direkt genom en transformation av den gamla kovariansmatrisen? Vi studerar nu hur vi kan göra en sådan koordianttransformation direkt på kovariansmatrisen.

(I denna del av min kommentar till föreläsning 7a så försöker jag skriva matriser något mer i normal matematisk notation på flera rader, och skriver ekvationer över flera rader för att detta skall fungera.)

Kovariansmatrisen är
Cov_{xy} = \sum_{n=1}^N(
[x_n^2, x_n*y_n
x_n*y_n, y_n^2]
)/(N-1)
=
[v_x, c_{xy}
c_{xy}, v_y]
där x_n är x-värdet för punkt nr. n och y_n är y-värdet för punkt nr. n, v_x variansen för x, v_y variansen för y, c_{xy} kovariansen för xy.

Yttre produkten av N gånger M matrisen C och O gånger P natrisen D är N*O gånger M*P matrisen C¤D, där C¤D kan ses som en N gånger M matris där varje element är en O gånger P matris. Elementen i C¤D är lika med är lika med talet elementet i matrisen C på motsvarande plats, gånger matrisen D. Så C¤D är matrisen C med varje element i C multiplicerat med D.
Matrisen i varje term i summan för kovariansmatrisen är alltså yttre produkten
[x_n,
y_n] ¤
[x_n, y_n]
=
[x_n,
y_n])¤
t([x_n,
y_n])
Men
[x_n,
y_n]
= R %*%
[u_n,
v_n]

[x_n,
y_n] ¤
t([x_n,
y_n])
=
(R %*%
[u_n,
v_n]) ¤
t(R %*%
[u_n,
v_n])
=
(R %*%
[u_n,
v_n]) ¤
(t([u_n,
v_n]) %*%
t(R))
Normalt är inte (C %*% D)¤E lika med C %*% (D¤E), men det är lätt att se direkt från definitionerna av yttre produkt av matriser och matrisprodukt av matriser att det gäller för specialfallet att C är en kolumnvektor. Så
[x_n,
y_n] ¤
[x_n, y_n]
=
R %*%
([u_n,
v_n] ¤
[u_n, v_n])
%*% t(R)
Men matrismultiplikation är distributiv över matrisaddition, så multiplikationerna med R och t(R) kan tas utanför summan över alla punkterna i stickprovet. Använder vi detta och att t(R)=R^(-1) så har vi
Cov_{xy} = R %*% Cov_{uv} %*% R^(-1)
Vilket alltså är den sökta transformationsformeln för kovariansmatrisen. Multiplicerar vi detta från vänster med R(-1) och från höger med R, så har vi transformationen i motsatt riktning
Cov_{uv} = R(-1) %*% Cov_{xy} %*% R


Vi kan t.ex. använda detta för att beräkna kovariansmatrisen för befolkningen i xy-systemet i vårt exempel i tdnorm1.r och tdnorm2.r. Per konstruktion av exemplet vet vi att kovariansmatrisen för befolkningen i uv-systemet är Cov_{uv} = matrix(c(s_u^2,0,0,s_v^2),2,2), och därför Cov_{xy} beräknas från denna genom transformationen Cov_{xy} = R %*% Cov_{uv} %*% t(R)


Vi studerar nu det omvända problemet. Vi har ett stickprov med xy-koordinaterna för punkterna i stickprovet. Korrelationskoefficienten är skilld från noll (r_{xy} inte lika med noll), och vi vill veta i vilket roterat koordinatsystem uv som korrelationen är lika med noll (cor_{uv}=0).

I uv-systemet är kovariansmatrisen diagonal. Så i uv-systemet så är kovariansmatrisen multiplicerad med en uv-representation av någon av basvektorerna för uv-koordinatsystemet lika med variansen för den aktuella uv-koordinaten gånger denna kolumnvektor. Att en kolumnvektor multiplicerad med en matris blir proportionell mot den ursprungliga vektor kallar vi att denna vektor är en egenvektor till matrisen, och proportionalitetskonstanten kallar vi egenvärdet motsvarande denna egenvektor.
För u:
Cov_{uv} %*% eu_{uv}
=
[v_u, 0
0, v_v]
%*%
[1
0]
=
[v_u
0]
=
v_u * eu_{uv}
För v:
Cov_{uv} %*% ev_{uv}
=
[v_u, 0
0, v_v]
%*%
[0
1]
=
[0
v_v]
=
v_v * ev_{uv}
Så eu_{uv} och ev_{uv} är egenvektorer till Cov_{uv} med egenvärdena v_u respektive v_v.

Vi visar nu att representationerna av eu och ev i xy-koordinatsystemet är egenvektorer till Cov_{xy}, också dessa med egenvärdena v_u respektive v_v
Cov_{xy} %*% eu_{xy}
=
(R %*% Cov_{uv} %*% R^(-1)) %*%
(R %*% eu_{uv})
=
(R %*% Cov_{uv}) %*% (R^(-1) %*% R) %*% eu_{uv}
=
R %*% (Cov_{uv} %*% eu_{uv})
=
R %*% (v_u * eu_{uv})
=
v_u *(R %*% eu_{uv})
=
v_u * eu_{xy}
Så eu_{xy} är en egenvektor till Cov_{xy} med egenvärdet v_u. Att ev_{xy} är en egenvektor till Cov_{xy} med egenvärdet v_v visas på motsvarande sätt.

Så om vi kan lösa egenvärdesekvationen
Cov_{xy} %*% x = v * x
där x är en tvåradig kolumnvektor och v ett tal (och vi räknar inte t([0,0]) som en egenvektor trots att den formellt satisfierar ekvationen), och om egenvärdesekvationen har en entydig lösning bestående av ett par av två egenvektorer med motsvarande egenvärden, så måste dessa egenvektorer vara våra eu_{xy} och ev{xy}, och motsvarande egenvärden v_u och v_v. För alla reella symmetriska matriser kan man visa att en lösning alltid existerar, och att den ganska allmänt är i stort sett entydig. "Ganska allmänt" är att lösningen är i stort sett entydig om och endast om de två varianserna v_u och v_v i uv-koordinatsystemet inte är lika. Vi förstår varför vi inte kan ha någon entydig lösning om varianserna är lika; om s_u=s_v så är fördelningen cirkulärt symmetrisk, och är därför cirkulärt symmetrisk också i alla roterade koordinatsystem. Kovariansen är lika med noll i alla roterade koordinatsystem och därför finns det inte någon unik koordinatrotation som roterar koordinatsystemet så att kovariansen blir noll. Om v_u=v_v så måste därför också kovariansen (och korrelationskoefficienten) vara lika med noll i alla roterade koordinatsystem. Om v_u=v_v så är vilken vektor som helst egenvektor. Omvänt gäller också att om korrelationen är skild från noll så är fördelningen inte cirkelsymmetrisk, och v_u är inte lika med v_v. "I stort sett" entydig innebär att egenvektorerna är entydiga sånär som på ordningen mellan dem och normeringen av dem. Att lösningen inte kan vara entydig i ordningen av egenvektorerna förstår vi av att om en rotation till ett nytt koordinatsystem uv gör kovariansmatrisen diagonal (kovariansen lika med noll), så skulle också en transformation till ett system UV där U är v och V är u göra kovariansmatrisen diagonal. Ibland använder man här konventionen att alltid numrera egenvektorerna i ordning efter egenvärdena (så lägsta egenvärdet är nummer 1, nästlägsta nummer 2, etc.) för att få bort denna flertydighet hos egenvektorerna. Flertydigheten från egenvektorernas normering förstår vi från att om vi multiplicerar en egenvektor med ett tal vilket som helst (dock ej noll) så är den nya vektor också en egenvektor med samma egenvärde. Eftersom vi är ute efter en ortogonal transformationsmatris så väljer vi därför den fria faktorn här så att egenvektorerna blir normerade. Men det vilkoret sätter endast absolutbeloppet på faktorn. Om en vektor är en normerad egenvektor, så är också minus ett gånger den vektorn en normerad egenvektor. Att byta tecknet på basvektorn innebär att byta riktningen på motsvarande koordiantaxel. Och vi inser att denna flertydighjet i lösningen måste finnas, om korrelationen mellan u och v är noll i ett visst koordinatsystem uv, så måste korrelationen vara noll också i ett nytt koordinatsystem UV där det nya koordinatsystemet är det gamla transformerat genom att minst en av uv-koordinataxlarna bytt riktning.
Med dessa vilkor så ger alltså egenvektorsekvationens två lösningar för x och v (kalla dessa x1, v1 och x2, v2):
eu_{xy} = x1, v_u = v1
ev_{xy} = x2, v_v = v2
Och vi har vår sökta rotationsmatris R=[eu_{xy},ev_{xy}] (egentligen är det R(-1) som är den enligt hur vi definierade problemet som är vår "sökta" transformation (vi vill här gå från xy-koordinater till uv-koordinater), men eftersom transformationsmatrisen är ortogonal så är det trivialt att invertera den, så det ena går lika bra som det andra).

I R (i datorprogrammet R, inte i rotationsmatrisen R!) så beräknas egenvektorer och egenvärden till matriser med funktionen "eigen". Funktionen levererar både egenvektorer och egenvärden, och dessa väljs ut från resultatet levererat av "eigen" med dollaroperatorn följt av namnet på det objekt av resultatet man söker ("vectors" eller "values"). Exempel
> A <- matrix(c(3,1,1,2),2,2)
> A
[,1] [,2]
[1,] 3 1
[2,] 1 2
> eigen1 <- eigen(A)
> eigen1
$values
[1] 3.618034 1.381966
$vectors
[,1] [,2]
[1,] -0.8506508 0.5257311
[2,] -0.5257311 -0.8506508
Kontrollera att kolumnerna i eigen1$vectors verkligen är egenvektorer till A med egenvärden som i eigen1$values:
> A %*% eigen1$vectors[,1]
[,1]
[1,] -3.077684
[2,] -1.902113
> eigen1$values[1]*eigen1$vectors[,1]
[1] -3.077684 -1.902113
Varför R transponerar den senaste utskriften förstår jag inte, men numeriskt stämmer det ju i alla fall, första kolumnen är en egenvektor med egenvärdet lika med första elementet i eigen1$values. Testa nu andra kolumnen
> A %*% eigen1$vectors[,2]
[,1]
[1,] 0.7265425
[2,] -1.1755705
> eigen1$values[2]*eigen1$vectors[,2]
[1] 0.7265425 -1.1755705
Också andra kolumnen är verkligen en egenvektor, med det angivna egenvärdet. Kontrollera nu att vektorerna är ortonormerade
> t(eigen1$vectors)%*%eigen1$vectors
[,1] [,2]
[1,] 1.00000e+00 2.68069e-17
[2,] 2.68069e-17 1.00000e+00
Kolumnvektorerna är ortonormerade (till en mycket god numerisk approximation), eller likvärdigt uttryckt, matrisen eigen1$vectors är ortogonal.


Detta exemplifieras ytterligare i följande skript. Skriptet tdnorm3.r är en komplettering till vårt tidigare exempel tdnorm2.r. Här studerar vi också att använda transformationen av den kända kovariansmatrisen för befolkningen i uv-systemet (från konstruktionen av problemet), till kovariansmatrisen i xy-systemet. Redan tidigare kunde vi skatta kovariansmatrisen i xy-systemet från vårt stickprov. Genom att jämföra dessa har vi alltså direkt samplingsfelet. Sedan testar vi också att från den skattade kovariansmatrisen i xy-systemet finna en koordinattransformation till ett koordinatsystem UV där den skattade kovarianmatrisen är diagonal. Från konstruktionen av vårt problem vet vi att det koordinatsystemet är ungefär vårt ursprungliga uv-koordinatsystem. Om det inte varit för samplingsfelet så skulle UV-systemet varit exakt uv-systemet (möjligen sånär som på ordningen och riktningarna för koordinataxlarna). Men eftersom den ena transformqationen är från befolkningsdata med den andra från stickprovsdata så kan vi förvänta oss en liten skillnad mellan dem p.g.a. samplingsfel. (Dessutom blir det också en liten skillnad p.g.a. avrundningsfel i de numeriskia beräkningarna i R naturligtvis.)

Kod: Markera allt

# R-skript "tdnorm3.r", VoF studiecirkel Statistics One, oktober 2012
# Representation av tvådimensionell normalfördelning med konturplot
# och scatterplot. Skapa en okorrelerad men osymmetrisk fördelning i
# koordinatsystemet uv, och betrakta denna fördelning i det nya
# koordinatsystemet xy som är uv-systemet roterat vinkeln alfa
# från uv-koordinaterna. Samma som tdnorm2.r men beräkna nu också
# kovariansmatrisen för xy genom att rotera kovariansmatrisen för uv
# (d.v.s. från diag(s_u,s_v), men visa också kovariansmatrisen för uv
# skattad från de utslumpade uv-punkterna som jämförelse)), och jämför
# med kovariansmatris skattad från de utslumpade xy-punkterna. Visa
# också dessa resultat normaliserade som Pearsons korrelationskoefficient.
# Och testa sedan också att rotera den skattade xy-kovariansmatrisen till
# diagonal UV-kovariansmatris.
##
M <- 1000  # antal punkter i scatterplot
N <- 101  # antal gridlinjer längs x- och y-axel separat i konturplot
l <- 2  # max avstånd från noll för x och y
s_u <- 1  # standardavvikelse för u
s_v <- 0.3  # standardavvikelse för v
alfa <- pi/6  # vinkel xy-systemet är moturs roterat från uv-systemet
##
x <- -l+c(0:(N-1))*l*2/(N-1) # vektor med x-värdena för konturplot
y <- x  # vektor med y-värdena för konturplot
# skapa vektor z som sedan skall innehålla värdena för den tvådiemnsionella
# sannolikhetstätheten i (x,y)-gridpunkterna:
z <- matrix(c(1:(N^2)),N,N)
# rotationsmatris för att få xy-koordinater från uv-koordinater:
R_uv2xy <- matrix(c(cos(alfa),-sin(alfa),sin(alfa),cos(alfa)),nrow=2)
# rotationsmatris för att få uv-koordinater från xy-koordinater:
R_xy2uv <- t(R_uv2xy)
##
# beräkna värdena för sannolikhetstätheten i xy-gridpunkterna,
# denna räknas ut som vad värdet är för sannolikhetstätheten i
# motsvarande uv-gridpunkt, där "uv"=R_xy2uv%*%"xy":
for(ix in 1:N){  # slinga över index ix för x-värden:
   #  skapa en matris med två rader och N kolumner, där alla elementen i
   #  första raden är x-värdet för nuvarande x-grid-index ix, och andra raden
   #  är en radvektor med alla y-värdena i griden (så vektorn xy är en
   #  radvektor där elementen är tvåradiga kolumnvektorer som innehåller
   #  xy-koordinaterna för denna rad av xy-gridpunkter):
   xy <- matrix(c(seq(from=x[ix],by=0,length=N),y),nrow=2,byrow=TRUE)
   #  skapa radvektorn som vars element är tvåradiga kolumnvektorer som
   #  innehåller uv-koordinatvärdena som motsvarar xy-koordinatvärdena i
   # matrisen xy:
   uv <- R_xy2uv %*% xy
   #  beräkna sannolikhetstätheterna för xy-punkterna i matrisen xy:
   z[ix,] <- dnorm(uv[1,],mean=0,sd=s_u)*dnorm(uv[2,],mean=0,sd=s_v)
}
##
#  skapa en matris uv som är en radvektorer med M kolumner vars element är
#  två radiga kolumnvektorer, där första elementet i kolumnvektor är u-värde
#  utslumpat från normalsannolikhetsfördelning med standardavvikelse s_u
#  och andra elementet i kolumnvektor är v-värde utslumpat från
#  normalsannolikhetsfördelning med standardavvikelse s_v:
uv <- matrix(c(rnorm(M,mean=0,sd=s_u),rnorm(M,mean=0,sd=s_v)),nrow=2,byrow=TRUE)
#  skapa matris som är en radvektor där elementen är tvåradiga kolumnvektorer
#  som är xy-koordinaterna för de utslumpade punkterna i matrisen uv:
xy <- R_uv2xy %*% uv
##
##
#  beräkna och skriv ut korrelationskoefficienten mellan u och v för
#  stickprovet av (u,v)-punkter i matrisen uv:
cor_uv <- cor(uv[1,],uv[2,])
print("cor_{uv}:",quote=FALSE)
print(cor_uv)
#  jämför kovarians skattad av stickprovet med kovarians för befolkningen:
print("skattad uv-kovarians, skattad uv-kovariansmatris,",quote=FALSE)
print("och uv-kovariansmatris för befolkningen:",quote=FALSE)
cov_uv <- cov(uv[1,],uv[2,])  # kovarians för uv-stickprovet
print(cov_uv)
cov_uv <- cov(t(uv))  # kovariansmatris för uv-stickprovet
print(cov_uv)
# kovariansmatrisen för befolkningen i uv-koordinatsystemet:
cov0_uv <- matrix(c(s_u^2,0,0,s_v^2),2,2)
print(cov0_uv)
##
#  beräkna och skriv ut korrelationskoefficienten mellan x och y för
#  stickprovet av (x,y)-punkter i matrisen xy:
cor_xy <- cor(xy[1,],xy[2,])
print("cor_{xy}:",quote=FALSE)
print(cor_xy)
#  jämför kovarians skattad av stickprovet med kovarians för befolkningen:
print("skattad xy-kovarians, skattad xy-kovariansmatris,",quote=FALSE)
print("och xy-kovariansmatris för befolkningen:",quote=FALSE)
cov_xy <- cov(xy[1,],xy[2,])  # kovarians för xy-stickprovet
print(cov_xy)
cov_xy <- cov(t(xy))  # kovariansmatris för xy-stickprovet
print(cov_xy)
# kovariansmatrisen för befolkningen i xy-koordinatsystemet:
cov0_xy <- R_uv2xy %*% cov0_uv %*% R_xy2uv
print(cov0_xy)
#  visa som Pearsons korrelationskoefficient:
print("standardavvikelser för x och för y och korrelationskoefficient för xy",
quote=FALSE)
print("skattade ([1,]) och för befolkningen ([2,]):",quote=FALSE)
s_x <- sqrt(cov_xy[1,1])  # skattad standardavvikelse för x
s_y <- sqrt(cov_xy[2,2])  # skattad standardavvikelse för y
cor_xy <- cov_xy[1,2]/(s_x*s_y) # skattad korrelationskoefficient för xy
s0_x <- sqrt(cov0_xy[1,1])  # standardavvikelse för x för befolkningen
s0_y <- sqrt(cov0_xy[2,2])  # standardavvikelse för y för befolkningen
cor0_xy <- cov0_xy[1,2]/(s0_x*s0_y) # korrelationskoefficient xy för befolk
print(matrix(c(s_x,s_y,cor_xy,s0_x,s0_y,cor0_xy),2,3,byrow=TRUE))
print("skattad korrelationskoefficient för xy:"
,quote=FALSE)
cor_xy <- cor(t(xy))
print(cor_xy)
cor_xy <- cov2cor(cov_xy)
print(cor_xy)
##
# beräkna en rotationsmatris R_UV2xy mellan ett koordinatsystem UV
# och koordinatsystemet xy, där kovariansmatrisen cov_UV (som är
# kovariansmatrisen skattad från de utslumapde xy-punkterna (cov_xy)
# roterad till UV-koordinatsystemet cov_UV = R_xy2UV %*% cov_xy %*% R_UV2xy)
# är diagonal, cov_UV = matrix(c(s_U^2,0,0,s_V^2),2,2):
print(" ",quote=FALSE) # lägg en blanklinje för att sklija på utskrifterna
# beräkna egenvektorer (d.v.s. den sökta transformationsmatrisen, möjligen
# sånär som på ordningen av vektorerna och tecknet på vektorerna) och
# egenvärden (d.v.s. varianserna för U och V, möjligen sånär som på
# ordningen av värdena), för cov_xy:
eigen1 <- eigen(cov_xy)
print("variansern för uv bara för jämförelse:",quote=FALSE)
print(c(cov_uv[1,1],cov_uv[2,2]))
print("eigen1 (resultatet från egenvärdesberäkningen för cov_xy):"
,quote=FALSE)
print(eigen1)
print("UV-kovariansmatrisen (sånär som på ordningen mellan U och V):"
,quote=FALSE)
# värdena på diagonalen av den transformerade cov_xy direkt från eigen:
print(eigen1$values)
# testa att istället själva göra transformationen:
print(t(eigen1$vectors)%*%cov_xy%*%eigen1$vectors)
# hitta vilken av eigen1$values[1] och eigen1$values[2] som ligger närmast
# s_u^2 respektive s_v^2, och gör ordningen så att första kolumnen i
# eigen1 svarar mot U och andra kolumnen  mot V:
if(((eigen1$values[1]-cov_uv[1,1])^2+(eigen1$values[2]-cov_uv[2,2])^2) >
((eigen1$values[1]-cov_uv[2,2])^2+(eigen1$values[2]-cov_uv[1,1])^2)){
   # skifta ording på första och andra kolumnerna i eigen1:
   print("skifta ordning på kolumnerna i eigen1",quote=FALSE)
   t1 <- eigen1$values[1]
   eigen1$values[1] <- eigen1$values[2]
   eigen1$values[2] <- t1
   t1 <- eigen1$vectors[,1]
   eigen1$vectors[,1] <- eigen1$vectors[,2]
   eigen1$vectors[,2] <- t1
}else{
   print("behåll ursprunglig ordning på kolumnerna i eigen1"
,quote=FALSE)
}
for(k in 1:2){
   #print(t(eigen1$vectors[,k])%*%R_uv2xy[,k])
}
# testa om eU_{xy} (= {+ eller -}eigen1$vectors[,1]) ligger medriktad
# eller motriktad eu_{xy}, om motriktad så byt tecken på eigen1$vectors[,1]:
if(t(eigen1$vectors[,1])%*%R_uv2xy[,1]<0){
   eigen1$vectors[,1]=-eigen1$vectors[,1]
   print("byt tecken på första kolumnen i eigen1$vectors",quote=FALSE)
}else{
   print("behåll tecken på första kolumnen i eigen1$vectors",quote=FALSE)
}
# testa om eV_{xy} (= {+ eller -}eigen1$vectors[,2]) ligger medriktad
# eller motriktad ev_{xy}, om motriktad så byt tecken på eigen1$vectors[,2]:
if(t(eigen1$vectors[,2])%*%R_uv2xy[,2]<0){
   eigen1$vectors[,2]=-eigen1$vectors[,2]
   print("byt tecken på andra kolumnen i eigen1$vectors",quote=FALSE)
}else{
   print("behåll tecken på andra kolumnen i eigen1$vectors",quote=FALSE)
}
#print(eigen1$vectors)
R_UV2xy <- eigen1$vectors
print("rotationsmatris R_uv2xy:",quote=FALSE)
print(R_uv2xy)
print("rotationsmatris R_UV2xy beräknad från de utslumpade xy-punketerna:"
,quote=FALSE)
print(R_UV2xy)
##
#  rita konturplot av den tvådimensionella sannolikhetstätheten (i
#  xy-koordinatsystemet):
contour(x,y,z)
#  rita gul scatterplot av de utslumpade punkterna (i xy-koordinatsystemet):
points(xy[1,],xy[2,],col="yellow")
##
#  skapa en matris som är en radvektor med två kolumner, där varje element
#  är en tvåradig kolumnvektor, där första kolumnvektor är uv-koordinaterna
#  (-1,0) och andra kolumnvektor uv-koordinaterna (1,0),
#  d.v.s. en rät linje mellan dessa två punkter är u-koordinataxeln
#  mellan u=-1 och u=+1:
uv <- matrix(c(-l,0,l,0),2,2)
#  skapa en matris som innehåller samma punkter som matrisen uv, men med
#  deras koordinater i xy-systemet:
xy <- R_uv2xy %*% uv
#  rita en grön linje som är u-koordinataxeln mellan u=-1 och u=+1:
lines(xy[1,],xy[2,],col="green")
#  rita en grön punkt på u-axeln för u=+1, d.v.s. från origo till
#  punkten är basvektorn eu:
points(R_uv2xy[1,1],R_uv2xy[2,1],col="green")
##
#  skapa en matris som innehåller xy-koordinaterna (-1,0) och (1,0),
#  d.v.s. en rät linje mellan dessa är x-koordinataxeln mellan
#  x=-1 och x=+1:
xy <- matrix(c(-l,0,l,0),2,2)
#  rita en rosa linje som är x-axeln mellan x=-1 och x=+1:
lines(xy[1,],xy[2,],col="pink")
#  rita en rosa punkt på x-axeln för x=+1 (d.v.s. från origo till
#  punkten är ex):
points(1,0,col="pink")
##
#  skapa en matris som är en radvektor med två kolumner, där varje element
#  är en tvåradig kolumnvektor, där första kolumnvektor är UV-koordinaterna
#  (-(0.95)*l,0) och andra kolumnvektor uv-koordinaterna (0.95*l,0),
#  d.v.s. en rät linje mellan dessa två punkter är U-koordinataxeln
#  mellan U=-l*0.95 och U=+l*0.95:
UV <- matrix(c(-0.95*l,0,0.95*l,0),2,2)
#  skapa en matris som innehåller samma punkter som matrisen UV, men med
#  deras koordinater i xy-systemet:
xy <- R_UV2xy %*% UV
#  rita en blå linje som är U-koordinataxeln mellan u=-0.95*1 och u=+0.95*1:
lines(xy[1,],xy[2,],col="blue")
#  rita en grön punkt på U-axeln för U=+1, d.v.s. från origo till
#  punkten är basvektorn eU:
points(R_UV2xy[1,1],R_uv2xy[2,1],col="blue")

##
#  rita återigen samma konturplot som ovan, men utan att ta bort det
#  tidigare ritade på plotskärmen (för att konturplotten inte skall
#  döljas av scatterplotten):
contour(x,y,z,add=TRUE)
#image(x,y,z)
Jag har här lagt "åäö" som visas korrekt i VoF-forum. Här verkar finnas problem med att dessa kodas olika här och i cygwin. Kör jag koden klistrad direkt från VoF-form kan jag få felmeddelanden som visar sig vara att den har hittat okända tecken, som visar sig vara där det står åäö på forumet men som ser helskumma ut i cygwin. Jag måste byta dem manuellt. Förmodligen finns något bättre knep, men datorer är inte mitt ämne så jag själv håller mig till manuellt byte. Normalt skriver jag inga åäö på datorn, men nu när vi gör det för VoF-forum bör det ju vara sådana, kodade så att de ser ut som åäö på forumet. Så se eventuellt upp för detta problem.
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » mån 05 nov 2012, 02:58

(Jag ligger litet efter i tiden nu på studiecirkeln. Jag återkommer, förmodligen mot mitten eller slutet av veckan med litet större material. Men jag postar redan nu ett litet material som sätter de två föregående postningarna i perspektiv. Jag hade egentligen tänkt den kommentaren som en introduktion till det nästkommande större materialet som jag håller på att färdigställa men som det återstår litet på som jag inte har tid för just nu. Men det passar bra också som en kommentar efter de två föregående, så för att ha något postat i alla fall nu i början på veckan så kommer det nu istället.)

föreläsning 7a, del 3


Så vi har nu en metod för att anpassa en rät linje så väl som möjligt till en uppsättning datapunkter. Om medelvärdet för uppsättningen datapunkter ligger i origo: Rotera koordinatsystemet så att kovariansen är lika med noll. Det finns fyra olika rotationer som ger detta resultat, ty om kovariansen är lika med noll och vi roterar 90 grader ytterliggare så är återigen variansen lika med noll, vi har bara låtit den ursprungliga V-axeln bli den nya U-axeln och den ursprungliga U-axeln bli den nya V-axeln fast med motsatt riktning. (Sammanlagt finns åtta olika koordinatsystem som ger kovariansen lika med noll (om vi som här håller oss till koordinatsystem där koordinataxlarna är räta linjer och där avstånden mellan skalstrecken är lika med ett (eller vilken längd som helst, så länge vi låter denna längd vara konstant) och med räta vinklar mellan koordinataxlarna), ty vi kan också spegla koordinatsystemet i en av koordinataxlarna (byt tecken på en av axlarna men inte på den andra). Av konvention brukar vi dock alltid använda ett koordinatsystem där V-axeln fås genom att rotera 90 grader moturs från U-axeln. Och inom denna konvention har vi fyra olika alternativ där kovariansen är lika med noll, och dessa fås från varandra genom rotationer av koordinatsystemet med 90 grader. När vi tar fram U- och V-axlarna som egenvektorerna till kovariansmatrisen så fås de åtta olika alternativen genom de två olika möjliga valen på vilken av egenvektorerna som vi låter vara U- respektive V-axel, samt genom de totalt fyra olika valen för tecknen på normaliseringarna av de två egenvektorerna.) I den konvention vi använder här så väljer vi ett av de två av dessa fyra alternativ där variansen för V är minst. U-axeln blir då den räta linje som bäst går genom datapunkterna. Ty variansen för V i detta nya koordinatsystem är medelvärdet för kvadraten på datapunkternas avstånd från U-axeln. Och detta koordinatsystem är det koordinatsystem där denna varians är som minst (eller dessa två koordinatsystem är de två koordinatsystem där variansen för V är som minst, ty det spelar för detta igen roll vilken riktning U-axeln har). Ty detta UV-koordinatsystem är det koordinatsystem där vi kan se punkterna som utspridda symmetrsikt kring U-axeln. Och roterar vi koordinatsystemet litet moturs så kommer den nya abskissan att vara något upp från den ursprungliga för den positiva delen av U-axeln. Bidraget till variansen från de punkter till höger om V-axeln (d.v.s. för de som har positiva U-värden) som ligger ovanför U-axeln (har positiva V-värden) men inte ligger så nära U-axeln att de i det nya koordinatsystemet hamnar under denna, kommer att minska något eftersom den nya abskissan kommer något närmare dessa punkter. Medan bidraget för alla de punkter som ligger under den ursprungliga U-axeln kommer att öka något eftersom den nya abskissan kommer något längre ifrån dessa punkter. Totalt ger dessa två bidrag ett positivt nettotillskott till variansen för V, ty dels och framförallt är det något fler punkter som ligger under den ursprungliga abskissan än som ligger över den nya abskissan (eftersom den ursprungliga abskissan ligger symmetriskt genom fördelningen), dels skulle lika många punker i dessa två mängder gett ett positivt nettobidrag eftersom vi tar kvadraten på avståndet (för mycket små rotationsvinlar är det att antalet punkter i dessa två mängder är något olika som är det viktiga, ty skillnaden p.g.a. kvadreringen blir försumbar vid tillräckligt små rotationer). Punkterna som abskissan passerar vid den lilla rotationen ger inget nettobidrag till ändringen i variansen eftersom de kommer för det nya koordinatsystemet i genomsnitt att ligga lika långt under den nya abskissan som de i det ursprungliga kordinatsystemet låg över abskissan (vi gör en så liten rotation att sannolikhetstätheten inte förändras ickeförsumbart över det lilla avstånd som abskissan rör sig) . På motsvarande sätt inses att också de punkter som ligger till vänster om V-axeln ger ett positivt nettobidrag till ökningen av variansen vid en liten rotation av koordinatsystemet. (Variansen är inte strikt lika med medelvärdet av de kvadratiska avvikelserna från linjen, men (N-1)/N gånger variansen (där N är antalet datapunkter i vårt sampel). Men en minimering av en funktion vilken som helst som är proportionell mot den kvadratiska medelavvikelsen med en positiv proportionalitetskonstant är en minimering av också den kvadratiska medelavvikelsen själv.)

Följande R-skript "tdnorm4.r" ritar graferna av de olika statistika som funktion av den vinkel koordinatsystemet har roterat. Notera att variansen i y har sitt minimum då kovariansen i xy är lika med noll (vilket här (från konstruktionen av problemet) sker för vinkeln noll d.v.s. då xy-systemet är det ursprungliga uv-systemet).

Kod: Markera allt

# R-skript "tdnorm4.r", VoF studiecirkel Statistics One, november 2012
# Varianserna, kovariansen, och korrelationskoefficoenten som funktion
# av vinkeln koordinatsystemet har roterats från det ursprungliga
# koordinatsystem där sannolikhetsfördelningen skapats som en okorrelerad
# men osymmetrisk tvådimensionell normalfördelning.
s_u <- 1  # standardavvikelse för u
s_v <- 0.05  # standardavvikelse för v
K <- 200  # antal alfa-punkter -1
##
##
v_x <- c(0:K)
v_y <- c(0:K)
c_xy <- c(0:K)
alfa <- c(0:K)*2*pi/K-pi
for(k in 0:K){
   # rotationsmatris för att få xy-koordinater från uv-koordinater:
   R_uv2xy <- matrix(
   c(cos(alfa[k+1]),-sin(alfa[k+1]),sin(alfa[k+1]),cos(alfa[k+1])),nrow=2)
   # rotationsmatris för att få uv-koordinater från xy-koordinater:
   R_xy2uv <- t(R_uv2xy)
   # kovariansmatrisen för befolkningen i xy-koordinatsystemet:
   cov0_xy <- R_uv2xy %*% cov0_uv %*% R_xy2uv
   v_x[k+1] <- cov0_xy[1,1]
   v_y[k+1] <- cov0_xy[2,2]
   c_xy[k+1] <- cov0_xy[1,2]
   #s0_x <- sqrt(cov0_xy[1,1])  # standardavvikelse för x för befolkningen
   #s0_y <- sqrt(cov0_xy[2,2])  # standardavvikelse för y för befolkningen
}
layout(c(1,2,3),3,1)
plot(c(alfa,alfa,alfa),c(v_x,v_y,c_xy),type="n"
,xlab="",ylab="rosa: v_x, röd: v_y, blå: c_xy",)
lines(alfa,v_x,col="pink")
lines(alfa,v_y,col="red")
lines(alfa,c_xy,col="blue")
for(k in -2:2){
   lines(c(k*pi/2,k*pi/2),
   c(min(c(v_x,v_y,c_xy)),max(c(v_x,v_y,c_xy))),col="black")
}
lines(c(-pi,pi),c(0,0),col="black")
plot(c(alfa,alfa,alfa),c(v_x*v_y,c_xy^2,v_x*v_y-c_xy^2),type="n"
,xlab="",ylab="röd: v_x*v_y, rosa: c_xy^2, grön: v_x*v_y-c_xy^2")
lines(alfa,v_x*v_y,col="red")
lines(alfa,c_xy^2,col="pink")
lines(alfa,v_x*v_y-c_xy^2,col="green")
for(k in -2:2){
   lines(c(k*pi/2,k*pi/2),
   c(min(c(v_x*v_y,c_xy^2,v_x*v_y-c_xy^2)),
   max(c(v_x*v_y,c_xy^2,v_x*v_y-c_xy^2))),col="black")
}
lines(c(-pi,pi),c(0,0),col="black")
s_x <- sqrt(v_x)
s_y <- sqrt(v_y)
r_xy <- c_xy/(s_x*s_y)
plot(c(alfa,alfa,alfa),c(s_x,s_y,r_xy),type="n"
,xlab="alfa",ylab="rosa: s_x, röd: s_y, blå: r_xy")
lines(alfa,s_x,col="pink")
lines(alfa,s_y,col="red")
lines(alfa,r_xy,col="blue")
for(k in -2:2){
   lines(c(k*pi/2,k*pi/2),
   c(min(c(s_x,s_y,r_xy)),max(c(s_x,s_y,r_xy))),col="black")
}
lines(c(-pi,pi),c(0,0),col="black")

Så att välja den räta linje som går genom origo och är riktad längsmed en av egenvektorerna för kovariansmatrisen ger alltså den räta linje där datapunkterna har minsta möjliga kvadratiska medelavstånd till linjen. Om medelvärdet är noll, i annat fall så uppnår vi samma resultat genom att välja den räta linje som har samma riktning men som går genom medelvärdet (M_x,M_y) (kom ihåg att i beräkningen av kovariansmatrisen så är medelvärdet bortsubtraherat för både varianserba och kovariansen). Att minimera medelvärdet på kvadraterna av avstånden från linjen till datapunkterna är ett kriterium vi kan använda för den räta linje som "bäst" är den som datapunkterna faller längsmed. Men inte det enda möjliga valet för "bäst". Det finns oändligt många olika val man skulle kunna göra för kriterium för "bäst". Vilket som faktiskt är "bäst" för det man vill uppnå med den linjeanpassning man för tillfället gör beror på vad det är för problem man studerar och vad det är man vill uppnå. Vi kan dela upp diskussionen av vilket kriterium på "bäst" som är bäst i två delar:
1) Är det det kvadratiska medelavståndet som är bästa kriterium eller något annat?
2) Är det just avståndet till linjen som är bästa kriterium eller något annat?
Vad gäller 1 så kommer vi från de tidigare diskussionerna ihåg att medelvärde och ännu mera kvadratiskt medelvärde kan vara ett problematiskt mått. Det är t.ex. mycket känsligt för några få datapunkter som ligger långt utanför de flesta andra datapunkterna. Det kan i vissa fall vara en egenskap som vi faktiskt vill ha, men i i andra inte. Så att välja kvadratiskt medelavstånd som kriterium är alls icke alltid det bästa valet. Men låt oss för nu acceptera kvadratiskt medelavstånd och koncentrera oss på punkt 2.

Vi konstaterar först att ett nödvändigt kriterium för att vi skall kunna använda metoden med avstånd till linjen (eller, inte metoden utan metod, vilken metod som helst som på något sätt arbetar med just avståndet till linjen) är att variablerna på båda axlarna är i samma enheter. Ty titta vad avståndet till linjen beskrivet i xy-koordiantsystemet är. Vi skall beräkna längden på den kortaste möjliga förflyttning som tar oss från datapunkten till någon punkt på den räta linjen. Säg att datapunkten har xy-koordinater (xd,yd) och att den punkt på den räta linjen som ligger närmast datapunkten har xy-koordinaterna (xl,yl). Avståndet mellan datapunkten och linjen är då från Pythagoras sats s=sqrt((xd-xl)^2+(yd-yl)^2) och det kvadratiska avståndet är s^2=(xd-xl)^2+(yd-yl)^2. För att få de kavdratiska avstånd vi skall minimera medelvärdet av så måste vi addera kvadrater av x-värden med kvadrater av y-värden. Men det är en meningsfull operation endast om x och y är i samma enheter. Så en första tumregel kan vara att detta är en bra metod om och endast om x och y är samma typ av variabler, angivna i samma enheter. (T.ex. om både x och y är i meter så kan vi addera kvadratmeter och kvadratmetar, men om x är i meter och y i kilogram så kan vi inte addera kvadratmetar med kilogram i kvadrat.) Men det är en tumregel med många undantag. Ty vi kan alltid multiplicera x eller y med någon konstant och få nya väsentligen ekvivalenta variabler som är i samma enheter om de ursprungliag x och y inte skulle vara det. Och omvänt, om de ursprungliga x och y är i samma enheter, är vi säkra på att just de är de mest representativa variablerna för problemet eller kanske finns det andra mer representativa variabler för problemet som är de x och y vi råkar ha nu multiplicerade med konstanter med enheter på ett sådant sätt att de mer representativa variablerna inte har samma enheter? Men tumregeln fungerar ändå ganska ofta ganska bra, tillämpad på det sättet att om x och y är variabler av samma slag i mer strikt mening, x och y likvädiga i mer än att bara rent tekniskt vara angivna i samma enheter, t.ex. att det verkar rimligt att det som nu är x lika gärna skulle kunnat vara y och vice versa, så är metoden med minimering av punkternas avstånd till linjen ganska ofta en bra metod. T.ex., en arkeolog hittar rester av gammalt trävirke i marken. Detta kanske är rester från ett staket som gått längs en rät linje över marken. Arkeologen vill då beräkna den räta linje som positionerna för fyndplatserna av dessa trärester bäst faller kring. Hen beskriver datapunkterna med deras koordinater i något xy-koordinatsystem, och försöker beräkna den räta linje som datapunkterna bäst faller kring. Det finns inte på platsen någon riktning med någon specifikt priviligierad position, man skulle a-priori lika gärna kunnat lagt koordinatsystemet i den ena riktningen som den andra. I det fallet är förmodligen kriteriumet med att minimera datapunkternas medelkvadratavstånd till den räta linjen en bra metod (i alla fall om vi för tillfället för diskussionens skull accepterar att minimera medelkvadratavstånd och endast diskuterar vilket avstånd), så arkeologen väljer att lösa problemet genom att rotera koordinatsystemet så att kovariansen blir noll.

I andra fall är dock olika koordinatriktningar inte a-priori likvärdiga, och då kan det vara tveksamt som bäst att använda en metod baserad på att minimera avstånd mellan datapunkter och linjen. Observera at detta gäller om och endast om det inte finns någon faktor man skulle kunna multiplicera de ursprungliga variablerna med (inte samma faktor för båda variablerna, naturligtvis!), så att olika riktingar för koordianter för de nya multiplicerade variablerna blir a-priori likvärdiga. En typisk sådan situation är att den oberoende variabeln, låt denna vara x, är tämligen exakt satt till vissa värden i experimetet (x[n], n=1, 2, 3, ..., N), medan för varje n så mäts motsvarande värde y[n] för den beroende variabeln med en brusig mätmetod med ickeförumbara slumpmässiga fel. Antag att det underliggande förhållandet mellan x och y är linjärt så y skulle blivit proportionellt mot x om det inte vore för de slumpmässiga felen i y. Vår uppgift är nu att försöka anpassa en rät linje så att datapunkterna till så god approximation som möjligt faller längsmed linjen. I detta fallet är det inte ett bra kriterium att minimera avstånden (eller någon funktion av dessa som kvadraten på avstånden) mellan datapunkterna och den räta linjen. Ty vi vet att felen är endast i y, inte i x. Så istället för att minimera det totala avstånden mellan punkterna och linjen så vill vi minimera avståndet längsmed y-axeln endast. På något sätt måste vi ta bort tecknen när vi minimerar dessa avstånd i y-led, ty det är lika illa att en datapunkt ligger långt under linjen som att den ligger högt över linjen. Det enklaste sättet att göra det är att kvadrera avstånden. Så vi försöker hitta en metod som minimerar medelvärdet av de kvadratiska avvikleserna i y-led mellan den räta linjen och datapunkterna. (Kvadraten på avståndet om vi går parallellt med y-axeln från linjen till punkten. Till skillnad från den föregående metoden där vi använde kvadraten på avståndet om vi går vinkelrät ut från linjen till datapunkten (d.v.s. kvadraten på avståndet för den kortaste vägen från linjen till punkten).)

Ovan antog vi att det ostörda y var en strikt linjär funktion av x, d.v.s. y=k*x. Men vi kan ha ett förhållande som beskrivs av en rät linje även om inte nödvändigtvis y=0 då x=0, y=b+k*x. Att generalisera vår anpassningsmetod också till detta fall är lätt, så vi tar med också detta fall redan från början i vår behandling. (Kom alltså ihåg att k här är lutningskoefficienten för den räta linjen, hur mycket y ökar då x ökar med en enhet. b är värdet på y då linjen krossar y-axeln.)
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » ons 14 nov 2012, 01:32

Föreläsning 7a, del 4
Vi studerar nu hur vi genom att använda ortonormerade basfunktioner (över vår oberoende-variabel-stickprov) kan anpassa en (eventuellt olinjär) modellfunktion till våra mätdata.


Vi kan också lätt generalisera denna ovan beskrivna anpassningsmetod till också många ickelinjära samband mellan x och y. Det enda vilkoret för att vår metod skall fungera är att den funktion vi försöker anpassa till vårt data är linjärt parameteriserad, d.v.s.
y0=f(x)=c[0]*f[0](x)+c[1]*f[1](x)+c[2]*f[2](x)+...+c[M]*f[M](x).
y0 är här våra underligagnde hypotetiska ideala värden för den beroende variabeln som vi skulle erhållit om vi hade haft tillgång till en ideal brusfri mätmetod. f är den funktion som vi antar beskriver förhållandet mellan y0 och x. (För enkelhetens skull så antar vi att detta samband är exakt, inga modellfel. Men metoden vi skall beskriva för att anpassa parametrarna c fungerar också i fallet med modellfel. Skillnaden är dock att med modellfel så blir felanalysen av resultatet mer komplicerad, eftersom skillnaden mellan de y-värden som blir resultatet av vår anpassning av parametervärdena c kommer att innehålla både en komponent från modellfelet och en komponent från bruset i mätningarna av y.) c (kolumnvektorn t([c[1], c[2],...,c[M]])) är parametrarna som vi skall försöka hitta en så god approximation till som möjligt (där så god som möjligt här avser så lågt kavdratiskt medelfel i y som möjligt) från vårt data. Funktionerna f[1], f[2], ..., f[M] är funktioner som bygger upp vår modellfunktion f. Vi kallar dessa basfunktionerna för vår modell f. Vi kan skriva vår funktionsbas som radvektorn [f[1],f[2],...,f[M]]. Att modellfunktionen är linjärt parameteriserad betyder att om en viss parametervektor c1 (=(c1[1],c1[2],...,c1[M])) ger modellfunktionen f1 (=c1[1]*f[1]+c1[2]*f[2]+...+c1[M]*f[M] = [f[1],f[2],...f[M]]%*%c1) och en annan parametervektor c2 (=(c2[1],c2[2],...,c2[M])) ger modellfunktionen f2 (=c2[1]*f[1]+c2[2]*f[2]+...+c2[M]*f[M] = [f[1],f[2],...f[M]]%*%c2), så ger parametervektorn r*c1+s*c2 modellfunktionen r*c1*f1=s*c2*f2, för godtyckliga vektorer c1 och c2 och godtyckliga tal r och s. Vi ser direkt från definitionen av modellfunktionen att den verkligen uppfyller kriteriumet att vara linjärt parameteriserad. Jämför denna linjaritetsdefinition med definitionen av linjär avbildning i ett kolumnvektorrum i föreläsning 7a del 1!

För specialfallet att vår modellfunktion är strikt linjär (en proportionalitet mellan x och y) så väljer vi den enda basfunktionen (t.ex.) som
f[1](x)=x.
För specialfallet att vår modellfunktion är en rät linje så kan vi välja
f[1](x)=1 och f[2](x)=x.
Modellfunktionsvärdena blir
f(x) = c[1]*1+c[2]*x = c[1]+c[2]*x.
D.v.s. exakt samma form som ovan (med c[1]=b och c[2]=k).
Men vi kan t.ex. också anpassa till en parabel genom att använda basfunktionerna
f[1](x)=1, f[2](x)=x, f[3](x)=x^2.
Modellfunktionsvärdena blir
f(x) = c[1]*1+c[2]*x+c[3]*x^2 .
(Man kan testa anpassning till många olika olinjära funktioener. Men man bör vara något försiktig, en del olinjära funktioner kan ha "besvärliga beteenden". T.ex. så har polynom av hög ordning ofta mycket kraftiga variationer och svängningar för stora x som kan orsaka olika problem. Ett andra ordnings polynom (en parabel) är dock nästan alltid ett oskyldigt fall utan större besvärligheter.)

Om våra datapunkter låg direkt på kurvan för vår modellfunktion så skulle de vara
y[1] = c[1]*f[1](x[1]) + c[2]*f[2](x[1]) +...+ c[M]*f[M](x[1])
y[2] = c[1]*f[1](x[2]) + c[2]*f[2](x[2]) +...+ c[M]*f[M](x[2])
...
y[N] = c[1]*f[1](x[N]) + c[2]*f[2](x[N]) +...+ c[M]*f[M](x[N])
P.g.a. bruset i våra mätvärden för y så kommer y-värdena inte att vara exakt dessa värden. Men vi kan använda ovanstående som det system av ekvationer som vi skall försöka lösa för att få parametervärdena c. Detta ekvationssytem har ingen exakt lösning. Storleken på vårt stickprov N bör vara mycket större än antalet modellparametrar M för att inte samplingsfelet skall bli för stort i vår skattning av c-värdena. (Om vi t.ex. försöker anpassa en rät linje och har bara två datapar (N=2) i vårt stickprov så kan vi finna parmetervärdena så att den räta linjen går exakt genom datapunkterna. Men det är ingen bra ide. Samplingsfelet riskerar att bli stort. Och vi har också ingen oberoende kontroll av att vår hypotes om att en rät linje skulle vara en bra modell för det system vi studerar eftersom oberoende av vilka data vi fick de alltid skulle gå exakt genom någon rät linje. För att undvika dessa problem så mycket som möjligt bör man därför alltid ha N mycket större än M.) Men om vi hittar den approximativa lösning för ekvationssystemet som är den bästa approximationen i meningen att just de c-värdena minimerar det kvadratiska medelfelet i y så har vi hittat den kurvanpassning till våra datapunkter som vi är ute efter. Vi skriver ekvationssystemet som en matrisekvation genom att införa matrisen med basfunktionsvärdena
F =
[f[1](x[1]), f[2](x[1]), ..., f[M](x[1])
f[1](x[2]), f[2](x[2]), ..., f[M](x[2])
...
f[1](x[N]), f[2](x[N]), ..., f[M](x[N]) ]
Vi ser att F är en matris som kan ses som en radvektor av längden M där varje element i radvektorn är en kolumnvektorer av längden N, där kolumnvektor nr. m i F är funktionsvärdena för basfunktion nr. m, och där element nr. n i denna kolumnvektor är funktionsvärdet för x=x[n]. Dessa kolumnvektorer kallar vi våra basvektorer över våra basfunktioner [f[1],...,f[M]] och oberoende samplingsvektor t([x[1],...,x[N]). Uppsättningen av alla dessa basvektorer som matrisen F samlar kallar vi vår vektorbas svarande mot funktionsbasen [f[1],...,f[M]] och oberoendevariabel-samplingsvektorn t([x[1],...,x[N]). Låt oss kalla basvektorerna för f[1], f[2], ..., f[/][M], så
F=[f[1], f[2], ..., f[/][M]] .
Vi kallar den M-radiga kolumnvektorn där elementen är modellparametrarna c[1],...,c[M] för c. Vi kallar den N-radiga kolumnvektorn där elementen är de beroende variabelvärdena y[1],...,y[N] för y.
Problemet kan formuleras matematiskt som att vi försöker lösa matrisekvationen
F %*% c = y
för c.

Någon exakt lösning existerar oftast inte. Vi försöker hitta den approximativa lösning som minimerar det kvadratiska medelfelet i y-led
E = (1/N) * /sum_{n=1}^N (F[n,] %*% c -y[n])^2
= t(F %*% c - y) %*% (F %*% c -y) /N
= (F %*% c -y|F %*% c -y)) /N
= ||F %*% c -y||^2 /N .

Där vi också infört normen av en vektor. För en kolumnvektor där elementen är reella tal är normen
|a| = sqrt((a|a)) = sqrt( t(a) %*% a ) .
För en radvektor där elementen är reella tal är normen
|a| = sqrt((a|a)) = sqrt( a %*% t(a) ) .
(Ibland betecknas normen med dubbla streck ("||a||") men för att ekonomisera med utrymmet så använder vi oss här av enbart enkelstreck.)
Notera att om a är en kolumnvektor som representerar en geometrisk vektor a i ett kartesiskt xyz-koordinatsystem så är |a| lika med längden av a. Ty a[1] är då x-koordinaten för a, a[2] y-koordinaten a, och a[3] z-koordinaten a. Normen är
|a| = sqrt( a[1]^2 + a[2]^2 + a[3]^3 ), som enligt Pythagoras sats är lika med längden av a.


Till att börja med studerar vi specialfallet då basvektorerna f är ortogonala. För enkelhetens skull antar vi att de också är normerade (om de inte skulle vara normerade från början är det enkelt att införa nya basfunktioner
f[m]_ny = f[m]_ursprunglig / |F[,m]_ursprunglig|
där de är också normerade). I en del fall är detta verkligen en praktisk metod att bygga en modell. Den fungerar ju dock endast då x verkligen är en äkta oberoende variabel som vi (experimentatorn) har satt i studien. Och inte ens i alla sådana fall är det den bästa metoden (av olika anledningar, varav en kan vara att vi inte vill vara låsta till att använda just den x-vektor som ortogonaliserar basvektorerna). Ibland innebär det dock inte några problem att låsa de oberoendevariabelvärdena på detta sätt, och då kan metoden vara både enkel, och inte minst beräkningsmässigt mycket effektiv och stabil. Men även om denna metod ibland är en bra metod att faktiskt använda i praktiken, så är vårt huvudsakliga mål med att först studera den att den också ger en god grund för vår lösning senare till det allmänna problemet där vi varken förutsätter ortogonalitet mellan basvektorerna eller normering av basvektorerna.

Exempel. Om vi skall anpassa till en rät linje mellan x=-a och x=+a och våra oberoende variabelvärden är likformigt fördelade i området, x[n]=-a+(n-1)*2a/(N-1), så ger basfunktionerna f[1](x)=1 och f[2](x)=x ortogonala basvektorer. Ty för varje positivt x-värde finns ett till absolutbeloppet lika stort negativt x-värde, och vice versa, så när vi gör summan över n för inre produkten mellan F[,1] och F[,2] så kommer dessa att ta ut varandra parvis så att summan blir noll. Dessa basvektorer är inte normerade, men genom att multiplicera f[1] mec 1/|F[,1]| och f[2] med 1/|F[,2]| så blir basvektorerna från dessa nya basfunktioner också normerade. Observera att även om vi nu har låst vilka x-värden vi skall använda, och de därmed inte kan randomiseras, så spelar ordningen mellan de olika x-värdena ingen roll för ortonormeringen (addition är kommutativ), så vi kan fortfarande randomisera vilken ordning i vilken dessa x-värden används. Och bör i de flesta fall så göra eftersom mer randomisering ger ett säkrare experiment (troligare att studien blir mer giltig enligt den nomeklatur vi använder här). Så istället för formeln ovan för x[n] låt x[n']=-a+(n'-1)*2a/(N-1), och n är sedan n'-värdena (1,2,...,N) tagna i någon pseudoslumpmässig ordning.

Förutsätt alltså för tillfället att våra basvektorer är ortonormerade
(F[,m1]|F[,m2]) = {1 om m1=m2, 0 om m1 inte lika med m2} .
Vi skall hitta en så god approximation som möjligt i minsta-kvadratmening till
c[1]*F[,1] + c[2]*F[,2] +...+ c[M]*F[,M] = y
För att finna värdet för c[m] så multiplicerar vi ekvationen från vänster med transponatet av den m'te basvektorn (d.v.s. den m'te basvektorn tagen som radvektor istället för som kolumnvektor)
t(F[,m]) %*% (c[1]*F[,1] + c[2]*F[,2] +...+ c[M]*F[,M]) = t(F[,m]) %*% y
men matrismultiplikation är distributiv så tag matrismultiplikationen i vänsterledet innanför parentesen, från ortogonaliteten mellan basvektorerna så blir matrismultiplikationerna för alla termerna i vänsterledet utom den m'te lika med noll, och från normeringen matrismultiplikationen i den m'te termen lika med ett, så vänsterledet är lika med c[m],
c[m] = t(F[,m]) %*% y = (F[,m]|y) .
För att få alla koefficienterna på en gång så kan vi multiplicera vi från vänster med en kolumnvektor med M rader, där rad nr. m är den transponerade basvektorn nr. m, d.v.s. t(F)
t(F) %*% (F %*% c) = t(F) %*% y
(t(F) %*% F) %*% c = t(F) %*% y
t(F) %*% F är en M gånger M matris, där elementet på rad m1 och kolumn m2 är
t(F)[m1,] %*% F[,m2] = t(F[,m1]) %*% F[,m2] = (F[,m1]|F[,m2])
så t(F)%*%F=1 där "1" här är M gånger M enhetsmatrisen. Så c = t(F) %*% y
(För M=N så är också F%*%t(F)=1, vilket lätt visas. Och därmed t(F) inversen till F. Vi kommer ihåg detta resultat för ortogonala matriser från föreläsning 7a del 1. Men här vi har vanligtvis N>M (och bör ha N mycket större än M) och då är F%*%t(F) inte lika med enhetsmatris, t(F) är inversen till F om F's kolumner är ortonormerade och om och endast om F har lika många rader som kolumner. Om F's kolumner är ortonormerade så kallas F en ortogonal matris även om den har fler rader än kolumner, så en ortogonal matris har sitt transponat som sin invers om och endast om den har lika många rader som kolumner.)
Om vi multiplicerar en ekvation med samma faktor i vänster- och höger-ledet så måste lösningarna till den ursprungliga ekvationen vara lösningar till också den nya ekvationen. Så den ursprungliga ekvationen kan inte ha någon lösning utöver lösningarna till den multiplicerade ekvationen. Så ovanstående innebär att om vår ursprungliga ekvation F%*%c=y har någon lösning, så måste denna lösning vara c=t(F)%*% y. Men från problemets natur vet vi att den ursprungliga ekvationen vanligtvis inte har någon exakt lösning, så vanligtvis är inte c=t(F)%*%y en lösning till den ursprungliga ekvationen.

Dock visar det sig att detta val av c=t(F)%*%y är just det c som minimerar kvadratiska medelfelet i y-led. Ty ändra c genom att ändra en godtycklig komponent av c från (F[,m]|y) till (F[,m]|y)+d där d är ett tal. Det kvadratiska medelfelet i y-led blir då
E = |(F %*% (t(F) %*% y) + F[,m]*d) - y|^2/N
Vi kan tänka oss att y[1],y[2],...,y[N] är koordinater som representerar vektorn y i ett kartesiskt koordinatsystem. Basvektorena i detta koordinatsystem representeras då av de N st. N-radiga kolumnvektorerna t([1,0,0,0,...]), t([0,1,0,0,...]), t([0,0,1,0,...]). Men vi kan också representera vektorn y i ett roterat (eller i ett roterat och speglat, men vi kan här nöja oss med endast roterat) kartesiskt koordinatsystem där vektorn y representeras av koordinaterna z[1],z[2],...,z[N]. Vi skall i "z-systemet" ha N st. ortogonala koordinataxlar i, där avstånden mellan skalstrecken på axlarna är lika med ett. Eftersom kolumnerna i F är ortonormerade så kan vi låta dessa representera basvektorerna svarande mot de M första koordinataxlarna (z[1],...,z[M]) (d.v.s. första basvektorn i z-systemets koordinater i y-systemet är y[1]=F [1,1], y[2]=F[1,2],..., andra basvektorn i z-systemets koordinater i y-systemet är y[1]=F[2,1], y[2]=F[2,2], etc.). Totalt består koordinatsystemet av dessa första M koordinataxlar, samt ytterligare N-M koordinataxlar som alla är ortogonala mot både varandra och mot alla de M första koordinataxlarna. (För N mindre än eller lika med tre kan vi tolka detta bokstavligt geometriskt i det fysikaliska rummet, men vi kan fortfarande tänka oss det abstrakt geometriskt även för N större än tre. Det kan vara bra att när man tänker på detta först ta ett konkret exempel med N=3, t.ex. anpassa tre punkter (N=3) till en rät linje (M=2). För att sedan föreställa sig hur det abstrakt generaliserar till vilken dimension som helst.) Låt Z vara en matris som består av N st. N-radiga kolumnvektorer där kolumn nr. m är representationen i y-systemet av basvektor nr. m i z-systemet. De första M kolumnerna av Z är alltså matrisen F. Låt c0 vara en N-radiga kolumnvektor som representerar vektorn y i z-systemet, så den ursprungliga kolumnvektorn y ges av y=Z%*%c0. Z är en ortogonal matris, så multiplicerar vi detta med t(Z) från vänster så har den ekvationen lösningen c0=t(Z)%*%y. Men har den ursprungliga ekvationen en lösning så detta val av c0 är verkligen en lösning till ekvationen Z%*%c0=y. De första M kolumnerna i Z är kolumnerna i F, så de första M elementen av c0 är just det c som vi erhöll i vårt försök att lösa F%*%c=y ovan. Låt nu c vara lika med de första M elementen av c0, förutom att vi adderar d till element nr. m.
y = \sum_{n=1}^N( c0[n]*Z[,n] ) =
\sum_{m=1}^M( c0[m]*F[,m] ) + \sum_{n=M+1}^N( c0[n]*Z[,n]] )
= F %*% c0[1:M] + Z[,M+1:N] %*% c0[M+1:N]
kavadratiska medelfelet i y-led är
E = \sum_{n=1}^N( F[n,] %*% c - y[n] )^2 /N
= |F %*% c - y|^2/N
= |F %*% c0[1:M] + d*F[,m] -y|^2/N
= |F %*% c0[1:M] + d*F[,m] - F %*% c0[1:M] - Z[,M+1:N] %*% c0[M+1:N]|^2/N
= |d*F[,m] + Z[,M+1:N] %*% c0[M+1:N]|^2/N
= (d*F[,m] + Z[,M+1:N] %*% c0[M+1:N] | d*F[,m] + Z[,M+1:N] %*% c0[M+1:N])/N
= ( d^2*t(F[,m])%*%F[,m]
+ \sum_{n=M+1}^M( d*c0[n]* (t(F[,m]) %*% Z[,n] + t(Z[,n]) %*% F[,m]) )
+ \sum_{n1=M+1}^M( \sum_{n2=M+1}^M ( c0[n1]*c0[n2]* t(Z[,n1]) %*% Z[,n2] )) )/N
men från ortonormeringen av Z's kolumner så är t(F[,m])%*%Z[,n]=t(Z[,n])%*%F[,m]=0 i summan i andra raden ovan, och t(Z[,n1])%*%Z[,n2] [=1 för n1=n2 och =2 för n1 inte lika med n2} i dubbelsumman i tredje raden, så
E = ( d^2 + \sum{n=M+1}^M(c0[n]^2) )/N = (d^2+|c0[M+1:M]|^2)/N
Så felet minimeras när d^2 minimeras, men d^2 är alltid större än eller lika med noll så felet minimeras då d^2=0 vilket uppnås då och endast då d=0. Så felet minmeras av att sätta d=0, d.v.s. att låta c=c0[1:M], d.v.s av c=t(F)%*%y.

I och med det ovanstående så har vi lösningen vi var ute efter. Men för att förstå lösningen bättre kan det vara bra att ge en geometrisk tolkning av den. Den inre produkten (eller skalärprodukten som den också kallas för geometriska och vissa andra fysikaliska vektorer) mellan två vektorer a och b kan ses som att först ta projektionen av b på a, och sedan multiplicera a med längden av denna projektion om de är parallella (samma riktning), eller med minus längden om de är antiparallella (motsatta riktningar). Exempel, låt a och b vara två geometriska vektorer i det tredimensionella rummet. Låt vektorerna beskriva förflytningar från origo till punkter A respektive B. Projektionen av b på a får vi genom att från den räta linje som definieras av a, gå vinkelrät ut till punkten B. Projektionen av b på a är då förflyttningen från origo till den punkt på räta linjen definierad av a som vi utgick från för att komma till B. Beteckna projektionen av b på a med P_a %*% b. Den inre produkten är då
(a|b) = (a|P_a %*% b) = {+ eller -} |a|*|P_a %*% b| ,
där |a| är längden av a, och plustecknet gäller om P_a%*%b har samma riktning som a, och minustecknet gäller om P_a%*%b har motsatt riktning mot a. Man kan geometriskt visa att
(a|b) = |a|*|b|*cos(vinkeln(a,b)) .
Notera att den inre produkten är kommutativ (a|b) = (b|a) . (Detta gäller alltid för geometriska vektorer, och för matrisvektorer om elementen är reella tal. I denna studiecirkel använder vi inte så-kallade komplexa tal, men för fullständighetens skull skall kanske sägas för de deltagare som känner komplexa tal, att med dem är inre produkten inte kommutativ, utan (b|a) = conj((a|b) där "conj" betecknar komplexkonjugatet. En del av både våra definitioner och satser behöver något modifieras om ickereella tal används, i de flesta fall dock inte speciellt mycket.)
Omvänt kan vi också skriva projektionsoperatorn med hjälp av inre produkten
P_a %*% b = ((a|b)/|a|) * enhetsvektor i a's riktning
= (a|b) * a / |a|^2 .
Om vi adderar två vektorer b1 och b2 (gör först förflyttningen b1 från origo, sedan från den punkten fortsätt med förflyttningen b2, eller i omvänd ordning vilket ger samma resultat så addition av geometriska vektorer är kommutativ) och sedan projicerar summan på a, så blir resultatet detsamma som om vi först projicerar b1 och b2 på a och sedan adderar projektionerna; vektorprojektion är distributiv över [geometrisk]vektoraddition
P_a %*% (b1+b2) = P_a %*% b1 + P_a %*% b2
och därmed är också inre produkten distributiv över vektoraddition
(a|b1+b2) = a(b1) + (a|b2)
(a1+a2|b) = (a1|b) + (a2|b)
(det första raden följer direkt av distributiviteten för vektorprojektion och vår definition av inre produkt, den andra fljer sedan t.ex. från kommutativiteten hos inre produkten).
Det inses också lätt att för reella tal s har vi (a|s*b) = s*(a|b) (ty om vi multiplicerar vektorn b med en faktor s, så multipliceras också projektionen av denna vektor på a med en faktor s) och (s*a|b) = s*(a|b).
Inför nu ett kartesiskt koordinatsystem xyz med basvektorer ex, ey, ez. Vi kan skriva vektorn a som summan av dess projektioner på koordinataxlarna
a = P_ex %*% a + P_ey %*% a + P_ez %*% a
(För att gå från origo till punkten A så går vi först projektionen av a längs x-axeln. Sedan fortsätter vi med att därifrån gå parallellt med y-axeln så långt och i den riktning längsmed y-axeln som är projektionen av a på y-axeln, d.v.s. adderar till den första förflyttningen P_ey %*% a. Slutligen fortsätter vi förflyttningen därifrån med att gå längsmed z-axeln a's projektion på denna koordinataxel. Vi är då framme i punkten A.) Projektionsoperatorerna kan vi skriva som
P_ex %*% a = (ex|a) * ex /|ex|^2 = (ex|a) ex
och med motsvarande för y och z,
a = (ex|a) ex + (ey|a) ey + (ez|a) ez .
Inre produkten mellan a och b blir
(a|b) =
( (ex|a)ex+(ey|a)ey+(ez|a)ez | (ex|b)ex+(ey|b)ey+(ez|b)ez )
= (ex|a)*(ex|b) + (ey|a)*(ey|b) + (ez|a)*(ez|b)
där vi utnyttjat att basvektorerna är ortonormerade så inre produkten av en basvektor med sig själv är lika med ett, medan inre produkten mellan en basvektor och en annan basvektor är lika med noll. Men de inre produkterna mellan en geometrisk vektor a och basvektorerna i xyz-systemet är koordinaterna för den geometriska vektorn a's representation i detta koordinatsystem, så geometriska-vektor-inre-produkten är lika med kolumnvektor-inre-produkten mellan de kolumnvektorer som representerar de geometriska vektorerna i koordinatsystemet
(a|b)
= [(ex|a),(ey|a),(ez|a)] %*% t([(ex|b),(ey|b),(ez|b)])
= t(a_{xyz}) %*% b_{xyz}
= (a_{xyz}|b_{xyz})
där a_{xyz} är kolumnvektorn där elementen är a's xyz-koordinater.
På motsvarande sätt definierar vi projektion av en kolumnvektor b_{xyz} på en kolumnvektor a_{xyz} som att P_{a_{xyz}} %*% b_{xyz} är xyz-representationn av P_a %*% b. Eftersom vi har en formel för projektion av geometriska vektorer i inre produkter och eftersom inre produkten mellan två geometriska vektorer är lika med inre produkten mellan kolmnvektorerna av koordinaterna för de geometriska vektorerna i ett kartesiskt koordinatsystem xyz, så blir då formeln för projektion av kolumnvektorer på samma form som den för geometriska vektorer
P_{a_{xyz}} %*% b_{xyz} = (a_[xyz}|b_{xyz})*a_{xyz}/|a_{xyz}|^2
= (a_[xyz}|b_{xyz})*a_{xyz}/(a_[xyz}|a_[xyz})
Uttryckligen blir då projektionsmatrisen för projektion på kolumnvektorn a_{xyz} kvoten mellan den yttre produkten av a_{xyz} med sig själv och inre produkten av a_{xyz} med sig själv
P_{a_{xyz}} = a_{xyz}¤a_{xyz}/(a_{xyz}|a_{xyz})
(Denna formel är användbar för teoretiska resonemang. För numeriska beräkningar är det dock inte det mest effektiva att använda projektionsmatrisen uttryckligen, utan oftast bättre att använda den föregående formeln.)
Låt nu b vara en tredimensionell geometrisk vektor. Vi vill approximera denna så bra som möjligt med vektorn a=c[1]*ex+c[2]*ey i det tvådimensionella xy-planet (d.v.s. där alltid z=0). Med så bra som möjligt menar vi att vi vill minimera avståndet mellan punkten A (som vi kommer till genom att förflytta oss vektorn a från origo) och punkten B (som vi kommer till genom att förflytta oss med vektorn b från origo). Låt a vara projektionen av b på xy-planet, d.v.s projektionen av b på ex plus projektionen av b på ey, plus en vektor d[1]*ex+d[2]*ey
a= P_ex %*% b + P_ey %*% b + d[1]*ex + d[2]*ey
= (ex|b)*ex + (ey|b)*ey + d[1]*ex + d[2]*ey = ((ex|b)+d[1])*ex+((ey|b)+d[2])*ey
b=(ex|b)ex+(ey|b)ey+(ez|b)ez
a-b = d[1]*ex+d[2]*ey-(ez|b)ez
Kvadraten på avståndet mellan A och B är då
|a-b|^2 = (a-b|a-b)
= (d[1]*ex+d[2]*ey-(ez|b)ez|d[1]*ex+d[2]*ey-(ez|b)ez)
= d[1]^2+d[2]^2+(ez|b)^2
Så vi minimerar felet i approximationen genom att välja d[1]=d[2]=0, d.v.s genom att välja a som projektionen av b i xy-planet
a = (ex|b)ex+(ey|b)ey, c=t([(ex|b),(ey|b)])
Eftersom inre produkterna mellan de geometriska vektorerna och de kolumnvektorer som representerar dem i koordinatsystemet är lika, så gäller samma sak för motsvarande kolumnvektorer. Kvadratiska avståndet |b_{xyz}-a_{xyz}|^2 = (x_B-x_A)^2+(y_B-y_A)^2 minimeras då vi väljer a=(ex_{xyz}|b)*ex_{xyz}+(ey_{xyz}|b)ey_{xyz}. D.v.s. motsvarande resultat som vi erhåll genom ren matrisalgebra ovan för approximation av N-radiga kolumnvektorn y med F%*%c. Skillnaden är att med metoden presenterad här kan vi göra oss en geometrisk bild av resultatet. Vi minimerar avståndet mellan A och B genom att ta vektorn a som projektionen av b i xy-planet. Vi förstår att detta minimerar avståndet eftersom vi då för att gå från A till B bara behöver gå "rakt upp" (parallellt med z-axeln) till B (eller "rakt ned" (antiparallellt med z-axeln), om B skulle ha negativ z-koordinat), vilket är kortare än att gå "snett upp" som vi skulle behöva göra om a avvek från b's projektion i xy-planet.

Vi exemplifierar ovanstående i R-skriptet "linapa1.r". Här mäter vi en linjär funktion, sånärsom på en term konstant i x, y=f(x)=y0+k0*x, med ett slumpmässigt mätfel i y-värdet men där x-värdena som ligger i intervallet [a,b] är exakt kända. Vi finner den räta linje y=y01+k01*x som i minsta-medel-kvadrat-mening bäst approximerar våra mätdata genom att minimera det kvadratiska medelfelet i y-led. Detta gör vi genom att införa två basfunktioner f[1](x)=nf[1]*1 och f[2](x)=nf[2]*((a+b)/2-x). Att dessa är ortogonala över en samplingsvektor x där det för varje x-värde i den övre delen av intervallet finns ett motsvarande x-värde i den undre delen av intervallet och vice versa ser vi lätt från symmetrin. Normeringsfaktorerna nf finner vi genom att numeriskt beräkna normerna av basvektorerna, och dividera med dessa. Och parametervärdena får vi sedan genom att multiplicera mätdatavektorn y för den beroende variabeln med transponatet av matrisen med basvektorerna.

Kod: Markera allt

# R-skript "linapa1.r", linje-anpassning exempel 1, VoF studiecirkel
# Statistics One, november 2012.
# Anpassa en rät linje till ett stickprov, med mätfel endast i y-led.
# Anpassa med minsta-kvadratanpassning i y-led, och visa som grön
# linje tillsammans med scatterplott för [simulerade] märdata.
# Men visa också på skillnaden mot att göra total minstakvadratanpassning
# (som alltså inte är den korrekta metoden i detta fall eftersom märfelet
# finns endast i y-led), och visa som en rosa linje.
a <- -0.5  # lägsta möjliga x-värde
b <- 1.5  # högsta möjliga x-värde
y0 <- 1  # funktionsvärde för x=0
k0 <- 3  # funktionens lutningskoefficient
s_y <- 1  # standardavvikelse för slumpfel i y
Nh <- 200  # halva storleken på stickprovet
randomiserat <- FALSE # om TRUE: randomisera, om FALSE: randomisera inte
N <- 2*Nh
##
if(randomiserat){
   # skapa en vektor x av längd N, där för varje x-värde i övre halvan av
   # intervallet a,b det finns exakt ett motsvarande x-värde i nedre halvan
   # och vice versa, men där x-värdena i övrigt är likformigt [pseudo-]
   # slumpmässigt fördelade över intervallet
   # (denna randomisering är helt onödig i detta exempel som sådant,
   # men bara för att påminna om vikten av randomisering om det skulle
   # varit en studie av ett empiriskt system):
   y <- c(1:N) # indexvektor för x-vektorn
   x <- c(1:N) # x-vektorn
   for(k in 1:Nh){ # slinga i N/2 steg, i varje steg tar vi ett av paren av x
      riy <- trunc(runif(1,1,N-2*k+3)) # slumpheltal i [1,N-2*k+2]
      rix1 <- y[riy]  # index för första x-värde i paret
      # tag bort det nu använda x-indexet från vektorn y av x-index:
      if(riy>1){
         if(riy<(N-2*k+2)){
            y <- c(y[1:(riy-1)],y[(riy+1):(N-2*k+2)])
         }else{
            y <- y[1:(N-2*k+1)]
         }
      }else{
         y <- y[2:(N-2*k+2)]
      } # borttagning från y klar
      x[rix1] <- runif(1,a,b)  # första x-värdet slumpmässigt i [a,b]
      riy <- trunc(runif(1,1,N-2*k+2)) # slumpheltal i [1,N-2*k+1]
      rix2 <- y[riy]  # index för andra x-värde i paret
      # tag bort det nu använda x-indexet från vektorn y av x-index:
      if(k<Nh){ #(såvida det inte var sista talet, då hoppar vi över det)
         if(riy>1){
            if(riy<(N-2*k+1)){
               y <- c(y[1:(riy-1)],y[(riy+1):(N-2*k+1)])
            }else{
               y <- y[1:(N-2*k)]
            }
         }else{
            y <- y[2:(N-2*k+1)]
         }
      }  # borttagning från y klar
      # andra x-värdet i paret är på samma avstånd från mitten (a+b)/2,
      # men på motsatta sidan av mitten:
      x[rix2] <- a+b-x[rix1]
   }
}else{
   # skapa en ickerandomiserad x-vektor med x-värden likformigt fördelade
   # i intervallet a,b (och därmed, för varje x-värde i övre halvan av
   # intervallet så finns ett motsvarande värde i nedre halvan av intervallet
   # på samma avstånd från mitten, och vice versa):
   x <- a+c(0:(N-1))*(b-a)/(N-1)
}
#print(x)
##
##
#  skapa y-värdena, rät linje med konstant y0 och lutningskoefficient k0
#  plus normalfördelat [pseudo-]slumpmässigt fel med standardavvikelsen
#  s_y (och medelvärde=0 (inget bias)):
y <- y0+k0*x+rnorm(N,mean=0,sd=s_y)
#
plot(x,y)
##
##
#  Gör linjeanpassning genom att minimera minstakvadratavvikelsen i y-led:
#
# basvektorer för basfunktionerna f0[1](x)=1 och f0[2](x)=(a+b)/2-x
# (dessa är ortogonala med vår x-vektor, men inte normerade, vi
# beräknar nedan normeringsfaktorer för dem):
F <- matrix(c(1+0*x,-(a+b)/2+1*x),ncol=2)
#
# beräkna normeringsfaktorer nf[1], nf[2], och normera basvektorerna
# F[,1] och F[,2]:
nf=c(1:2)
for(k in 1:2){
   nf[k] <- 1/sqrt(t(F[,k])%*%F[,k])
   F[,k] <- F[,k]*nf[k]
}
# f[1](x)=nf[1]*f0[1](x) och f[2](x)=nf[2]*f0[2](x) skall nu vara
# ortonormerade över vår samplingsvektor x
#
# kontrollera att F är en ortogonal matris:
print("t(F)%*%F (bör vara lika med 2 gånger 2 enhetsmatrisen):",quote=FALSE)
print(t(F)%*%F)
#
# modellkoefficienter c1:
c <- t(F)%*%y
#
# rita den skattade modellen 1 som en grön linje i diagrammet:
y1 <- F%*%c
lines(x,y1,col="green")
#
# f(x) = c[1]*nf[1]*1+c[2]*nf[2]*(-(a+b)/2+1*x)
# = c[1]*nf[1]-c[2]*nf[2]*(a+b)/2 + c[2]*nf[2]*x
# ekvivalent modellkoefficient k01 (k0 skattad med metod 1):
k01 <- c[2]*nf[2]
# ekvivalent modellkoefficient y01 (y0 skattad med metod 1):
y01 <- c[1]*nf[1]-c[2]*nf[2]*(a+b)/2
print("skattade modellparametrar y01, k01 (minsta kvadrat i y-led):"
,quote=FALSE)
print(c(y01,k01))
##
##
#  Gör linjeanpassning genom att minimera minstakvadratavvikelsen
#  vinkelrät från linjen till datapunkterna:
#
Cov <- cov(matrix(c(x,y),ncol=2)) # beräkna kovariansmatrisen
eig2 <- eigen(Cov) # beräkna egenvektor för kovariansmatrisen
#print(eig2)
# modellparameter k02 (egenvektorn beskriver riktningen på linjen,
# första elementet i egenvektorn är förflyttningen i x-led och
# andra elementet förflyttningen i y-led, så lutningskoefficienten
# är lika med andra elementet av egenvektorn delat med första elementet
# av egenvektorn):
k02 <- eig2$vectors[2,1]/eig2$vectors[1,1]
# modellparameter y02 (f2(x) = medlevärde_y + k02*(x-medelvärde_x)
# = medelvärde_y-k02*medelvärde_x + k02*x = y02+k02*x,
# så y02=medelvärde_y-k02*medelvärde_x):
y02 <- mean(y)-k02*mean(x)
print("skattade modellparametrar y02 och k02 (total minsta kvadrat):"
,quote=FALSE)
print(c(y02,k02))
y2 <- y02+k02*x
lines(x,y2,col="pink")
print("'verkliga' modellparametrar y0 och k0:",quote=FALSE)
print(c(y0,k0))
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » ons 21 nov 2012, 01:51

Föreläsning 7a, del 5

Vi fortsätter nu med det generella fallet där basvektorena svarande mot basfunktionerna över våra oberoende variabelvärden inte är ortogonala (och vi förutsätter inte heller att de är normerade, men det är att de inte behöver vara ortogonala som är den stora sklillnaden). Det är nödvändigt att ha en metod för detta generella fall då x är en kvasioberoende variabel som vi inte själva kan välja ut vilka värden den skall ha, men även då x är en sant oberoende variabel är det inte alltid mest praktiskt att låsa x-värdena så att basvektorerna är ortogonala. En bra metod för det generella fallet är att göra en koordinattransformation som skapar en ny uppsättning basvektorer som är ortogonala. En enkel, effektiv, stabil och noggrann metod för detta är så-kallad QR-faktorisering. En annan är så-kallad singulärvärdesfaktorisering ("SVD", singular value decomposition). En tredje metod att lösa minstakvadratmetoden som inte innefattar att göra en uttrycklig transformation till ortogonala basvektorer är den så-kallade normalekvationsmetoden, som dock är mindre stabil än QR och SVD.

QR-metoden går ut på att vi skriver matrisen F med våra basvektorer som en produkt av en N gånger M matris Q där kolumnerna i Q är ortonormerade och en kvadratisk M gånger M matris R,
F = Q %*% R ,
där R är en högertriangulär matris, en kvadratisk matris med nollskillda element endast på och till höger om huvuddiagonalen, R[m1,m2]=0 för m1>m2, därav "R" som i right ("R" i "QR" betyder alltså inte rotationsmatris). Vårt problem är då att finna en så god approximation som möjligt till ekvationen
Q %*% R %*% c = y
Vi inför nya koordinater c2, definierade av
c2 = R %*% c
Detta blir oftast en ickeortogonal koordinattransformation, d.v.s. koordinatsystemet i vilket c2 är koordinatvärdena för approximationen till y har oftast icke räta vinklar mellan koordinataxlarna och olika avstånd mellan skalstrecken på de olika koordinataxlarna. (Om vi tar koordinatsystemet där c är koordinatvärdena som vårt kartesiska referenssystem så blir oftast systemet där c2 är koordinatvärdena ett ickekartesiskt koordinatsystem. Om vi istället tar koordinatsystemet där c är koordinatvärdena som vårt kartesiska koordinatsystem så blir oftast koordinatsystemet där c2 är koordinatvärdena ett ickekartesiskt system. I vilket fall som helst så är oftast R en ickeortogonal koordinattransformation. R blir en ortogonal matris endast om F redan trots allt var ortogonal.) Oftast behöver vi dock inte använda oss uttryckligen av det koordinatsystemet, utan denna koordinattransformation är endast ett formellt steg i att finna vår sökta lösning. Modellparametervärdena i detta nya koordintsystemet finner vi genom att hitta en så god approximation som möjligt till ekvationen
Q %*% c2 = y
Men Q är per konstruktion en ortogonal matris, d.v.s. i vårt nya koordinatsystem är basvektorerna ortonormerade, så i detta nya koordinatsystem så gäller den lösning vi härledde ovan i föreläsning 7a del 4,
c2 = t(Q) %*% y

Om matrisen R är inverterbar så fås parametervärdena i det ursprungliga koordinatsystemet som c=R^(-1)%*%c2. Att beräkna parametervärdena genom att uttryckligen beräkna inversmatrisen är dock inte någon god idé. Isället löser vi ekvationen R%*%c=c2. Och utnyttjar därvidlag information vi har om formen på R. Det visar sig att faktoriseringen alltid kan göras så att R blir högertriangulär, och i QR-metoden förutsätter vi att R har denna form. Ett linjärt ekvationssystem där koefficienterna utgör en högerdiagonal matris kan lösas enkelt, noggrant och stabilt med så-kallad bakåtsubstitution. Utnyttjar vi att R[m,n]=0 då m>n har ekvationssystemet formen
R[1,1]*c[1] + R[1,2]*c[2] + R[1,3]*c[3] +...+ R[1,M]*c[M] = c2[1]
R[2,2]*c[2] + R[2,3]*c2[3] +...+ R[2,M]*c[M] = c2[2]
R[3,3]*c[3] +...+ R[3,M]*c[M] = c2[3]
...
R[M-1,M-1]*c[M-1] + R[M-1,M]*c[M] = c2[M-1]
R[M,M]*c[M] = c2[M]
Vi löser detta genom att först beräkna c[M], sedan c[M-1] (och utnyttjar att vi då vet värdet för c[M-1]), sedan C[M-2] (och utnyttjar att vi då vet värdena för c[M] och c[M-1]), etc., tills vi slutligen beräknat c[1],
c[M] = c2[M]/R[M,M]
c[M-1] = (c2[M-1] - R[M-1,M]*c[M])/R[M-1,M-1]
c[M-2] = (c2[M-2] - R[M-2,M-1]*c[M-1] - R[M-2,M]*c[M])/R[M-2,M-2]
...
c[1] = (c2[1] - R[1,2]*c[2] - R[1,3]*c[3] -...- R[1,M]*c[M])/R[1,1]
Metoden fungerar förutsatt att alla diagonalelementen R[m,m] är skillda från noll. Och fungerar noggrannt och stabilt om alla diagonalelementen är "tillräckligt mycket" skillda från noll. Det är därför viktigt att den metod man använder för att utföra faktoriseringen av F som F=Q%*%R säkerställer att detta vilkor är uppfyllt.

Vi kan skapa vår ortogonala matris Q från F genom att succesivt dra ifrån den delen av F-kolumnvektorerna som är deras projektioner på de lägre numrerade Q-kolumnvektorerna för att göra kolumnerna av Q ortogonala, och sedan dividera med normen för att få kolumnerna av Q normerade. Eftersom en Q-kolumnvektor då bara är modifierad genom att dra bort delar från en F-kolumnvektor proportionella mot lägre numrerade F-kolumnvektorer (förutom normeringen, som inte påverkar vilka andra vektorer som bidrar till en vektor). En kolumn nr. m av Q är en viktad summa av endast kolumner av F med kolumnnummer lägre än eller lika med m. Och därför också vice versa, en kolumn nr. m av F innehåller endast bidrag från kolumner av Q med kolumnnummer lägre än eller lika med m. Så transformationsmatrisen R mellan F och Q får nollskilda element enbart för radernummer m1<=m2 i kolumn nr. m2. Alltså en transformation som kan beskrivas med en högertriangulär "R-matris". (Det kan vara bra att studera konkret hur detta görs för att förstå mer av metoden. Jag lägger den detaljerade algoritmen i en bilaga. Men eftersom den detaljerade algoritmen för att praktiskt göra faktoriseringen inte utgör en del av en statistikstudiecirkel tar jag inte med det i huvudposten. Här studerar vi endast hur användningen av QR-faktorisering kan användas för regressionsanalys. Den kortfattade beskrivningen här av hur faktoriseringen i princip kan göras är just endast i princip, ett konkret sätt att beskriva egenskaper hos QR-faktoriseringen (här att R kan göras högertrinagulär). Om man vill göra den rent faktiska numeriska faktoriseringen konkret och noggrant och stabilt finns det många beräkningsmässiga problem och detaljer som måste beaktas. Vi avstår dock från de aspekterna av QR-metoden här, utan förutsätter att vi har tillgång till någon funktion som på ett noggrant och stabilt sätt kan beräkna QR-faktoriseringen men intresserar oss inte för detaljerna i hur den beräkningen görs. Som vi skall se nedan i denna huvudposten finns också sådan funktion tillgänglig i datorprogrammet R.)

Från detta resonemang ser vi också hur modellanpassningen kan misslyckas.
För att få vektorn Q[,m]= qm tar vi vektorn (eller, kan i princip ta) F[,m]=fm och subtraherar från den dess projektioner på alla Q[,o]=qo (1<=o<m), och normerar den sedan genom att dividera med dess norm. Denna norm blir då också diagonalelementet R[m,m] som det visar sig. Detta fungerar endast om inte hela fm blivit bortsubtraherad i det första steget av processen, d.v.s. endast om normen för denna vektordifferens är större än noll (en norm kan inte bli negativ, så enda möjligheterna är att den är positiv eller noll, och noll är den endast om hela vektorn blivit bortsubtraherad (eller om fm var noll från början, vilket den naturligtvis inte får vara). Att fm försvinner helt i denna subtraktion innebär att fm är lika med ett tal gånger q1 plus ett tal gånger q2 plus ... plus ett tal gånger qm-1. Vi säger att fm är "en linjärkombination av" q1 och q2 och ... och qm-1. Men eftersom qo är skapade som linjärkombinationer av fp (p<=o), så innebär det att fm är en linjärkombination av f1 och f2 och ... och fm-1. Basvektorn fm är redundant, den tillför i själva verket ingenting nytt till vår modell. Eller ekvivalent, åtminstone för vårt nuvarande val av oberoende variabler, så tillför basfunktionen f[m] inte något nytt utöver basfunktionerna f[1],...,f[m-1] till vår modell.
(Eller om vi tänker geometriskt att vi gör förflyttningen fm genom att gå en bit i riktningen q1, sedan fortsätta en bit i riktningen q2, ..., sedan slutligen en bit i riktningen qm-1. Så att lägga till fm introducerar ingen ny oberoende riktning till {qo, o=1,2,...,m-1}. Eller vilket är samma sak eftersom qo är skapad av fp (p<=o), introducerar ingen ny oberoende riktning utöver de i {fo, o=1,2,...,
m-1}. T.ex. om M=3 och vi tänker oss att f1 och f2 ligger i det horisontella planet och q1 att vara en basvektor "åt höger" och q2 en basvektor "bakåt", så skulle q3 vara en basvektor "uppåt". För att det skall fungera att skapa q3 från f3 genom att subtrahera dess projektioner på q1 och q2 och sedan normlisera resultatet, så måste f3 ha en nollskilld vertikal komponent. Om däremot f3 också ligger i det horisontella planet (inte har någon nollskilld vertikal komponent) så tillför den inget nytt (i meningen tillför inte denna nya riktning "uppåt") och q3 kan inte skapas från den [genom någon linjär operation].)
Att basvektorn fm är en linjärkombination av q1, ...,qm-1 innebär att den kan skrivas som fm = R[1,1]*q1 +...+ R[m-1,m]*qm-1. Någon [nollskilld] koefficient R[m,m] kommer inte in. Vi kan införa en koefficient R[m,m]=0, och en vektor qm som en vektor vilken som helst med norm=1 som är ortogonal mot q1 och q2 och...och qm-1. På det sättet kan vi formellt ändå göra en QR-faktorisering av F (med en N gånger M Q-matris och M gånger M högertriangulär R-matris), men ekvationen R%*%c=c2 kan inte lösas med den metod vi angav ovan eftersom att ett av R's diagonalelement är lika med noll det skulle innebära en division med noll.

Vi kan lösa detta genom att först ändra numreringen på våra basfunktioner. Om vi kommer till en situation i vår QR-faktorisering där R[m,m] skulle bli lika med noll, så lägger vi istället den basfunktionen som sista basfunktionen, d.v.s. som nr. M. Den gamla basfunktionen nr. M blir den nya basfunktionen nr. m, och den gamla basfunktionen nr. m blir den nya basfunktionen nr. m. På det sättet kan vi åtminstone skjuta problemet framför oss. Antag att den nya basfunktionen nr. m (den gamla basfunktionen nr. M) inte uppvisar detta problem, och inte heller basfunktionerna nr. m+1,m+2,...,M-1. Vi kan då fortsätta QR-faktoriseringen ända till och med nästsista basvektorn qM-1 utan att problem uppstår. När vi kommer till den sista basfunktionen nr. M så uppstår problemet, och vi löser det genom att sätta R[M,M]=0 och ta qM som någon normerad vektor vilken som helst (inte skapad från f(nya) M) som är ortogonal mot alla q1, ..., qM-1. För c[M] har vi då ekvationen R[M,M]*c=c2[M] som i detta fall är 0*c[M]=c2[M]. Vilket tal c[M] som helst är en lösning till denna ekvation. Tydligen påverkar inte c[M] värdet av det kvadratiska medelfelet, det blir detsamma oavsett värdet för denna modellparameter eftersom c2 inte påverkas av värdet för c[M]. Vi väljer ett tal vilket som helst för c[M], och därefter fungerar den ovan angivna lösningsmetoden för c eftersom alla de övriga diagonalelementen av R är skillda från noll. Dock är det i de flesta fall bäst att välja c[M] till absolutbeloppet så liten som möjligt, d.v.s. c[M]=0. Ty om vi använder vår modell på något annat sätt än att uttryckligen multiplicera R med c, så kan det uppstå problem t.ex. att på något ställe i beräkningen den nolla som idealt skulle uppstå uppkommer genom att subtrahera två lika stora tal från varandra. Men om beräkningen i praktiken genomförs med begränsat antal siffror så är förmodligen dessa tal endast ungefär lika stora p.g.a. avrundningsfel, och om vi valt |c[M]| stort så kan dessa avrundningsfel riskera att bli stora, och i en praktisk beräkning ge upphov till stora fel i vår modell. Det kan också uppstå problem om vi beräknar modellvärdet för den beroende variablen för nya värden för den oberoende (eller kvasioberoende) variablen. Att f[M] inte bidrog till kvadratiska medelfelet gäller för just dessa (eventuellt kvasi-)oberoendevariabelvärden som vi har i studien. Vi kan inte (utan ny oberoende information) vara säkra på att inte något annat val av oberoendevariabelvärden skulle ge en inverkan av f[M] på det kvadratiska medelfelet. Och vi vet inte om i så fall positivt eller negativt eller noll skulle vara det bästa valet för c[M]. Men om c[M] skulle ge någon inverkan alls, så kan vi vara säkra på att för tillräckligt stort |c[M]| så skulle det ge en sämre modell så vi bör åtminståne inte välja ett c[M] alltför långt från noll. Och eftersom vi ändå inte vet om positivt eller negativt skulle vara bäst (och tillsammans med det potentiella problemet med avrundningsfel), så är i de flesta fall det bästa att välja c[M]=0 om vi inte har annan oberoende information som talar för något annat värde än noll. Men att välja c[M]=0 är detsamma som att inte använda den nya basfunktionen f[M] (den gamla basfunktionen f[m]) alls. Så varför ha kvar den? Vi kan enklare när vi råkar på en basvektor som var en linjärkombination av de tidigare basvektorerna i sekvensen helt enkelt konstatera att den motsvarande basfunktion f[m] är redundant i vår modell (åtminstone för nuvarande oberoende variabler), stryka denna basfunktion och använda oss av en modell med endast M-1 basfunktioner. (F=Q%*%R där Q är en N gånger M-1 ortogonal matris och R en M-1 gånger M-1 högertriangulär matris. Och R har nu alla diagonalelementen skillda från noll och vår standardmetod att använda QR-faktoriseringen fungerar.)

Denna metod att hantera nollelement på R's diagonal kan lätt generaliseras till godtyckligt antal diagonalnollor. Närhelst det uppstår att diagonalelementet av R skulle bli noll, ta bort den motsvarande basfunktionen från modellen (och gör motsvarande omnumrering av de återstående). Detta garanterar att alla diagonalelementen hos R är nollskillda, och bakåtsubstitutionen kan genomföras utan att man råkar ut för division med noll. (Eller sätt godtyckliga normerade vektorer (ej erhållna från F) ortogonala mot varandra och de tidigare som dessa sista kolumnerna i Q, och sätt de motsvarande sista raderna i R till noll. De motsvarande värdena i de sista raderna av c kan sättas till vilka värden som helst (vanligtvis till noll), och när väl värden har valts för dessa fås resten av raderna i genom standard bakåtsubstitution.) Men i en praktisk numerisk beräkning med begränsat antal värdesiffror är inte det tillräckligt. Om ett diagonalelement hos R visserligen inte är lika med noll, men ligger alltför nära noll (har alltför lågt absolutbelopp) så riskerar avrundningsfelen i beräkningen förstärkas, och noggrannheten på vårt slutresultat bli mycket dålig. Ty c[m] beräknas av
c[m] = (c2[m] - R[m,m+1]*c[m+1] - ... - R[m,M]*c[M])/R[m,m]
differensen i parentesen har avrundningsfel som sedan förstärks med en faktor 1/R[m,m], så om |R[m,m]| är mycket liten så riskerar avrundningsfelen bli mycket stora. Därför bör man stryka inte bara de basfunktioner från modellen som ger diagonalelement lika med noll hos R, utan även basfunktioner som ger (till absolutbeloppet) "mycket små" diagonalelement. Att välja exakt hur små som är "mycket små" för att minimera felet är ganska komplicerat. Men som tur är är det oftast inte alltför känsligt (annat än för mycket känsliga fall eller om vi har mycket stora krav på noggrannhet), så en ganska grov uppskattning är oftast tillräckligt. "Små" måste bedömmas i förhållande till något, och detta något är vanligtvis de andra diagonalelementen i R. Så "stryk" de kolumner i Q (och motsvarande sista rader och kolumner i R) som har diagonalelement hos R vars kvot mot det största diagonalelementet hos R är (till absolutbeloppet) för små. Låt mmin vara m för det minsta |R[m,m]| och mmax vara m för det största |R[m,m]|. Om vi uppskattar att |R[mmax,mmin]| är av storleksordningen ett, så bidrager täljareparentesfelet i formeln för c[mmin] med ett fel av storleksordningen |R[mmax,mmax]/R[mmin,mmin]| gånger så stort till c[mmax]. Vi antar att detta är det viktigaste bidraget till avrundningsfelet hos c[mmax]. Om vi antar att avrundningsfelet hos täljareparentesen i formeln för c[mmin] ligger i sista värdesiffran och att |R[mmax,mmax]/R[mmin,mmin]|=10^T, så kommer då avrundningsfelet hos c[mmax] att ligga i T+1-sista decimala värdesiffran (de T+1 sista decimala värdesiffrorna för c[mmax] är inte giltiga utan består enbart av avrundningsfel). För att vi skall ha åtminstone någon giltig värdesiffra kvar för
c[mmax] så måste alltså T vara mindre än antalet decimala värdesiffror minus ett som vi utför beräkningarna med. Speciellt eftersom denna feluppskattning är grov så bör vi "kasta" alla basfunktioner ger för litet R-diagonalelement för att uppfylla detta med tillräcklig säkerhetsmarginal.

Antalet linjärt oberoende kolumner i en matris kallas dess "rang". Antalet effektivt numeriskt oberoende kolumner kallas dess effektiva numeriska rang.

Inte bara ger låga värden för absolutbelopp av diagonalelement hos R svårigheter att genomföra bakåtsubstitutionen. Också själva konstruktionen av Q-matrisen blir onnogrann. Ty vi skapade en kolumn qm av Q genom att först subtrahera projektionerna mot de lägre numrerade kolumnvektorerna och sedan dividera med normen av denna vektordifferens. Men subtraktionen av projektionerna är inte exakt utan innehåller avrundningsfel. Och detta avrundningsfel multipliceras sedan med ett delat med normen av differensen. Så om nästan hela fm har subtraherats bort så blir felet i qm stort, inklusive dess ortogonalitet mot de lägre numrerade kolumnvektorerna i Q. Och därmed riskerar också kolumnvektorerna högre numrerade än m att få dålig numerisk noggrannhet även om de inte själva skulle ha lågt värde på sina motsvarande diagonalelement av R, ty qm är en av de vektorer som vi skall subtrahera projektionen mot. För att inte detta fenomen skall ge dålig noggrannhet också för kolumnvektorer i Q som inte har lågt värde på sitt motsvarande R-diagonalelement så kan det ofta vara en god idé att omnumrera basfunktionerna så att |R[1,1]| blir störst, |R[2,2]| näststörst, etc., och |R[M,M]| minst. (Att på olika sätt omnumrera basfunktionerna för att försöka öka noggrannhet och stabilitet hos beräkningen kallas "kolumnvis pivotering" ("kolumnvis" eftersom det är F's kolumner som omnumreras). Vi skall nedan se då vi använder R-programmets inbyggda QR-faktoriseringsfunktion att en av dess utdata är vilken pivoteringspermutation den gjort för F's kolumner, och att det är viktigt att utnyttja denna information på ett korrekt sätt.)

Hur stort 1/(normen av det som är kvar av fm efter att vi subtraherat bort de tillämpliga projektionerna) beror inte bara på hur nära parallell fm är med de tidigare Q-vektorerna utan också på hur stort absolut sett fm var från början. Om vi byter vår ursprungliga basfunktion till en likadan sånärsom på en proportionalitetsfaktor så ändras normerinsfaktorn med ett delat med den faktorn. Detta spelar ingen roll om vi andast har en basfunktion (M=1), vi bara kompenserar det med en faktor. Men om vi har fler än en basfunktion (M>1) så kan de relativa proportionalitetsfaktorerna för basfunktionerna spela roll eftersom vi jämför olika basfunktioner med varandra. (Om vi som i praktiken alltid är fallet genomför beräkningarna med ett ändligt antal värdesiffror och får ett avrundningsfel i nästan varje eller varje delberäkning.) För att få rättvisa jämförelser och minimera avrundningsfelen bör vi därför välja våra basfunktioner f[m] så att (för de värden för den oberoende variabeln som vi har, eller för ungefär sådana värden som vi förväntar oss) basfunktionerna är "ungefär lika stora absolut sett". Som en grov tumregel kan vi välja proportionalitetsfaktorer för våra basfunktioner så att deras motsvarande basvektorer alla har samma (eller ungefär samma) norm. Om man har möjlighet till det utan alltför mycket besvär är det också en god idé att välja basfunktioner som dessutom åtminstone inte alltför mycket avviker från ortogonala basvektorer (alla problemen med "nästan helt bortsubtraherade basvektorer" som tog så mycket diskussione ovan uppstår t.ex. inte, och även om en av de stora fördelarna med QR-metoden är att den på ett stabilt sätt kan hantera sådana problem -- så blir resultatet ännu bättre av att man ser till att problemet inte uppstår till att börja med om så är möjligt och praktiskt).

R-skriptet "QRtest1.r" exemplifierar ovanstående samt introducerar R-programmets inbyggda QR-faktoriseringsfunktion "qr" samt några kringfunktioner runt den. Jag beskriver detta i kommentarerna i skriptet snarare än här i huvudtexten.

Kod: Markera allt

# R-skript "QRtest1.r", första test av QR-faktorisering i R. VoF studiecirkel
# StatisticsOne, november 2012.
##
# Skapa en enkel matris A som vi skall testa att QR-faktorisera.
# Vi skapar A som en 4 gånger 4 matris där kolumnerna kan konceptualiseras
# som vektorer i ett fyrdimensioenllt kartesiskt koordinatsystem. Första
# kolumnvektorn är av längden 1 parallellt med första koordinataxeln. Andra
# kolumnvektorn är av längden 1 parallellt med andra koordinataxeln. Tredje
# kolumnvektorn är av längden sqrt(2) i planet de två första koordinataxlarna
# ligger i, riktad mittemellan första och andra koordinataxlarnas riktningar.
# Fjärde kolumnvektorn är av längden 1 riktad parallellt med den tredje
# koordinataxeln. Den tredje kolumnvektorn inför alltså inte någon ny riktning
# utöver de två första (kan skrivas som linjärkombinationen A[,3]=A[,1]*1
# +A],2]*1 av de två första kolumnvektorerna). Ingen av A's kolumnvektorer
# har någon nollskild komponent för den fjärde koordinaten, så det är
# uppenbart att basvektorer skapade linjärt från A's kolumner endast kan
# beskriva vektorer som ligger i det tredimensionella underrummet givet av de
# tre första koordinataxlarna.
# Vår testmatris A:
A <- matrix(c(c(1,0,0,0),c(0,1,0,0),c(1,1,0,0),c(0,0,1,0)),4,4)
#(alternativa testmatriser, med två respektive noll redundanta kolumner
#A <- matrix(c(c(1,0,0,0,0),c(0,1,0,0,0),c(1,1,0,0,0),c(1,-1,0,0,0),c(0,0,1,0,0)),5,5)
#A <- matrix(c(c(1,0,0),c(0,1,0),c(0,0,1)),3,3)
#)
N <- nrow(A)
M <- ncol(A)
#print(c(N,M))
print("A:",quote=FALSE)
print(A)
##
# QR-faktorisera A med R-funktionen "qr", lagra resultatet i QR0.
# För att få Q- och R-matriserna får men avkoda QR0 med hjälp av
# R-funktionerna "qr.Q" och "qr.R". QR0$rank talar om hur många linjärt
# oberoende vektorer det finns i A, matrisen s.k rang, i vårt fall tre st.
# (eftersom det är en numerisk beräkning med ändligt antal värdesiffror kan
# naturligtvis inte "qr" alltid avgöra detta exakt, "rank" anger hur många
# vektorer som inte hade ett motsvarande R-diagonalelement som var till
# absolutbeloppet "för" litet, med vissa rimliga kriterier för "för litet").
# QR0$pivot talar om i vilken ordning "qr" har lagt basvektorerna i förhållande
# till deras ursprungliga ordning (QR0$pivot[m1]=m2 betyder att basfunktion nr.
# m1 i den nya numreringen är basfunktion nr. m2 i den ursprungliga numreringen).
QR0 <- qr(A) # QR-faktorisera testmatrisen A
print("qr(A):",quote=FALSE)
print(QR0)
Q0 <- qr.Q(QR0) # ortogonala matrisen Q0 (med den nya numreringen "pivot")
print("Q0:",quote=FALSE)
print(Q0)
# kontrollera att Q är en ortogonal matris:
print("t(Q0)%*%Q0 (skall vara enhetsmatrisen):"
,quote=FALSE)
print(t(Q0)%*%Q0)
R0 <- qr.R(QR0)  # högertriangulära matrisen R0 (med den nya numreringen "pivot")
print("R0 (skall vara högertriangulär):",quote=FALSE)
print(R0)
# testa att återskapa A som Q0%*%R0
A0 <- Q0 %*% R0
print("A0 (återskapad A med ny ordning av kolumnerna):",quote=FALSE)
print(A0)
# återställ ordning mellan A's kolumner till ursprunglig med hjälp av QR0$pivot:
A1 <- A0
A1[,QR0$pivot] <- A0[,1:M]
print("A1 (återskapad A med ordning av kolumnerna återställd till ursprunglig):"
,quote=FALSE)
print(A1)
##
##
# Testa att lösa ett ekvationssystem A%*%c1=b med QR-metoden, approximativt i
# minstakvadratmening om det inte skulle ha någon exakt lösning, där matrisen A
# med ekvationskoefficienterna är den ovan QR-faktoriserade A.
#print(A)
print("Testa lösa ekvationssystem  A%*%c1=b.",quote=FALSE)
#
# ex. 1, b=t(c(2,3,4,0)):
if(M==4){
   print("Ex. b=t([2,3,4,0]):",quote=FALSE)
}else{
   print("Ex. b=",quote=FALSE)
}
# ekvationssystemet är:
# c1[1]+c1[3]=2
# c1[2]+c1[3]=3
# c1[4]=4
# 0=0
# exakt lösning är t.ex.: c1[1]=2, c1[2]=3, c1[3]=0, c1[4]=4
#
if(M==4){
   b <- matrix(c(2,3,4,0),M,1)
#(alternativa högerled för de alternativa testmatriserna
}else{if(M==5){
      b <- matrix(c(2,3,4,0,0),M,1)
   }else{
      b <- matrix(c(2,3,4),3,1)
   }
#)
}
print(t(b))
c2 <- t(Q0)%*%b
c0=0*c2
# bakåtsubstitution (om lösningen inte är entydig d.v.s QR0$rank<M så välj
# den (eventuellt approximativa) lösning som har minsta normenen d.v.s c0[m]
# =0 för m<QR0$rank, sedan vanlig bakåtsubstitution för de övriga elementen
# i c0, c0[m]=(c2[m]-R0[m,m+1]*c0[m+1]-...-R0[m,M]*c0[M])/R0[m,m]):
c0[QR0$rank,1] <- c2[QR0$rank,1]/R0[QR0$rank,QR0$rank]
for(k in 1:(QR0$rank-1)){
   m <- QR0$rank-k
   c0[m,1] <- (c2[m,1]-R0[m,(m+1):QR0$rank]%*%c0[(m+1):QR0$rank,1])/R0[m,m]
}
print("c0 (minstanormlösning c1 men med den nya numreringen):",quote=FALSE)
print(t(c0))
print("c1 (c1, minstanormlösning med den ursprungliga numreringen):",quote=FALSE)
c1 <- c0
c1[QR0$pivot] <- c0  # lägg modellparametrarna i den ursprungliga ordningen
print(t(c1))
# kvadratiska medelfelet:
bmodell <- A%*%c1
felvektor <- bmodell-b
E <- t(felvektor)%*%felvektor/N
print("kvadratiska medelfelet E =",quote=FALSE)
print(E)
if(QR0$rank<M){
   # ange alla lösningar om lösningen inte är entydig
   # (eller om ingen exakt lösning finns, alla lika goda approximativa
   # lösningar i minstakvadratmening (eller som skulle varit lika goda
   # approximationer om beräkningarna gjordes utan avrundningsfel))
   print("Alla lösningar c1 =",quote=FALSE)
   print(t(c1))
   # vi kan addera vilken vektor som helst till c1 ovan som inte ger något bidrag
   # till c2 och det är fortfarande en lösning (eller lika god approximation till
   # lösning om det inte existerar någon exakt lösning), så sätt c2=0 och lös på
   # valigt sätt för c1 med undantag för att ett av elementen i c0[QR0:M] inte sätts
   # till noll (utan, här för enkelhetens skull, till 1)
   c20 <- matrix(0*c(1:M),M,1)
   for(k1 in (QR0$rank+1):M){
      print("plus vilket tal som helst gånger",quote=FALSE)
      # tag c0[k1]=1 och alla andra element i c0 lika med noll
      c00 <- matrix(0*c(1:M),M,1)
      c00[k1,1] <- 1
      # finn c1 för detta val av c0[QR0$rank+1:M] på vanligt sätt
      # först c0[1:QR0$rank] via bakåtsubstitution
      for(k2 in 1:QR0$rank){
         m <- QR0$rank-k2+1
         c00[m,1] <- (c20[m,1]-R0[m,(m+1):M]%*%c00[(m+1):M,1])/R0[m,m]
      }
      # låt sedan c1 vara c0 men med den ursprungliga numreringen av basfunktionerna
      c10 <- c00
      c10[QR0$pivot] <- c00
      print(t(c10))
      #print(A%*%c10)#extra tillfälligt test, skall bli nollvektorn
   }
   print(".",quote=FALSE)
}else{
   print("Lösningen c1 ovan är entydig.",quote=FALSE)
}
#
#
# Det är inte alltid den bästa metoden att uttryckligen göra matrismultiplikationen
# t(Q0)%*%b för att beräkna c2. Ibland kan någon annan indirekt metod att göra denna
# matrismultiplikation metod ge bättre noggranhet. En sådan metod skulle ge samma
# resultat om beräkningarna gjordes exakt, men med ändligt antal värdesiffror i
# beräkningarna kan något olika metoder som skulle varit ekvivalenta vid exakt aritmetik
# ge olika stora avrundningsfel. Vilken metod som ger bästa resultatet kan vara beroende
# på detaljerna hur de numeriska beräkningarna för att skapa Q- och R-matriserna gjorts
# (med den just metod "qr" använder är det i och för inga numeriska problem i att utföra
# matrismultiplikationen t(Q)%*%b uttryckligen). P.g.a. av detta och för att underlätta
# administrationen av beräkningarna är det bra att göra moduler av QR-
# faktoriseringsrutiner som automatiskt tar hand om de olika delarna på ett så noggrant
# och effektivt och administrativt enkelt sätt som möjligt. I R kan t(Q0)%*%b
# beräknas med qr.qty(QR0,b)
print("t(Q0)%*%b, qr.qty(QR0,b):",quote=FALSE)
print(t(t(Q0)%*%b))
print(t(qr.qty(QR0,b)))
# Bakåtsubstitution kan göras med "backsolve". Så ekvationen kan lösas som:
M <- ncol(A)
QR0 <- qr(A)
c20 <- qr.qty(QR0,b)
R0 <- qr.R(QR0)
# Gör bakåtsubstituition -- för endast de "rank" första elementen av c00. De
# övriga elementen sätts till noll för att få miniminormlösningen:
c00 <- c(backsolve(R0[(1:QR0$rank),(1:QR0$rank)],c20),0*c((QR0$rank+1):M))
print("c00:",quote=FALSE)
print(c00)
c10 <- c00
c10[QR0$pivot] <- c00  # återställ ursprunglig numrering av basfunktionerna
print("c10:",quote=FALSE)
print(c10)
print(" ")
#
# Minstakvadratlösningen c1 till ekvationen kan fås direkt från QR-faktoriseringen (QR0)
# och högerledet (b) med funktionen "qr.coef"
print("c10=qr.coef(QR0,b):",quote=FALSE)
c10 <- qr.coef(QR0,b)
print(t(c10))
# Tyvärr(?) försöker qr.coef beräkna alla elementen i c1, så t.ex. de som svarar mot
# nolldiagonalelement i R0 kan ej beräknas utan sätts som "not available".
# Man skall kunna lösa ekvationen med "qr.solve". R-hjälpen:
# "solve.qr is the method for solve for qr objects. qr.solve solves systems of
# equations via the QR decomposition: if a is a QR decomposition it is the same as
# solve.qr, but if a is a rectangular matrix the QR decomposition is computed first.
# Either will handle over- and under-determined systems, providing a least-squares
# fit if appropriate."
# Men tyvärr får jag inte detta att fungera. Jag har inte kunnat förstå varför.
# Om någon hittar vad att göra, posta gärna. Tillsvidare får vi nöja oss med
# att "manuellt" använda QR-faktoriseringen för att lösa ekvationer, eller
# möjligen använda qr.coef och manuellt sortera bort element i lösningsvektorn
# som svarar mot redundanta vektorer (jag vet dock inte hur stabilt detta
# fungerar). För linjärmodellparameteranpassning så fungerar dock "lm" som vi skall
# se senare.
#qr.solve(A,b)
#qr.solve(QR0,b)
#solve.qr(A,b)
#solve.qr(QR0,b)

(Kommer någon på tricket hur "qr.solve" och "solve.qr" skall generellt användas, så gör gärna en post häritråden.)

R-skriptet "linapa2.r" exemplifierar hur QR-metoden kan användas för att göra minstakvadratanpassning av en rät linje till ett datastickprov. Dels med användning av "qr" som introducerades i ovanstående skript, dels med R-funktionen "lm" ("linear model") som introduceras här i detta skript.

Kod: Markera allt

# R-skript "linapa2.r", anpassning av rät linje till data med slumpmässigt fel
# endast i den beroende variabeln (kvasioberoende variablen exakt mätt).
# Minstakvadratanpassning mot [endast] den beroende variabeln (här y), med
# QR-metoden. Eftersom vi här inte har en oberoende variabel så kan vi inte sätta
# den till valda värden, den "blir vad den blir", och speciellt kan vi därför inte
# välja oberoendevariabelvärden så att basvektorerna blir ortogonala. Lösnings-
# metoden vi använde i "linapa1.r" fungerar därför inte utan vi använder QR-
# metoden för att transformera de basvektorer som vi råkar få till ett nytt
# koordinatsystem i vilket de transformerade basvektorerna Q[,m] är ortonormerade
# och lösningen c02 i det koordinatsystemet fås med metoden i "linapa1.r",
# varefter vi transformerar c02 tillbaka till modellparametrarna c01 i det
# ursprungliga koordinatsystemet. Vi visar hur QR-metoden används, dels manuellt,
# dels med funktionen "lm". VoF studiecirkel Statistics One, november 2012.
#
a <- -0.5  # lägsta möjliga x-värde
b <- 1.5  # högsta möjliga x-värde
y0 <- 1  # funktionsvärde för x=0
k0 <- 3  # funktionens lutningskoefficient
s_y <- 1  # standardavvikelse för slumpfel i y
N <- 100  # storleken på stickprovet
T <- 5  # skriv ut kolumnvektorer om N<T
#
#
# preliminär uppskattning för vår oberoende variabel x för att välja
# normeringsfaktorer för våra basfunktioner (likformig fördelning på a,b):
x <- a+c(0:(N-1))*(b-a)/(N-1) # referensvektor för ungefär vilken x-fördelning
                              # vi förväntar oss i testet
#
# basvektorer för basfunktionerna f0[1](x)=1 och f0[2](x)=(a+b)/2-x
# (För att minimera avrundningsfelen använder vi basfunktioner som är ortogonala
# för en likformig fördelning av den oberoende eller kvasioberoende variablen x.
# Här kommer de inte att bli helt ortogonala eftersom den oberoende variabeln i
# ett faktiskt utfall inte blir helt likformigt fördelad (endast dess sannolikhets-
# fördelning är likformig, de enskillda utfallen blir inte helt likformigt fördelade.
# Men mindre avvikelse från ortogonalitet ger mindre avrundningsfel i
# i ortogonaliseringen. I detta fall är problemet så enkelt med mycket få bas-
# funktioner så här spelar det ingen större roll. Men en bra princip att använda då
# det går för att minska avrundningsfelen. Av samma anledning görs också
# basfunktionerna ungefärligen normerade.)
F <- matrix(c(1+0*x,-(a+b)/2+1*x),ncol=2)
#
# beräkna normeringsfaktorer nf[1], nf[2], och normera basvektorerna
# F[,1]=nf[1]*f0[1](x) och F[,2]=nf[2]*f0[2](x):
nf=c(1:2)
for(k in 1:2){
   nf[k] <- 1/sqrt(t(F[,k])%*%F[,k])
   F[,k] <- F[,k]*nf[k]
}
# f[1](x)=nf[1]*f0[1](x) och f[2](x)=nf[2]*f0[2](x) skall nu vara
# ortonormerade över vår referenssamplingsvektor x
#
# kontrollera att F är en ortogonal matris:
print("t(F)%*%F för ungefärliga x (skall vara lika med 2 gånger 2 enhetsmatrisen):"
,quote=FALSE)
print(t(F)%*%F)
#
#
##
# Gör vårt test:
#
x <- runif(N,a,b)  # [kvasi-]oberoende variabel (likformigt [pseudo-]slumpmässig i [a,b])
y <- y0+k0*x+rnorm(N,0,s_y)  # beroende variabel (rät linje plus normalfördelade slumpfel)
#
plot(x,y)
##
#
#
# anpassa till rät linje med QR-metoden:
#
# basvektorer för basfunktionerna f[1](x)=nf[1]*1 och
# f[2](x)=nf[2]*((a+b)/2-x) (för faktiskt utfall av x):
F <- matrix(c(1+0*x,-(a+b)/2+1*x),ncol=2)
for(k in 1:2){
   nf[k] <- 1/sqrt(t(F[,k])%*%F[,k])
   F[,k] <- F[,k]*nf[k]
}
#
# visa normering och ortogonalitet för de basvektorer som basfunktionerna genererade
# för det faktiska utfallet av vår oberoende variabel x:
print("t(F)%*%F för faktiskt x (bör vara någerlunda nära 2 gånger 2 enhetsmatrisen):"
,quote=FALSE)
print(t(F)%*%F)
#
# QR-faktorisera F:
QR_F <- qr(F)
if(N<T){
   print("QR_F:",quote=FALSE)
   print(QR_F)
}
Q_F <- qr.Q(QR_F)
if(N<T){
   print("Q:",quote=FALSE)
   print(Q_F)
}
print(
"ortonormering av transformerade basvektorer, t(Q)%*%Q (skall vara enhetsmatrisen):"
,quote=FALSE)
print(t(Q_F)%*%Q_F)
R_F <- qr.R(QR_F)
print("R:",quote=FALSE)
print(R_F)
# Ange om det finns redundanta basfunktioner/basvektorer
# (om matrisen är av rang M (här 2) så är båda basvektorerna numeriskt signifikanta 
# (parametrarna för dem har numerisk signifikans, är inte helt dominerade av
# avrundningsfel) (eller åtminstone så har "qr" uppskattat dem som så), om de
# är statistiskt signifikanta är en annan sak som vi inte testar här)
print("antal redundanta basfunktioner:",quote=FALSE)
print(ncol(F)-QR_F$rank)
#
# lös ekvationssystemet för modellparametrarna i minstakvadratmening med QR-metoden:
M <- ncol(F)
c20 <- qr.qty(QR_F,y)  # c20=t(Q_F)%*%y
c00 <- 0*c(1:M)  # sätt c00=0 för redundanta basfunktioner
# bakåtsubstitution för ickeredundanta basfunktioner:
c00[1:QR_F$rank] <- backsolve(R_F[(1:QR_F$rank),(1:QR_F$rank)],c20[1:QR_F$rank])
c10 <- c00  # återställ numreringen av basfunktioner till den ursprungliga:
c10[QR_F$pivot] <- c00
#
# y-värden från modell:
ymodell1 <- F%*%c10
lines(x,ymodell1,col="green")
#
# ekvivalent modellkoefficient k01 (k0 skattad med metod 1):
k01 <- c10[2]*nf[2]
# ekvivalent modellkoefficient y01 (y0 skattad med metod 1):
y01 <- c10[1]*nf[1]-c10[2]*nf[2]*(a+b)/2
print("skattade modellparametrar y01, k01 (minsta kvadrat i y-led):"
,quote=FALSE)
print(c(y01,k01))
#
#
# Anpassa till rät linje med "lm" ("linear model").
# Anropas som "lm('model','datavärdena som skall anpassas till i en dataram')",
# 'model' skrivs här som 'y~x', ointuitivt nog innebär det att "lm" använder
# basfunktionerna '1' och 'x', om endast basfunktionen 'x' önskas måste 'model'
# anges som 'y~0+x'. "lm" anpassar modellparametrarna till datavärdena i minsta-
# kvadratmening "i y-led" med QR-metoden.
lm2 <- lm(y~x,as.data.frame(matrix(c(x,y)),ncol=2))
print("'lm':",quote=FALSE)
print(lm2)
print("lm2$rank:",quote=FALSE)
print(lm2$rank)
print("antal redundanta basfunktioner:",quote=FALSE)
print(2-lm2$rank) # antalet basfunktioner är 2 ('1' och 'x')
print("lm2$coefficients (y02, k02; y0 och k0 skattade av 'lm'):",quote=FALSE)
print(lm2$coefficients)
#
#
print(" ",quote=FALSE)
print("'verkliga' modellparametrar y0 och k0:",quote=FALSE)
print(c(y0,k0))

R-skriptet "linapa3.r" jämför minstakvadratanpassning för en rät linje med minstakvadratanpassning endast i den beroende variabeln, med total minstakvadratanpassning. Genom en enkel bortkommentering/inkommentering (för "xfelfri") kan skriptet ge ett stickprov med slumpmässigt fel i endast den beroende variabeln, eller också i både den beroende och den oberoende variabeln. Vi ser att endast-beroendevariabel-minstakvadrat-anpassning bättre skattar modellen då slumpfelet ligger i endast den beroende variabeln. Medan total minstakvadratanpassning bättre skattar modellen då slumpfelet ligger i båda variablerna.

Kod: Markera allt

# R-skript "linapa3.r", rät-linje-anpassning exempel 3, VoF studiecirkel
# Statistics One, november 2012. Nästan samma som linapa1.r men nu
# med valbart slumpfel endast i y eller i både x och y (normalfördelat
# med samma standardavvikelse för x som för y om mätfel också i x-led).
# Anpassa en rät linje till ett stickprov, med mätfel endast i y-led,
# eller i x- och y-led. Anpassa med minsta-kvadratanpassning, dels i y-led
# och visa som grön linje, dels total minstakvadratanpassning och visa
# som rosa linje.
a <- -0.5  # lägsta möjliga x0-värde
b <- 1.5  # högsta möjliga x0-värde
y0 <- 1  # funktionsvärde för x=0
k0 <- 3  # funktionens lutningskoefficient
s_y <- 0.5  # standardavvikelse för slumpfel i y (och ev. i x)
xfelfri <- FALSE  # om xfelfri=FALSE: samma standardavvikelse för x-fel
#xfelfri <- TRUE  # som för y-fel, om xfelfri=TRUE: noll fel i x
Nh <- 200  # halva storleken på stickprovet
randomiserat <- TRUE # om TRUE: randomisera, om FALSE: randomisera inte
N <- 2*Nh
##
if(randomiserat){
   # skapa en vektor x0 av längd N, där för varje x0-värde i övre halvan av
   # intervallet a,b det finns exakt ett motsvarande x-värde i nedre halvan
   # och vice versa, men där x0-värdena i övrigt är likformigt [pseudo-]
   # slumpmässigt fördelade över intervallet
   # (denna randomisering är helt onödig i detta exempel som sådant,
   # men bara för att påminna om vikten av randomisering om det skulle
   # varit en studie av ett empiriskt system):
   y <- c(1:N) # indexvektor för x-vektorn
   x0 <- c(1:N) # x0-vektorn
   for(k in 1:Nh){ # slinga i N/2 steg, i varje steg tar vi ett av paren av x0
      riy <- trunc(runif(1,1,N-2*k+3)) # slumpheltal i [1,N-2*k+2]
      rix1 <- y[riy]  # index för första x-värde i paret
      # tag bort det nu använda x-indexet från vektorn y av x-index:
      if(riy>1){
         if(riy<(N-2*k+2)){
            y <- c(y[1:(riy-1)],y[(riy+1):(N-2*k+2)])
         }else{
            y <- y[1:(N-2*k+1)]
         }
      }else{
         y <- y[2:(N-2*k+2)]
      } # borttagning från y klar
      x0[rix1] <- runif(1,a,b)  # första x0-värdet slumpmässigt i [a,b]
      riy <- trunc(runif(1,1,N-2*k+2)) # slumpheltal i [1,N-2*k+1]
      rix2 <- y[riy]  # index för andra x-värde i paret
      # tag bort det nu använda x-indexet från vektorn y av x-index:
      if(k<Nh){ #(såvida det inte var sista talet, då hoppar vi över det)
         if(riy>1){
            if(riy<(N-2*k+1)){
               y <- c(y[1:(riy-1)],y[(riy+1):(N-2*k+1)])
            }else{
               y <- y[1:(N-2*k)]
            }
         }else{
            y <- y[2:(N-2*k+1)]
         }
      }  # borttagning från y klar
      # andra x-värdet i paret är på samma avstånd från mitten (a+b)/2,
      # men på motsatta sidan av mitten:
      x0[rix2] <- a+b-x0[rix1]
   }
}else{
   # skapa en ickerandomiserad x-vektor med x-värden likformigt fördelade
   # i intervallet a,b (och därmed, för varje x-värde i övre halvan av
   # intervallet så finns ett motsvarande värde i nedre halvan av intervallet
   # på samma avstånd från mitten, och vice versa):
   x0 <- a+c(0:(N-1))*(b-a)/(N-1)
}
#print(x0)
##
##
##
# Definiera basfunktioner f[1] och f[2]:
#
# Basfunktionerna f0[1](x)=1 och f0[2](x)=(a+b)/2-x .
# Dessa är ortogonala med vår x0-vektor, men inte normerade, vi
# beräknar nedan normeringsfaktorer för dem:
F <- matrix(c(1+0*x0,-(a+b)/2+1*x0),ncol=2)
#
# Beräkna normeringsfaktorer nf[1], nf[2],
# som gör att basfunktionerna f[1]=nf[1]*f0[1] och f[2]=nf[2]*f0[2]
# ger normerade (och därmed ortonormerade) basvektorer F[,1]=f[1](x0)
# och F[,2]=f[2](x0) för de "felfria" oberoendevariabelvärdena x0
nf=c(1:2)
for(k in 1:2){
   nf[k] <- 1/sqrt(t(F[,k])%*%F[,k])
   F[,k] <- F[,k]*nf[k]
}
# f[1](x)=nf[1]*f0[1](x) och f[2](x)=nf[2]*f0[2](x) skall nu vara
# ortonormerade över vår "felfria" samplingsvektor x0
#
# kontrollera att F är en ortogonal matris:
print("t(F)%*%F för x0 (skall vara lika med 2 gånger 2 enhetsmatrisen):"
,quote=FALSE)
print(t(F)%*%F)
##
##
##
#  Gör testet:
#
#  skapa y-värdena, rät linje med konstant y0 och lutningskoefficient k0
#  plus normalfördelat [pseudo-]slumpmässigt fel med standardavvikelsen
#  s_y (och medelvärde=0 (inget bias)):
y <- y0+k0*x0+rnorm(N,mean=0,sd=s_y)
#
#  skapa x-värdena
if(xfelfri){
   x <- x0  # x "felfri"
}else{
   x <- x0+rnorm(N,mean=0,sd=s_y)  # samma "fel"(-standardavvikelse) som i y
}
#
plot(x,y)
#
r_xy <- cor(x,y)
print("korrelationskoefficient x,y:",quote=FALSE)
print(r_xy)
##
##
##
#  Gör linjeanpassning genom att minimera minstakvadratavvikelsen i y-led:
#
if(xfelfri){
   # För våra oberoendevariabelvärden x=x0 är basvektorerna F[,m](m=1,2)
   # ortonormerade, så modellparametrarna med avseende på basfunktionerna
   # f[m](m=1,2) fås direkt som projektionerna av beroendevariabelvektorn
   # på basvektorerna.
   #
   # modellkoefficienter c01:
   c01 <- t(F)%*%y
   #
}else{
   # För våra oberoendevariabelvärden x är basvektorerna F[,m](m=1,2)
   # inte ortonormerade, så modellparametrarna med avseende på
   # basfunktionerna f[m](m=1,2) får vi med QR-metoden. (Naturligtvis
   # skulle QR-metoden fungera också för x=x0, men vore då en onödigtvis
   # komplicerad lösningsmetod.)
   #
   # Skapa basvektorerna F[,m]=f[m](x) (m=1,2)
   F <- matrix(c(nf[1]*(1+0*x),nf[2]*(-(a+b)/2+1*x)),ncol=2)
   #
   # Visa ortonormeringen av basvektorerna
   print("t(F)%*%F för faktiska x-värden:",quote=FALSE)
   print(t(F)%*%F)
   #
   # Beräkna minstakvadratlösningen med QR-metoden.
   # (Se kommentarer i "QRtest1.r" och
   # "linapa2.r" för detaljerad förklaring av QR-metoden.)
   #
   M_F <- ncol(F)
   QR_F <- qr(F)
   print("antal redundanta basfunktioner:",quote=FALSE)
   print(M_F-QR_F$rank)
   c02 <- qr.qty(QR_F,y)
   R_F <- qr.R(QR_F)
   c00 <- 0*c(1:M_F)
   c00[1:QR_F$rank] <-
   backsolve(R_F[(1:QR_F$rank),(1:QR_F$rank)],c02[1:QR_F$rank])
   c01 <- c00
   c01[QR_F$pivot] <- c00
   #
   # visa ortonormeringen för de transformerade basvektorerna Q_F[,m]
   Q_F <- qr.Q(QR_F)
   print("ortonormering för transformerade basvektorer q:",quote=FALSE)
   print(t(Q_F)%*%Q_F)
}
# rita den skattade modellen 1 som en grön linje i diagrammet:
y1 <- F%*%c01
lines(x,y1,col="green")
#
#
# f(x) = c01[1]*nf[1]*1+c01[2]*nf[2]*(-(a+b)/2+1*x)
# = c01[1]*nf[1]-c01[2]*nf[2]*(a+b)/2 + c01[2]*nf[2]*x
# ekvivalent modellkoefficient k01 (k0 skattad med metod 1):
k01 <- c01[2]*nf[2]
# ekvivalent modellkoefficient y01 (y0 skattad med metod 1):
y01 <- c01[1]*nf[1]-c01[2]*nf[2]*(a+b)/2
print("skattade modellparametrar y01, k01 (minsta kvadrat i y-led):"
,quote=FALSE)
print(c(y01,k01))
#
#
#  gör minstakvadratanpassning till rät linje "i y-led" med "lm"
lm1 <- lm(y~x,as.data.frame(matrix(c(x,y),ncol=2)))
print(lm1$coefficients)
##
##
##
#  Gör linjeanpassning genom att minimera minstakvadratavvikelsen
#  vinkelrät från linjen till datapunkterna:
#
Cov <- cov(matrix(c(x,y),ncol=2)) # beräkna kovariansmatrisen
eig2 <- eigen(Cov) # beräkna egenvektor för kovariansmatrisen
#print(eig2)
# modellparameter k02 (egenvektorn beskriver riktningen på linjen,
# första elementet i egenvektorn är förflyttningen i x-led och
# andra elementet förflyttningen i y-led, så lutningskoefficienten
# är lika med andra elementet av egenvektorn delat med första elementet
# av egenvektorn):
k02 <- eig2$vectors[2,1]/eig2$vectors[1,1]
# modellparameter y02 (f2(x) = medlevärde_y + k02*(x-medelvärde_x)
# = medelvärde_y-k02*medelvärde_x + k02*x = y02+k02*x,
# så y02=medelvärde_y-k02*medelvärde_x):
y02 <- mean(y)-k02*mean(x)
print("skattade modellparametrar y02 och k02 (total minsta kvadrat):"
,quote=FALSE)
print(c(y02,k02))
y2 <- y02+k02*x
lines(x,y2,col="pink")
##
##
##
# skriv ut 'verkliga' modellparametrar som jämförelse
print("'verkliga' modellparametrar y0 och k0:",quote=FALSE)
print(c(y0,k0))





R-skriptet "QRtest2.r" exemplifierar hur QR-metoden kan användas för att anpassa en olinjär modell till ett datastickprov.

Kod: Markera allt

# R-skript "QRtest2.r", VoF studiecirkel Statistics One, november 2012.
# Testa att anpassa en kvadratisk modell till en parabel y=x^2 med
# slumpmässiga mätfel i y men inga mätfel i x, med minstakvadrat-
# anpassning i y-led med QR-metoden.
s_y <- 0.2  # standardavvikelse för slumpfel i y (och ev. i x)
N <- 100  # stickprovets storlek
##
x <- -1+c(0:(N-1))*2/(N-1)  # x-vektor
##
y <- 1+x*(1+x)+rnorm(N,0,s_y)  # y-vektor
##
plot(x,y)
##
# Skapa basvektorerna F[,1]=f[1](x)=1, F[,2]=f[2](x)=x, F[,3]=f[3](x)=x^2
# (detta är inte de allra bäst valda basfunktionerna, man skulle
# åtminstone kunna gjort en approximativ normering, men
# tillräckligt bra för detta enkla exempel så tag dessa för
# enkelhetens skull)
F <- matrix(c(1+0*x,x,x*x),ncol=3)
#
# visa ortonormering för basvektorerna
print("t(F)%*%F:",quote=FALSE)
print(t(F)%*%F)
##
# Beräkna minstakvadratlösningen med QR-metoden.
# (Se kommentarer i "QRtest1.r" och
# "linapa2.r" för detaljerad förklaring av QR-metoden.)
M_F <- ncol(F)
QR_F <- qr(F)
print("antal redundanta basfunktioner:",quote=FALSE)
print(M_F-QR_F$rank)
c02 <- qr.qty(QR_F,y)
R_F <- qr.R(QR_F)
c00 <- 0*c(1:M_F)
c00[1:QR_F$rank] <-
backsolve(R_F[(1:QR_F$rank),(1:QR_F$rank)],c02[1:QR_F$rank])
c01 <- c00
c01[QR_F$pivot] <- c00
#
# visa ortonormeringen för de transformerade basvektorerna Q_F[,m]
Q_F <- qr.Q(QR_F)
print("ortonormering för transformerade basvektorer q:",quote=FALSE)
print(t(Q_F)%*%Q_F)
#
# skriv ut modellparametrarna
print("modellparametrar (f(x)=c01[1]+c01[2]*x+c01[3]*x^2):",quote=FALSE)
print(c01)
#
# rita den skattade modellen 1 som en grön linje i diagrammet:
y1 <- F%*%c01
lines(x,y1,col="green")
##
##
# skriv ut 'verkliga' modellparametrar som jämförelse
print("'verkliga' modellparametrar:",quote=FALSE)
print(c(1,1,1))





"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » sön 25 nov 2012, 23:11

föreläsning 7a, del 6
normalekvationen
Vi har nu kommit till normalekvationsmetoden. Jag repeterar också några delar i QR-metoden och passar på att rätta några fel från del 5. (T.ex. "Vilket tal c[M] som helst är en lösning till denna ekvation.". Nej det är det inte, men vilket tal c[M] som helst ger en lika bra approximativ bästa minstakvadratlösning till det ursprungliga modellanpassningsproblemet, deock med vissa betydande riskfaktorer för stora |c[M]| varför vi oftast väljer |c[M]| litet som t.ex. noll. Och vi visar inte att det valet ger miniminormlösningen, men oftast ligger den inte alltför långtifrån för att det skall ställa till problem. Och "täljareparentesfelet i formeln för c[mmin] med ett fel av storleksordningen |R[mmax,mmax]/R[mmin,mmin]| gånger så stort till c[mmax]" är fel, men det väsentliga är att det är denan kvot som man (grovt uppskattat) kan använda för felbedömningen. Jag lägger in en ny formulering för motiveringen av detta här som förhoppningsvis är mindr fel. Högst förmodligen finns många fler fel i både föreläsning 7a del 5 och många eller alla andra delar. Jag har bara begränsade möjligheter attg korrekturläsa alla dessa poster. Förhoppningsvis är det dock tydligt nog för att de väsentliga principerna skall gå fram. Det bästa sättet att studera materialet är att läsa posterna och sedan själv göra beräkningarna, både analytiska (räkna själv med papper och penna) och R-skripten (test asjälv i R-programmet, både interaktivt och attg modifiera och att själv skriva och testa nya skript), och vid en sådan användning bör inte några fel här och där i posterna spela någon roll. Det sagt skall jag naturligtvis försöka få posterna så korrekta som möjligt.)



En altarnativ metod till QR att lösa ett ekvationsystem (om ingen exakt lösning finns, approximativt) i minstakvadratmening är den s.k. normalekvationsmetoden. För att beskriva denna utgår från QR-metoden som vi redan känner. Vi finner en bästa approximativ lösning i minstakvadratmening till ekvationen
F %*% c = y (1)
genom att QR-faktorisera F:
F = Q %*% R (2).
Eftersom Q är en ortogonal matris fås minstakvadratlösningen till (1) som det c eller de c som är lösning till:
R %*% c = t(Q) %*% y (3).
Vi kommer alltså ihåg att lösningen c till (3) inte nödvändigtvis är en lösning till (1) (eller om R har något diagonalelement lika med noll så att det finns noll eller många lösningar c till (3), lösningarna c till (3) inte nödvändigtvis är lösningar till (1)) (och för våra applikationer oftast inte är en lösning eller lösningar), men är den bästa approximationen till en lösning i minstakvadratmening (eller är de bästa approximationerna till lösningar av (1) om (3) skulle ha mer än en lösning). Om vi multiplicerar (3) med samma faktor i både vänster- och höger-ledet så kommer då också det c (eller de c) som är lösningen (eller lösningarna) till (3) att vara en lösning (eller lösningar) till denna nya ekvation. Multiplicera (3) med t(R) från vänster:
t(R) %*% R %*% c = t(R) %*% t(Q) %*% y (4)
Men t(Q)%*%Q=1 (där "1" är M gånger M enhetsmatrisen), så vänsterledet i (4) är identiskt med
t(R)%*%1%*%R%*%c = t(R)%*%t(Q)%*%Q%*%R%*%c = t(Q%*%R)%*%(Q%*%R)%*%c
= t(F)%*%F%*%c.
Högerledet av (4) skriver vi om som
(t(R)%*%t(Q))%*%y = t(Q%*%R)%*%y = t(F)%*%y.
Så (4) är ekvivalent med
(t(F) %*% F) %*% c = t(F) %*% y (5).
Ekvation (5) kallas normalekvationen ("normal" i meningen "vinkelrät" (felet F%*%c-y är normalt mot alla F's kolumner), se föreläsning 7a del 4). Och det c eller de c som ger bästa approximation i minstakvadratmening till (1) är alltså lösning(ar) till (5). Så det eller de c som ger bästa approximation i minstakvadratmerning till (1) måste alltså vara en delmängd av lösningarna c till (5).

Studera nu först fallet att alla diagonalelementen i R är skillda från noll. Vi inser från formen på R att en lösning till (5) också måste vara en lösning till (3). Så lösningen till (5) (en exakt lösning existerar och är entydig i detta fall) är också lösningen till (3) och lösningen till (3) är lösningen till (5). (4) och (5) är ekvivalenta (har samma lösningsmängd), så vi visar att en lösning till (5) också är en lösning till (3) genom att visa att en lösning till (4) också är en lösning till (3). Eftersom R är högertrinagulär så är t(R) vänstertriangulär (har nollskillda element endast på och till vänster om huvuddiagonalen, t(R)[m1,m2]=0 för m1<m2). (4) löses därför genom att först beräkna R%*%c med framåtsubstitution. Framåtsubstitution fungerar på motsvarande sätt som bakåtsubstitution, enda skillnaden är att vi istället för att som i bakåtsubstitution börja med det sista elementet av den beroendevariabelvektorn (här R%*%c) och arbeta oss mot lägre index, så börjar vi i framåtsubstitution med det första elementet och arbetar oss mot högre index. På samma sätt som bakåtsubstitution ger en klar och entydig lösning till ekvationen om alla diagonalelement i den högertriangulära koefficientmatrisen är skillda från noll, så ger framåtsubstitution en klar och entydig lösning till ekvationen om alla diagonalelement i den vänstertriangulära koefficientmatrisen är skillda från noll. Men diagonalelementen i t(R) är desamma som i R, så om alla R's diagonalelement är skillda från noll så har både bakåt- och framåt-substitutionerna lösning som är entydig. Så om diagonalelementen är skillda från noll så har (3) och (4) entydiga lösningar, så eftersom (3) har en lösning och (4) (och därmed (5)) en entydig lösning, så ger att (3)'s lösningar är en delmängd av (5)'s lösningar, att lösningen till (5) är lösningen till (3).

Studera nu först fallet att exakt ett av R's diagonalelement är lika med noll. Antag att vi har numrerat basfunktionerna (eventuellt genom att omnumrera dem) så att det är det sista diagonalelementet R[M,M]=0. Vi kan då inte lösa (3) med standard bakåtsubstitution eftersom första delekvationen blir
R[M,M]*c[M]=c2[M] (6)
0*c[M]=c2[M] (7)
(7) har ingen lösning om inte c2[M]=0, och oavsett om det är fallet eller inte så blir felet för c2[M] lika stort oavsett vilket värde vi väljer för c[M]. Men från konstruktionen av QR-faktoriseringen så vet vi att anledningen till att R[M,M] är noll är att basfunktionen f[M](x) är redundant, den bidrar inget utöver de lägre numrerade basfunktionerna till att minska minstakvadratfelet för vår modell. Om vi ändå har skapat en kolumnvektor Q[,M] i Q som är ortogonal mot alla de andra kolumnerna i Q så har vi inte skapat den från våra basvektorer F[,m]. Så vektorn Q[,M] är inte en relevant vektor i vår modell och koefficienten för dess bidrag till modellvärdena bör vara noll (d.v.s. c2[M]=0) är det korrekta). Eftersom basfunktion f[M] ändå inte bidrar till att förbättra modellen så kan vi välja c[M] som vilket värde som helst utan att noggrannheten i vår modell påverkas. Detta gäller till tämligen god noggrannhet om vi använder c genom att multiplicera R med c för att få c2 och sedan använder c2 genom att multiplicera Q med c2 för att få modellvärdena y_modell för just de x-värden som vi baserade modellanpassningen på. (Ty om vi inte tar bort en kolumn M från Q då f[M] visar sig vara redundant utan skapar en vektor Q[,M] oberoende från basfunktionerna, så sätter vi R[M,M]=0, så c2[M]=0 exakt som den skall oavsett värdet på c[M]. Och övriga element i c2 får sina rätta värden då vi genomför bakåtsubstitutione för dem med just det värde för c[M] som vi råkar ha denna gången. Exakta värdet för c[M] påverkar endast c2=R%*%c för m<M något litet via att avrundningsfelen kommer in något litet annorlunda.) Om vi istället beräknar modellvärdena genom att direkt multiplicera F med c för att få modellvärdena y_modell för dessa x-värden så gäller samma sak, om vi utför beräkningarna utan avrundningsfel, men vi förväntar oss i detta fall något större känslighet från c[M] p.g.a. avrundningsfel. (Ty F=Q%*%R, så att multiplicera F med c påverkas inte av värdet på c[M] eftersom de övriga c[m] (m<M) är beräknade med bakåtsubstitutionen för den använder just detta värde för c[M] så att R%*%c har sitt rätta värde c2, om beräkningarna utförs exakt. Att direkt multiplicera F med c avviker ännu något mera från den direkta inversen (inkl. avrundningsfel) till bakåtsubstitutionen än att uttryckligen multiplicera R med c (för att sedan multiplicera Q med det), så avvikelsen i y_modell från ändring av c[M] p.g.a. avrundningsfel förväntas bli något större om än fortfarande ganska liten så länge |c[M]| inte görs mycket stor.) Om |c[M]| tas mycket stor riskerar dessa avrundningsfel att bli mycket stora och noggrannheten i modelllen att bli dålig. Och om vi beräknar modellvärden y_modell(x) = \sum_{m=1}^M(c[m]*f[m](x)) för x-värden som inte var de vi använde i modellanpassningen är risken ännu större att stora |c[M]| skulle kunna ådstadkomma försämringar av modellnoggrannheten. Om vi inför nya x-värden så kan det vara så att basfunktionen fortfarande är redundant, eller så att den nu skulle bli ickeredundant. I det senare fallet finns något visst värde på c[M] som minimerar modellfelet men eftersom vi inte alls vet vilket (kan vara något positivt eller något negativt c[M] eller c[M]=0), så är det säkraste att sätta |c[M]| till ett lågt värde (om c[M] påverkar modellnogrannheten alls så kan vi vara säkra på att både tillräckligt stort c[M] och tillräckligt stort -c[M] skulle försämra modellnoggrannheten, även vid en exakt beräkning utan avrundningsfel, så säkrast att sätta |c[M]| till ett lågt värde). Detta motiverar att (såvida vi inte i just det fallet har annan oberoende information som talar för något annat) att sätta c[M]=0 då R[M,M]=0. Ett annat rimligt sätt utifrån motivering ungefär enligt ovan att välja värdet på c[M] är att välja det c[M] som minimerar normen |c|, lösningen vilken kallas miniminormlösningen. Om inte c[m] (m<M) berodde på c[M] så skulle detta värde vara c[M]=0. Men nu beror vanligen c[m] (m<M) av c[M] men c[M]=0 förväntas inte ge lösning längre ifrån miniminormlösningen än att det spelar mindre roll. När väl ett värde för c[M] har valts så fås sedan c[M-1],...,c[1] på vanligt sätt genom bakåtsubstitution. Resonemanget generaliseras ätt till fallet då ett godtyckligt antal av R's sista diagonalelement är lika med noll. T.ex. då de två sista är lika med noll. Först för vi exakt samma resonemang som ovan för att sätta c[M]=0. Men när vi väl gjort det blir situationen för c[M-1] densamma som i resonemanget ovan, och vi sätter också c[M-1]=0, varefter c[M-2],...c[1] fås med vanlig bakåtsubstitution.

(4) löser vi genom att först lösa t(R)%*%c4=c3 där c3=t(F)%*%y genom framåtsubstitution och sedan R%*%c=c4 genom bakåtsubstitution. Om R[M,M]=0 men alla andra R-diagonalelement skillda från noll så ger framåtsubstitutionen entydiga värden för c4[1],...,c4[M-1] men stöter på problem för c4[M] där vi får
R[M,M]*c4[M] = c3[M] - R[1,M]*c4[1]-...-R[M-1,M]*c4[M-1]
Eftersom R[M,M] är lika med noll så ger vilket värde som helst för c4[M] en lika bra eller dålig lösning till ekvationen. Vi testar att sätta c4[M]=0 istället för som lösning till denna ekvation. Vid den påföljande bakåtsubstitutionen får vi i första steget
R[M,M]*c[M]=c4[M]
Återigen blir lösningen lika bra eller dålig oberoende av vilket värde vi väljer för c[M]. Om vi har valt c4[M]=0 så får vi en axakt lösning oavsett värdet vi väljer för c[M]. Men att vi valde c4[M]=0 var bara av bekvämlighet, det viktiga är att då R[M,M]=0 kan inte c[M] beräknas från c4[M]; c[M] påverkas inte av c4[M]'s värde. Och i de följande stegen i bakåtsubstitutionen kommer c4[M] inte in alls (utan i steg m bara c4[m] och c[m+1],...,c[M]) så ingenstans påverkar c4[M] c. Av samma anledning som i QR-metoden så sätter vi därför också i normalekvationsmetoden c[M]=0 då R[M,M]=0. Under det valet har vi en entydig lösning för c[M] i (4), som är samma lösning som för c[M] i (3) om vi också där väljer att sätta c[]M]=0 då R[M,M]=0. Men efter att c[M] är satt till noll i både (4) och (3), gäller att (4) har en entydig lösning som också är entydig lösning till (3). Argumentet ovan för detta för fallet då alla R's diagonalelement var skillda från noll gäller. Och om de två sista diagonalelementen hos R skulle vara lika med noll så kan vi på motsvarande sätt som för QR-metoden efter att vi satt koefficienterna för m=M till noll upprepa detta argument för m=M-1, etc., så argumentet gäller för godtyckligt antal nolldiagonalelement.

Vi kan också kortare motivera att lösningen till (4) också är lösningen till (3), eventuellt med något extra kriterium för vad vi avsert med "lösningen" till (4) och (3). Ty vi vet att om ett diagonalelement hos R är lika med noll så innebär det att motsvarande basvektor är redundant. Så det finsn ingen anledning att ha kvar den basvektor. Tag bort den; antalet basfunktioner och antalet kolumner i F och Q, och antalet rader och kolumner i R, och antalet rader i c, har minskat med ett. Och alla R's diagonalelement är nu skillda från noll och argumentet ovan för fallet alla R[m,m] skillda från noll är giltigt. Skulle vi sedan ändå formellt vilja skriva resultatet med det ursprungliga antalet M basfunktioner och modellparametrar, så kan vi göra det genom att sätta c[M]=0.

Om ett diagonalelement i R skulle vara skillt från noll men mycket nära noll så beror det ofta på att motsvarande kolumn i F var "nästan redundant"; nästan helt bortsubtraherades då vi skulle göra den ortogonal mot de övriga kolumnerna i Q och att den därför fick divideras med ett till absolutbeloppet mycket litet tal för att ge en normerad vektor. Detta gör att det förmodligen finns ganska mycket avrundningsfel i Q[,M] (vi förutsätter här att vi numrerat basfunktionerna så att den nästan redundanta satts som den sista, nr. M). Dessutom ger det mycket lilla värdet på |R[M,M]| en stor förstärkningsfaktor för hur avrundningsfel i c[M] sprider sig till de övriga modellparametrarna i bakåtsubstitutionen (3). När vi beräknar c[M]=c2[M]/R[M,M] förstärks c[M] inklusive avrundningsfel med en faktor 1/|R[M,M]|. Men det absoluta värdet på R[M,M] är inte det som spelat någon roll. Ty om vi skalade om alla basfunktionerna med en gemensam faktor så skulle alla element i R skalas med denna faktor, men en sådan skalning av hela problemet skulle inte inverka på lösningen (så länge vi inte riskerar att gå utanför området som exponenten i beräkningsaritmetiken kan beskriva). Det viktiga är därför det relativa värdet på |R[M,M]|, Som en grov uppskattning kan vi förvänta oss att felet förstärks med en faktor
1/(|min(|R[m,m]|)/max(|R[m,m]|))=1/(|min(|R[m,m]|)/|R[M,M]|))
vid bakåtsubstitutionen. Framåtsubstitution fungerar på samma sätt, så också vid denna förväntar vi oss en felfaktorförstärkning av grovt sett denna storlek. Här ser vi att även om normalekvationsmetoden och QR-metoden är likvärdiga vid en exakt beräkning, så är de inte likvärdiga vid en beräkning med ändligt antal värdesiffror. I QR-metoden har vi endast bakåtsubstitutionen, och förväntar oss en felförstärkningsfaktor grovt uppskattad som
max(|R[m,m]|)/min(|R[m,m]|)=10^T. I normalekvationsmetoden kommer denna faktor in både i framåtsubstitutionen och bakåtsubstitutionen, så vi förväntar oss en felförstärkningsfaktor grovt uppskattad som (max(|R[m,m]|)/min(|R[m,m]|))^2=(10^T)^2=10^(2*T). Om beräkningarna genomförs med ett fixerat antal decimala värdesiffror V i både QR-metoden och normalekvationsmetoden så måste vi då kräva för att ha åtminstone någon giltig värdesiffra kvar att, med rimlig marginal, V>T i QR-metoden och V>2*T i normalekvationsmetoden. Alla basfunktioner som inte uppfyller detta krav måste vi betrakta som i den numeriska praktiken redundanta (och den enklaste och ofta bästa metoden är att helt enkelt ta bort dessa basfunktioner från vår beräkning). Vi ser alltså att normalekvationsmetoden har nackdelen att vara betydligt mer känslig för avrundningsfel än QR-metoden. (De inbyggda metoderna som "lm" i R-programmet använder därför inte normalekvationsmetoden utan QR-metoden.)

Den effektiva metoden att beräkna faktoriseringen G=t(R)%*%R i triangulära matriser av en (reell) symmetrsik matris G (t.ex. G=t(F)%*%F) är den s.k. Cholesky-faktoriseringsalgoritmen. I programmet R finns denna tillgänglig som funktionen "chol", och är alltså den funktion som bör användas för att lösa normalekvationer i R-programmet. (Man kan använda "qr" naturligtvis, men det är ineffektivt då vi endast använder R-matrisen och inte Q-matrisen.) Jag demonstrear detta i R-skripten "CholeskyTest1.r" och "CholeskyTest2.r".

Kod: Markera allt

# R-skript "CholeskyTest1.r", första test av Cholesky-faktorisering i R.
# VoF studiecirkel StatisticsOne, november 2012.
##
# lägsta relativa värde för |R[m,m]| för kolumner som vi räknar som
# effektivt ickeredundanta (sätt s00 noll eller negativt för att istället
# använda chol's uppskattning):
s00 <- -1e-6
##
# Skapa en enkel matris F där vi skall testa att Cholesky-faktorisera t(F)%*%F,
# och lösa ekvation F%*%c1=y genom att lösa normalekvationen t(F)%*%F%*%c1=t(F)%*%y.
# Detta är samma skript som QRtest1.r, men med Cholesky-faktorisering istället för
# QR-faktorisering.
# Vi skapar F som en 4 gånger 4 matris där kolumnerna kan konceptualiseras
# som vektorer i ett fyrdimensioenllt kartesiskt koordinatsystem. Första
# kolumnvektorn är av längden 1 parallellt med första koordinataxeln. Andra
# kolumnvektorn är av längden 1 parallellt med andra koordinataxeln. Tredje
# kolumnvektorn är av längden sqrt(2) i planet de två första koordinataxlarna
# ligger i, riktad mittemellan första och andra koordinataxlarnas riktningar.
# Fjärde kolumnvektorn är av längden 1 riktad parallellt med den tredje
# koordinataxeln. Den tredje kolumnvektorn inför alltså inte någon ny riktning
# utöver de två första (kan skrivas som linjärkombinationen F[,3]=F[,1]*1
# +F[,2]*1 av de två första kolumnvektorerna). Ingen av F's kolumnvektorer
# har någon nollskild komponent för den fjärde koordinaten, så det är
# uppenbart att basvektorer skapade linjärt från F's kolumner endast kan
# beskriva vektorer som ligger i det tredimensionella underrummet givet av de
# tre första koordinataxlarna.
# Vår testmatris F:
F <- matrix(c(c(1,0,0,0),c(0,1,0,0),c(1,1,0,0),c(0,0,1,0)),4,4)
#(alternativa testmatriser, med två respektive noll redundanta kolumner
#F <- matrix(c(c(1,0,0,0,0),c(0,1,0,0,0),c(1,1,0,0,0),c(1,-1,0,0,0),c(0,0,1,0,0)),5,5)
#F <- matrix(c(c(1,0,0),c(0,1,0),c(0,0,1)),3,3)
#)
N <- nrow(F)
M <- ncol(F)
print("N,M:",quote=FALSE)
print(c(N,M))
print("F:",quote=FALSE)
print(F)
# normalekvationskoefficientmatrisen FtF=t(F)%*%F:
FtF <- t(F)%*%F
print("FtF=t(F)%*%F (skall vara symmetrisk):",quote=FALSE)
print(FtF)
##
# Cholesky-faktorisera matrisen FtF med "chol"-funktionen, lagra resultatet i R0:
R0 <- chol(FtF,pivot=TRUE) # man skall alltid använda "pivot=TRUE", annars pivoteras ej
print("R0=chol(FtF,pivot=TRUE) (skall vara högertriangulär):",quote=FALSE)
print(R0)
rank0 <- attr(R0,"rank")
pivot0 <- attr(R0,"pivot")
print("av chol gjord pivotering och uppskattad rang:",quote=FALSE)
print(pivot0)
print(rank0)
# den av chol uppskattade rangen är ofta litet väl optimistisk, så vi gör en
# egen uppskattning
rank1 <- 0
if(s00>0){
   for(m in 1:M){
      if((abs(R0[m,m])/max(abs(diag(R0))))>s00){
         rank1 <- rank1+1
      }
   }
   print("rank1(vår uppskattning av numeriskt effektiv rang):",quote=FALSE)
   print(rank1)
}else{
   rank1 <- rank0
   print("rank1 (använd chol's uppskattning av rang):",quote=FALSE)
   print(rank1)
}
#
# testa att återskapa FtF=t(F)%*%F som t(R0)%*%R0
FtF0 <- t(R0) %*% R0
print("FtF0 (återskapad FtF med ny ordning av kolumnerna):",quote=FALSE)
print(FtF0)
# återställ ordning mellan FtF's kolumner till ursprunglig med hjälp av pivot0:
FtF1 <- FtF0
FtF1[pivot0,pivot0] <- FtF0[1:M,1:M]
print("FtF1 (återskapad FtF med ordning av kolumnerna återställd till ursprunglig):"
,quote=FALSE)
print(FtF1)
##
##
##
# Testa att lösa ett ekvationssystem F%*%c1=y med normalekvationsmetoden
#print(F)
print("Testa lösa ekvationssystem  F%*%c1=y.",quote=FALSE)
#
# ex. 1, y=t(c(2,3,4,0)):
if(M==4){
   print("Ex. y=t([2,3,4,0]):",quote=FALSE)
}else{
   print("Ex. y=",quote=FALSE)
}
# ekvationssystemet är:
# c1[1]+c1[3]=2
# c1[2]+c1[3]=3
# c1[4]=4
# 0=0
# exakt lösning är t.ex.: c1[1]=2, c1[2]=3, c1[3]=0, c1[4]=4
#
if(M==4){
   y <- matrix(c(2,3,4,0),M,1)
#(alternativa högerled för de alternativa testmatriserna
}else{if(M==5){
      y <- matrix(c(2,3,4,0,0),M,1)
   }else{
      y <- matrix(c(2,3,4),3,1)
   }
}
#)
print(t(y))
# normalekvationens högerled:
F0 <- F[,pivot0]  # F men med den nya numreringen av kolumnerna
h0 <- t(F0)%*%y  # högerledet i normalekvationen
#print("h0=t(F0)%*%y:")
#print(t(h0))
# beräkna c30=R0%*%c10 genom att lösa t(R0)%*%c30=h0 med framåtsubstitution:
c30 <- 0*c(1:M)
c30 <- forwardsolve(t(R0[(1:rank1),(1:rank1)]),h0[1:rank1])
# beräkna c10 genom att lösa R0%*%c10=c30 med bakåtsubstitution:
c10 <- 0*c(1:M)
c10[1:rank1] <- backsolve(R0[(1:rank1),(1:rank1)],c30[1:rank1])
print("c10 (lösningsvektorn med den nya numreringen av basfunktioner):",quote=FALSE)
print(c10)
# lösningsvektorn med den ursprungliga numreringen av basfunktionerna:
c1 <- c10
c1[pivot0] <- c10
print("c1 (lösningsvektorn med den ursprungliga numreringen av basfunktionerna):"
,quote=FALSE)
print(c1)
print("kvadratiska medelfelet:",quote=FALSE)
print(t(F%*%c1-y)%*%(F%*%c1-y)/N)

Kod: Markera allt

# R-skript "CholeskyTest2.r", VoF studiecirkel Statistics One, november 2012.
# Testa att anpassa en kvadratisk modell till en parabel y=x^2 med
# slumpmässiga mätfel i y men inga mätfel i x, med minstakvadrat-
# anpassning i y-led med normalekvationsmetoden.
s_y <- 0.2  # standardavvikelse för slumpfel i y (och ev. i x)
N <- 100  # stickprovets storlek
##
x <- -1+c(0:(N-1))*2/(N-1)  # x-vektor
##
y <- 1+x*(1+x)+rnorm(N,0,s_y)  # y-vektor
##
plot(x,y)
##
# Skapa basvektorerna F[,1]=f[1](x)=1, F[,2]=f[2](x)=x, F[,3]=f[3](x)=x^2
# (detta är inte de allra bäst valda basfunktionerna, man skulle
# åtminstone kunna gjort en approximativ normering, men
# tillräckligt bra för detta enkla exempel så tag dessa för
# enkelhetens skull)
F <- matrix(c(1+0*x,x,x*x),ncol=3)
#
# visa ortonormering för basvektorerna
print("t(F)%*%F:",quote=FALSE)
print(t(F)%*%F)
##
# Beräkna minstakvadratlösningen med normalekvationsmetoden.
# (Se CholTest1.r för förklaring av metoden.)
M_F <- ncol(F)
FtF <- t(F)%*%F  # koefficientmatrisen för normalekvationen
R0 <- chol(FtF,pivot=TRUE) # t(R0)%*%R0={t(F)%*%F, med ny numrering}
print("R0 (skall vara högertriangulär):",quote=FALSE)
print(R0)
pivot0 <- attr(R0,"pivot")
rank0 <- attr(R0,"rank")
print("antal redundanta basfunktioner:",quote=FALSE)
print(M_F-rank0)
h0 <- t(F[,pivot0])%*%y # högerledet i normalekvationen
c30 <- 0*c(1:M_F)
c30[1:rank0] <- forwardsolve(t(R0[(1:rank0),(1:rank0)]),h0[1:rank0])
c00 <- 0*c(1:M_F)
c00[1:rank0] <- backsolve(R0[(1:rank0),(1:rank0)],c30[1:rank0])
c01 <- c00
c01[pivot0] <- c00
#
# skriv ut modellparametrarna
print("modellparametrar (f(x)=c01[1]+c01[2]*x+c01[3]*x^2):",quote=FALSE)
print(c01)
#
# rita den skattade modellen 1 som en grön linje i diagrammet:
y1 <- F%*%c01
lines(x,y1,col="green")
##
##
# skriv ut 'verkliga' modellparametrar som jämförelse
print("'verkliga' modellparametrar:",quote=FALSE)
print(c(1,1,1))
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » sön 02 dec 2012, 04:53

Vi har nu långsammat ned studiecirkeln ett tag för att i något lugnare tempo familiarsera oss med tvådimensionella sannolikhetsfördelningar, linjär korrelation, och introducera oss till grunderna i modellanpassning. Vi återgår nu till att mer direkt följa Conways föreläsning 7 enkel regression. (Jag hoppar över åtminstone för nu den utlovade beskrivningen av en QR-faktoriseringsalgoritm, och hoppar också över åtminstone för nu singulärvärdesfaktorisering. Vi har åtminstone nu hoppas jag såpass mycket av grund att vi kan följa några av Conways kommande föreläsningar.)

Vi har en uppsättning datapunkter som vi av någon anledning antar kan beskrivas med en linjär modell eller vill testa om den kan beskrivas av en linjär modell. Säg att vi har en beroende variabel y och en oberoende eller kvasioberoende variabel x. Vi antar att det finns ett slumpmässigt fel som huvudsakligen ligger i x medan y har inget eller åtminstone litet fel. Vi gör därför en minstakvadratanpassning "i y-led". För att underlätta beräkningen så gör vi en transformation av koordinatsystemet till ett nytt koordinatsystem med samma riktning på axlarna men skalorna ändrade med standardavvikelserna och origo flyttat till medelvärdena (till x=M_x, y=M_y, där M_X = medelvärdet för x, M_y = medelvärdet för y). Detta är alltså de normaliserade variabler som vi införde i föreläsning 2. De nya koordinatvärdena för datapunkt nr. n är
Zx[n] = (x[n]-M_x)/SD_x
Zy[n] = (y[n]-M_y)/SD_y
där SD_x = standardavvikelsen för x, SD_y = standardavvikelsen för y. Inför de två (preliminära) basfunktionerna
f0[1](Zx)= 1, f0[2](Zx)=Zx .
Vi ser att dessa är ortogonala
(F0[,1]|F0[,2]) = \sum_{n=1}^N(1*Zx[n]) = 0
Inre produkten blir lika med N gånger medelvärdet av Zx, men medelvärdet av Zx är noll per vår konstruktion av det nya koordinatsystemet. (Hur kan det komma sig att vi kan skapa ortogonala basfunktioner trots att vi inte vet vilka x-värden vi har? Det kan vi inte. Vi kan göra det här först efter att vi gjort studien, då vi vet vilka x-värden vi har när vi skapade dessa basfunktioner. Vi har transformerat det ursprungliga koordinatsystemet till ett nytt där vi flyttade origo till de ursprungliga koordinaterna för medelvärdena, och medelvärdena vet vi inte förrän efter det vi vet vilka x-värden (och y-värden) som vi råkade få i just detta utfallet (endast medelvärdet för x har betydelse för just ortogonaliteten, men för den fullständiga konstruktionen av dessa basfunktioner (om vi betraktar dem som funktioner som avbildar den ursprungliga variabeln x på den ursprungliga variabeln y) behöver vi både M_x, M_y, SD_x och SD_y). Gör vi ett omtest så måste vi göra en ny transformering till de nya normaliserade koordinaterna och får därmed (beskrivet i de otransformerade variablerna) nya basfunktioner om vi får en ny uppsättning x-värden (vilket åtminstone om x är en kvasioberoende variabel vi förväntar oss att få vid ett eventuellt omtest). Beskrivet i de nya normaliserade variablerna däremot är basfunktionerna desamma oavsett vad utfallet av studien blir. Metoden vi använder här är alltså något generaliserad i förhållande till den metod vi använde i föreläsning 7a del 4-6 där basfunktionerna var oberoende av utfallet av studien.) Beräkna nu normerna
|F0[,1]| = sqrt( (F0[,1]|F0[,1]) ) = sqrt( \sum_{n=1}^N(1*1) ) = sqrt(N)
|F0[,2]| = sqrt( (F0[,2]|F0[,2]) ) = sqrt( \sum_{n=1}^N(Zx*Zx) ) = sqrt((N-1)*v_X = sqrt(N-1)
där v_X = s_X^2 är variansen för X som är lika med ett eftersom vi normaliserade med standardavvikelsen när vi införde våra nya normaliserade variabler.
Vi inför nya basfunktioner (våra slutgiltiga som vi skall använda för vår anpassning av våra datapunkter till en rät linje) som är ortonormerade genom att dividera de preliminära basfunktionerna med deras normer
f[1](Zx) = 1/sqrt(N), f[2](Zx) = Zx/sqrt(N-1) .
Från föreläsning 7a del 4 vet vi att vi nu då vi har ortonormerade basfunktioner får värdena på modellparametrarna som (jag återanvänder "Zy" som jag tidigare infört som namnet för den nya normaliserade beroende variabeln som också namnet på vektorn med alla Zy-värdena i utfallet av vår studie)
c[1] = (F[,1]|Zy) = \sum_{n=1}^N((1/sqrt(N))*Zy[n]) = sqrt(N)*M_Zy = 0
c[2] = (F[,2]|Zy) = \sum_{n=1}^N((Zx[n]/sqrt(N-1))*Zy[n]) = sqrt(N-1)*c_{Zx,Zy}
där c_{Zx,Zy} = \sum_{n=1}^N(Zx[n]*Zy[n])/(N-1) är kovariansen för (Zx,Zy). (Litet olyckligt använder jag "c" både för modellparametrar ("[model] coefficient") och kovarians ("covariance"). Men kovariansen kommer alltid med ett index som talar om vilka två variablers kovarians det är, så risken för tvetydighet är inte så stor trots allt.) Så vår modell blir
Zy_modell = f_Z(Zx) = c[1]*f[1](Zx)+c[2]*f[2](Zx) =
= 0 + c_{Zx,Zy}*Zx = s_Zx*s_Zy*r_{Zx,Zy}*Zx = r_{Zx,Zy}*Zx
där r_{Zx,Zy} är linjära korrelationskoefficienten för (Zx,Zy).

Så vi ser att linjära korrelationskoefficienten är lika med lutningskoefficienten för den räta linje som datapunkterna faller kring, anpassad med avseende på minsta kvadratiska medelfel i den beroende variabeln och beskriven i normaliserade variabler. (Och i normaliserade variabler så går dessutom denna räta linje genom origo, d.v.s. en proportionalitet, eller strikt matematiskt linjär avbildning från Zx till Zy). Men observera att korrelationskoefficienten är (i motsats till kovariansen) ett normaliserat statistikum (se föreläsning 4) så r_{Zx,Zy}=r_{x,y}. Så lutningskoefficienten beskrivet i de normaliserade koordinaterna är lika med korrelationskoefficienten, där korrelationskoefficienten kan lika gärna vara beräknad i de normaliserade som i de ursprungliga variablerna.

I våra ursprungliga variabler blir detta
y_modell = s_y*Zy_modell+M_y = s_y*(f_Z((x-M_x)/s_x)+M_y
= s_y*(r_{Zx,Zy}*(x-M_x)/s_x)+M_y =
M_y + (s_y*r_{x,y}/s_x)*(x-M_x)

Så i våra ursprungliga koordinater är korrelationskoefficienten lika med lutningskoefficienten för den räta linje som datapunkterna bäst faller kring, normaliserad med standardavvikelserna. Som diskuterades efter föreläsning 4 innebär det att korrelationskoefficienten är ett normaliserat effektmått. Ett effektmått är ett mått på hur stor effekt något har ("effekt" i meningen "påverkan på", inte i meningen "kraft gånger väg delat med tid" (d.v.s. det som på engelska kallas "effect", inte det som på engelska kallas "power" ("power" i meningen "kraft gånger väg delat med tid", inte det som på svenska kallas "makt")), så ett effektmått är ett mått på hur stor påverkan något har. Lutningskoefficienten kan ses som ett absolut effektmått. Den anger hur stor påverkan x har på y; hur mycket y ökar då x ökar en enhet. Men förutom modellvärdet har vi det slumpmässiga bruset. Ibland kan det därför vara mer relevant med ett relativt effektmått, t.ex. att se hur mycket y ökar i förhållande till något mått på bredden av fördelningen av y-värden då x ökar en breddenhet av fördelningen av x-värden. Men som diskuterades i föreläsning 2 så är standardavvikelsen just ett exempel på ett sådant breddmått. Så som det relativa effektmåttet på hur mycket x påverkar y kan vi ta hur många enheter av y's breddmått som y ökar då x ökar en enhet av x's breddmått =
hur mycket y ökar delat med s_y, då x ökar med s_x =
(hur mycket y ökar då x ökar med s_x)/s_y
= (lutningskoefficienten*s_x)/s_y) =
= k*s_x/s/y =
= r_{x,y}

Som påpekades av NeuraltNätverk ons 17 okt 2012, 07:22 kan detta relativa effektmått ibland tas som ett mått på praktisk signifikans. Praktisk signifikans innebär här att x's påverkan på y är så stor att det har ickeförsumbar betydelse i den tillämpning som vår modell beskriver. För att kunna säga något om huruvida en viss effekt har praktisk signifikans i en viss tillämpning så måste man veta något om denna tillämpning. Man kan inte från den statistiska analysen enbart av ens data säga huruvida en viss påverkan är så stark att den har praktisk signifikans. Men då-och-då är det relevanta för praktisk signifikans hur stor del av den totala ökningen av y i ens studie (från lägsta till högsta y-värde i studien) som härrör från totala ökningen av x i ens studie (från lägsta till högsta x-värde i studien), och Pearsons korrelationskoefficient är alltså ett slags sådant mått. En av de saker som gör detta relativa effektmått lämpligt som en allmän definition är att det är oberoende av skalningen av variablerna, eller ekvivalent uttryckt, oberoende av vilka enheter x och y är mätta i så får r_{x,y} ett dimensionslöst värde (ingen enhet) som är densamma oavsett vilka enheter x och y är mätta i.
(Pearsons korrelationskoefficient är ett sådant mått för påverkan från en kontinuerlig variabel x. (Kan i och för sig vara relevant också för diskreta eller blandade diskreta/kontinuerliga fall där den diskreta variabeln eller variablerna har många olika möjliga utfall och kan ges meningsfulla numeriska värden på någon numerisk skala.) "Cohens d" är ett slags motsvarighet för en diskret oberoende (eller kvasioberoende) variabel x som endast tar två olika värden. Vi kan då studera y-värdena dels för det ena värdet på x, dels för det andra värdet på x. Hur mycket medelvärdet av y ökar från den ena till den andra möjligheten för x är ett absolut effektmått för x's påverkan på y. x kan men behöver inte vara en numerisk variabel, det enda som betyder något är att den har två olika möjliga värden och att vi kan mäta eller på annat sätt få reda på vilket värde den har för olika motsvarande y-värden, y tar vi dock som en numerisk variabel (som kan vara kontinuerlig eller diskret). För att få ett relativt effektmått kan vi ta ökningen av y's medelvärde från den ena till den andra möjligheten, dividerat med standardavvikelsen för y. Cohens d är precis som Pearsons r skaloberoende.

Vi kan jämföra dessa båda relativa effektmått genom att som de två diskreta fallen ta, dels y-värdena svarande mot x-värdena i ett litet intervall kring ett visst x-värde för det kontinuerliga fallet, dels y-värdena svarande mot x-värdena i ett litet intervall kring ett Dx högre x-värde. Vi förutsätter för enkelhetens skull att N är mycket stort (bl.a. så stort att vi inte behöver skilja mellan N och N-1) och att vi har lika många (x,y)-datapar i det ena x-intervallet som i det andra (vi numrerar fallen så att n i [1,N/2] är för x i det första intervallet och n i [N/2+1,N] är för x i det andra intervallet). Ökningen av y's medelvärde är då k*Dx från det ena fallet till det andra, där k=r*s_y/s_x är lutningskoefficienten. Variansen för x är
v_x = (1/N)*(\sum_{n=1}^(N/2)((-Dx/2)^2)+\sum{n=N/2+1}^(N)((Dx/2)^2)) = Dx^2/2 .
Standardavvikelsen för x är s_x=Dx/sqrt(2). Medelvärdet för y för x i i det första intervallet är M_y1=M_y-(Dx/2)*k och för y för x i det andra intervallet är M_y2=M_y+(Dx/2)*k. Så i detta exempel har vi
Cohen_d = (M_y2-M_y1)/s_y = k*Dx/s_y = k*s_x*sqrt(2)/s_y = r_{x,y}*sqrt(2) .
Så vi ser att de relativa effektmåtten Pearsons r och Cohens d är närbesläktade.)

Observera att ett nödvändigt vilkor för att korrelationskoefficienten skall vara ett rimligt effektmått är att vi har en a-priori priviligierad riktning i xy-planet (a-priori priviligierad: inte priviligierad av vårt datautfall i detta test, utan från oberoende information), och att x-axelns riktning är en sådan priviligierad riktning. Ty korrelationskoefficienten anger den relativa styrkan i hur mycket en ökning av x tenderar att öka y. Men hur mycket y ökar med x beror bl.a. av hur vi valt vårt koordinatsystem. Om vi istället för vårt koordinatsystem xy valt något annat kartesiskt koordinatsystem uv som fås genom att rotera xy-systemet någon viss vinkel alfa så skulle vi fått ett annat värde på lutningskoefficienten och korrelationskoefficienten, och om det inte finns någon a-priori anledning att välja xy så skulle vi lika gära kunna välja uv och r hade haft ett annat värde. Pearsons korrelationskoefficient är normaliserad så att den är oberoende av skalningen av koordinatsystemet (bibehåller samma värde även om olika skalfaktorer skulle appliceras på x- och y-axlarna) och av en translation av koordinatsystemet (förflyttning av origo utan att andra koordinataxlarnas riktning eller skalning), men är inte oberoende av en rotation av koordinatsystemet. I själva verket går det inte att definiera någon linjär korrelationskoefficient som är både skaloberoende (för oberoende skalfaktorer för de två koordinataxlarna) och oberoende av en rotation av koordinatsystemet. I fallet som vi studerar i denna del av föreläsning 7 så är ju dock x-axeln från början förutsatt att vara en priviligierad riktning, det är den riktning i vilken det inte finns något mätfel i variabelvärdena.

(Som vi såg i föreläsning 7a del 1-2 (och i 7a del 5, linapa3.r för xfelfri=FALSE) så har i fallet att vi inte har någon priviligierad riktning korrelationskoefficienten en helt annan användning än som effektmått. Eller i det fallet, enklare den onormaliserade kovariansen. Vi förstår varför korrelationen är det i någon mening enklaste "mest naturliga" måttet då x-axeln faktiskt representerar en a-priori priviligierad riktning, ty den ger då ett skaloberoende mått. I fallet då vi inte har någon a-priori priviligierad riktning, däremot, så behövs inte någon sådan normalisering ty ett vilkor för att det inte skall finnas någon priviligierad riktning är att de två koordinataxlarna har samma enheter och skalningar; de två koordinataxlarna skall ha likvärdiga enheter och skalningar (se föreläsning 7a del 3) så vi är inte fri att skala om bara den ena av dem så någon skalnormalisering för de två koordinataxlarna var för sig av kovariansen ger inte några fördelar. En normalisering så att ett korrelationsmått blir oberoende av en skalning med samma skalfaktor på de två koordinataxlarna är dock fortfarande aktuell, och är uppfyllt för Pearsons r. Men i detta fallet behöver vi också att måttet är oförändrat vid en rotation av koordinatsystemet vilket inte är uppfyllt av r.

Korrelationskoefficienten är dock även i detta fall viktig, bl.a. att den tillsammans med de två standardavvikelserna ger riktningen för den räta linje som datapunkterna minst sprider kring. Eller enklare beskrivet med kovariansmatrisen. Dess egenriktningar (riktningarna för dess egenvektorer) ger den riktning som datapunkterna sprider minst kring (det vi i föreläsning 7a del 2 kallade u-axeln, s_v (spridningen från u) är den minsta standardavvikelse någon roterad koordinataxel kan ge för dessa datavärden) och den riktning som datapunkterna sprider mest kring (det vi kallade v-axeln, s_u (spridningen från v) är den största standardavvikelse någon roterad koordinataxel kan ge) (vi förutsätter att koordinatsystemens origon ligger i medelvärdet). Så dessa riktningar (kallas ibland principalriktningarna) är en av de viktiga informationerna i kovariansmatrisen för någont slags korrfelationsmått för våra data, nämligen längs vilken riktning ser vi någon korrelation (detta är u-riktningen, notera att kovariansmatrisen ger endast en oberoende riktning (i det tvådimansionella fallet "enkel regression" som vi studerar här), ty v-riktningen är inte oberoende av u-riktningen utan vi vet kovariansmatrisen förutan att den är vinkelrät mot u-riktningen). Standardavvikelsensen s_v eller variansen v_v för variabeln v är sedan ett mått på hur mycket datapunkterna sprider från denna regressionslinje. Så ett delat med dessa är mått på hur väl datapunkterna ligger längs den räta linjen (här u-axeln), d.v.s. något slags linjärt korrelationsmått. Men det måttet är inte skaloberoende, om vi skulle skala om både u och v med samma faktor (vilket är tillåtet, d.v.s. förstör inte att u och v skall vara axlar graderade i likvärdiga enheter) så skulle vi få ett annat värde. Vi kan lösa detta genom att ta s_v/s_u eller v_v/v_u som vårt linjära korrelationsmått i detta fall. Notera också att v_u och v_v är egenvärdena för kovariansmatrisen. Egenvärdena ändras inte vid en rotation av koordinatsystemet. Men de ändras vid en skalning av koordinataxlarna, medan kvoten mellan dem är oberoende av en sådan skalning (samma faktor frör båda axlarna). Så kvoten mellan kovariansens egenvärden (v_v/v_u (eller kvadratroten s_v/s_u eller vilken annan funktion av v_v/v_u som helst)) är det både translationsinvarianta och rotationsinvarianta och skalinvarianta måttet (samma omskalningsfaktor för båda axlarna).)




När vi ovan diskuterade lutningskoefficient och y-värde då linjen krossar y-axeln, och effektmått och allt det där, så använde vi det värde på medelvärden och standardavvikelser och korrelationskoefficient som vi beräknat från datat i vårt stickprov. Men det som är det relevanta i den diskussionen är egentligen inte värdena på dessa beräknade från stickprovet, utan värdena beräknade från befolkningen. Vad vi egentligen är ute efter är hur mycket y tenderar att öka då x ökar en enhet (som exempel för absoluta effektstorleken, men gäller allmänt för de ovan diskuterade storheterna) -- för det underliggande fenomenet i befolkningen. Anledningen till att vi använder värdet från stickprovet och inte värdet från befolkningen är endast den rent praktiska att det är stickprovet som vi faktiskt har tillgång till. Vi vill här ha värdet för befolkningen för att kunna beskriva och förstå befolkningen (t.ex. lutningskoefficienten för att beskriva (och kanske i förlängningen förstå) den underliggande mekanism i befolkningen som gör att y tenderar att öka då x ökar). Men eftersom vi inte har direkt tillgång till värdet för befolkningen så får vi nöja oss med att uppskatta värdet för befolkningen med värdet för stickprovet. Vi får då inte det helt korrekta värdet utan det korrekta värdet plus ett slumpmässigt samplingsfel. Men för tillräckligt stora samples så tenderar samplingsfelet att vara litet, så förhoppningsvis kan vårt skattade värde vara tillräckligt nära det exakta befolkningsvärdet.

Så vi är här ute efter befolkningsvärden. D.v.s. vi är egentligen ute efter deskriptiv statistik. Enda anledningen till att vi inte går direkt på den deskriptiva statistiken är att vi inte har direkt tillgång till befolkningsdatat, så vi får nöja oss med skattade värden beräknade från vårt sample. Därför och endast därför använder vi oss av slutledningsstatistik här; vi försöker från värde från vårt stickprov dra slutsats om vår befolkning. D.v.s. våra värden som t.ex. M_x, M_y, s_x, s_y, r, k, är statistika, värden som vi beräknar i vårt sample för att försöka dra slutsatser om vår befolkning. Och vi använder väsentligen följande slutledningsprincip: förmodligen är värdet för befolkningen ungefär det värde som vi beräknade från vårt stickprov. Det är därför Conway då och då i föreläsningarna talar om dessa som i gränslandet mellan deskriptiv statistik och slutledningsstatistik. De är värden för stickprovet, men det vi är intresserade av är att använda dem som om de vore värden för befolkningen. Och det är de också ofta till en tillräckligt god approximation, och om så verkligen är fallet kan vi då gå vidare med den deskriptiva statistiken, använda dem som om de vore (åtminstone tillräckligt goda approximationer till) befolkningsdata och arbeta med att beskriva och försöka förstå befolkningen och dess mekanismer. Men de är inte exakt lika med motsvarande värden för befolkningen utan det finns också samplingsfelet. Ju större N vi har (storleken på vårt sample), dessto säkrare blir vårt skattade värde. Dessto mindre förväntar vi oss att, statistiskt sett, [absolutbeloppet av] samplingsfelet skall vara. Det värde vi statistiskt sett förväntar oss att få för ett visst statistikum, d.v.s. medelvärdet för de värden som vi skulle fått för detta statistikum om vi gjorde ett mycket stort antal omtest (då antalet omtest går mot oändligheten), det så-kallade förväntansvärdet för detta statistikum som är lika med motsvarande värde för befolkningen, ändras inte av storleken på stickprovet utan är oberoende av N. Förväntansvärdet för storleksmåttet på samplingsfelet däremot påverkas av N, blir mindre ju större N blir. Med storleksmått menas alltså något slags mått på absolutbeloppet av samplingsfelet, måttet måste visa lika stora positiva värden då samplingsfelet är ett positivt tal som då det är ett negativt till absolutbeloppet lika stort tal. Förväntansvärdet på samplingsfelet självt utan absolutbelopp är ju noll (tecknet på samplingsfelet kan lika gärna vara negativt som positivt) så det är inte det som intresserar oss här. (Det finns en del subtila punkter här som vi kan vänta med att gå i detalj in på. Det är korrekt att förväntansvärdet på samplingsfelet är lika med noll för de M, s, r (och åtminstone ganska ofta också k) som vi definierat här (de är s.k väntevärdeskorrekta skattningar, att ta ett mycket stort antal omtest med ett lågt N i varje och ta medelvärdet av alla omtesten ger samma effekt som att ta ett anda test med ett mycket stort N, vilket är samma sak som att förväntansvärdet av samplingsfelet är lika med noll för alla värden på N). Men det är egentligen inte ett nödvändigt vilkor för att stora N skall ge med hög trolighet ge goda approximationer till befolkningsdata. Det räcker med att för något rimligt mått för absolutbeloppet av samplingsfelet går mot noll då N går mot oändligheten för att vi skall ha ett statistikum som ger användbara skattningar av befolkningsdata från stickprovsdata (i och med det går också förväntansvärdet av samplingsfelet självt (med tecken) mot noll då N går mot oändligheten, men är inte nödvändigtvis lika med noll för alla ändliga värden på N). Men även om det inte är helt nödvändigt, så är det oftast bättre om dessutom förväntansvärdet av samplingsfelet (med tecknet kvar) är lika med noll för alla N. Det är därför t.ex. som variansen är definierad med division med N-1 istället för med N som för medelvärdet. Det råkar vara division med N som ger förväntansvärdet av samplingsfelet lika med noll för alla N för medelvärdet, och N-1 som ger det för variansen. Då N går mot oändligheten så spelar det ingen roll eftersom då också relativa skillnaden mellan N och N-1 går mot noll, men för ändliga N så ger just denna definition något (om än endast litet, för "rimliga" N) mindre fel statistiskt sett. För att öka subtiliteten ytterligare. Det är inte ens nödvändigt att osäkerheten går mot noll då N går mot oändligheten för att de skall vara användbara skattningar för befolkningen. Och inte heller tillräckligt. Kravet är att osäkerheten blir tillräckligt liten för att vi skall kunna ha någon nytta av dem för så stora N som vi i praktiken kan uppnå. I de generella analyserna däremot så studerar vi ofta egenskapen att och ungefär hur snabbt osäkerheten går mot noll då N går mot oändligheten. Dock, för de statistika för att beskriva befolkningen som vi använder oss av här och nu så är både i de flesta fall förväntansvärdet av samplingsfelet [med tecken] noll för alla N, och måttet som uppskattar samplingsfelet "med eventuella minustecken borttagna" går mot noll då N går mot oändligheten.) Så för dessa statistika "i gränslandet mellan deskriptiv statistik och slutledningsstatistik" så använder vi dem för att vi egentligen skulle vilja ha deskriptiv statistik och skattningen från stickprovet ger åtminstone statistika som har förväntansvärde som är lika med dessa motsvarande befolkningsvärden. Förväntansvärdet självt är oberoende av N, men osäkerheten i hur väl skattningen ger förväntansvärdet beror av N -- blir mindre ju större N blir, på något sätt så att något rimligt mått av osäkerheten går mot noll då N går mot oändligheten. Endast samplimgsfeldelen av dessa statistika beror av N, medan "den korrekta delen" av dem (lika med förväntansvärdet) är oberoende av N.

Så uppskattningarna av dessa "deskriptivnära" statistika är inte så starkt beroende av N. Beroendet är endast ett indirekt sådant, i det att osäkerheten beror av N. Men vi måste också uppskatta osäkerheterna själva, för att kontrollera att vi verkligen har en tillräckligt säker uppskattninga av de "deskriptivnära" statistika vi primärt är ute efter. Vi måste då uppskatta ytterliggare statistika, låt oss tillfälligtvis kalla dem "osäkerhetsbedömningsstatistika", som beskriver osäkerheten i de "deskriptivnära" statisktika och kontrollera via olika analyser och bedömningar från dem att osäkerheterna i våra "deskriptivnära" statistika är tillräckligt små för våra behov. Dessa "osäkerhetsbedömningsstatistika" däremot, de kan inte vara väsentligen oberoende av N. Osäkerheten ("allt annat lika") skall ju minska då N ökar, så dessa mått måste ha N-beroende som representerar denna egenskap. Om denna osäkerhet (eller vår uppskatning av denna osäkerhet) är tillräckligt liten för att vi skall kunna sätta någon rimligt stor tilltro till detta "deskriptivnära" statistikum så säger vi att det är statistiskt signifikativt.


Vi ser alltså att vi har infört tre olika signifikanbegrepp.
Det första är numerisk signifikans. Värdet för vår uppskattninga av detta statistikum är inte dominerat av avrundningsfel utan det finns åtminstone någon eller några värdesiffror kvar i beräkningen av det från våra rådata som representerar vad vi skulle fått från en samma beräkning från samma rådata men genomförd med exakt aritmetik utan avrundningsfel.
Det andra är statistisk signifikans. Samplingsfelet skall med tillräckligt stor trolighet vara tillräckligt litet för att inte noggrannheten i vårt "deskriptivnära" statistikum skall vara för dålig för våra nuvarande behov för att beskriva och förstå befolkningen. Att med tillräckligt stor trolighet garantera att vi drar våra slutstaser om befolkningen på data som verkligen motsvaras till tillräckligt god approximation av data för befolkningen, inte av statsitisk slump från just det sampel som råkade falla ut i just vår studie. (För att avgöra statistisk signifikans beräknar vi också olika statistika. Dessa är inte av något "slutanvändarintresse" för vår studie. De beskriver inte befolkningen, är inte "deskriptivnära", utan enbart för att avgöra om våra "deskriptivnära" statistika beskriver befolkningen -- eller om de beskriver statistisk slump i samplingen. Eller, i vissa fall för att avgöra om de statistika vi använder för att avgöra om de "deskriptivnära" statistikana är tillräckligt säkra själva är tillräckligt statistisk säkra för att avgöra det. Etc., hur många metanivåer man kan tänkas behöva gå i sin studie. Förhoppningsvis skall vi inte så ofta behöva gå över den första metanivå.)
Det tredje är praktisk signifikans. De effekter i eller från våra "deskriptivnära" statistika som vi fått fram så stora att de är av betydelse för det vi vill studera hos befolkningen (eller vill uppnå hos befolkningen om vi t.ex. gör tillämpad forskning för att på något sätt försöka manipulera befolkningen).
Det är viktigt att hålla dessa olika signifikansbegrepp isär och inte blanda ihop dem. (Observera också att dessa tre absolut inte är hela listan. Vi får inte glömma biaser och andra ickeslumpmässiga/ickestatistiska snedvridande faktorer eller systematiska fel. Att ha säkerställt (eller åtminstone troliggjort) att dessa är tillräckligt små skulle man kanske kunna kalla kalibreringssignifikans eller något åt det hållet.) Nedan skall vi huvudsakligen studera statistisk signifikans.


Första steget i att undersöka statistisk signifikans är ofta att uppskatta ett statistiskt mått för [absoluta] samplingsfelet. Studera först osäkerheten i det uppskattade medelvärdet för befolkningen. Vi kommer ihåg sedan tidigare (föreläsning 6) att förväntansvärdet av medelvärdet för stickprovet är lika med medelvärdet för befolkningen, d.v.s. om vi tar medelvärdet av medelvärdena för ett stort antal omtest (låter antalet omtest gå mot oändligheten) så blir detta lika med medelvärdet för befolkningen. Standardavvikelsen för medelvärdena i de olika stickproven är lika med standardavvikelsen för samplingsfelet för skattningen av medelvärdet för befolkningen med medelvärdet för stickprovet. T.ex. standardavvikelsensen för medelvärdena av x av de olika stickproven (K st. olika stickprov ("K går mot oändligheten"), medelvärdet för stickprov nr. k är "M_x[k]", medelvärdet för befolkningen är "M0_x") =
s_M_x = sqrt((1/(K-1))*\sum_{k=1}^K((M_x[k] - M0_x)^2)) = sqrt((1/K)*\sum_{k=1}^K(safel_M_x[k])^2) ,
där safel_M_x[k]= M_x[k]-M0_x är samplingsfelet i skattningen av medelvärdet för x för befolkningen med medelvärdet för x för stickprov nr. k. Standardavvikelsen är just ett sådant mått för ”hur stort statistiskt sett [absoluta] samplingsfelet tenderar att vara”. Kvadreringen är det som tar bort tecknet på samplingsfelet så att båda ”fel uppåt” (positivt samplingsfel) och ”fel nedåt” (negativt samplingsfel) bidrar positivt till felmåttet, och den slutliga kvadratroten återställer enheten så att felmåttet på skattningen av variabeln ges i samma enheter som variabeln själv. Som vi diskuterade i föreläsning 2 så är standardavvikelsen ett breddmått, så denna standardavvikelse är ett mått på bredden av den fördelning av skattningar som vi får vid ett stort antal omtest. Så åtminstone kvalitativt är denna standardavvikelse just ett sådant felmått vi är ute efter. Och också det felmått som används som standard, under namnet standardfelet.

Standardfelet är alltså ett mått på ungefär hur stor [absoluta] avvikelsen av värdet på vårt statistikum från ett stickprov från motsvarande värde för befolkningen statistiskt sett tnederar att vara. Om vårt statistikum är ett medelvärde M_w av någon variabel w så vet vi (från föreläsning 5) dessutom att standardfelet är lika med standardavvikelsen för w delat med kvadratroten av storleken på stickprovet, sfel_M_w=s0_w/sqrt(N). Där s0_w är standardavvikelsen för w i befolkningen. Men vi kan skatta s0_w med standardavvikelsen för w i stickprovet, s_w, och göra approximationen sfel_M_w=s_w/sqrt(N). Standardfelet blir ändå mera användbart av att (åtminstone i de flesta fall) så vet vi att om N är stort (och i praktiken verkar ofta att ganska måttligt N (säg 30) räcka som "stort" här) så är samplingsfelet normalfördelat, oavsett vilken fördelning befolkningen har (med vissa undantag i och för sig, men oftast (men för olika startfördelningar som ger normalfördelat samplingsfel för stora N, så är kravet på "stort N" olika stort för olika startfördelningar, men hur stort "stort N" är beroer också på många andra saker)). Så inte bara vet vi medelvärdet (noll (för de flesta statistika i alla fall)) och standardavvikelsen (standardfelet) för samplingsfelet, vi vet fullständiga sannolikhetsfördelningen. Samplingsfelet är normalfördelat med medelvärde lika med noll och standardavvikelse lika med standardfelet. (Eller ekvivalent; fördelningen av stickprovsskattningar av medelvärdet vid ett mycket stort antal omtest är (för stora N) normalfördelat med medelvärde lika med befolkningsmedelvärdet och standardavvikelse lika med standardfelet, där standardfelet i sin tur är lika med standardavvikelsen för variabeln delat med kvadratroten av N.)

Observera att många statistika kan skrivas som medelvärdet av någon variabel w genom transformationer av våra ursprungliga variabler (t.ex. x och y), så ovanstående är ganska allmänt användbart, inte begränsat endast till medelvärdena av våra ursprungliga rådatavariabler x och y. T.ex. är variansen av x lika med medelvärdet av (x-M_x)^2. Eller åtminstone nästan. Skillnaden är att variabeltransformationen inte är en ren variabeltransformation som innehåller enbart rådatavariablerna och konstanter, utan också en statistisk skattning M_x som också i sig har ett samplingsfel. Det är den komplikationen som gör att man om man skall vara strikt inte dividerar summan av (x-M_x)^2 med N (som för ett medelvärde) utan med N-1. Man kan förstå det som att för att ta medelvärde så tar vi summan av alla de oberoende variablerna w i vårt stickprov, och dividerar sedan med antalet oberoende variabler N. Men i summan (x-M_x)^2 så har vi redan använt våra oberoende variabler en gång för att beräkna M_x, så alla x-M_x är inte helt oberoende variabler eftersom x-en redan använts för att beräkna M_x. M_x utgör 1 st. värden, så vi kan säga att ett av de N oberoendena i x-variablerna har gått åt, så alla de N st. termerna (x-M_x)^2 innehåller nu bara N-1 oberoende värden. Och för att få stickprovsskattningen av variansen dividerar vi därför summan med N-1 -- antalet återstående oberoende variabler i summan. Om vi däremot kände medelvärdet M0_x för x i befolkningen, men inte variansen för x och endast ville skatta den, så skulle vi göra detta med att ta summan av alla N st. (x-M0_x)^2 och sedan dividera med N. Inget av x-ens oberoenden har gått åt till att beräkna medelvärdet, så vi dividerar summan med N och inte med N-1. Så om vi råkar känna medelvärdet oberoende av vårt stickprov så blir verkligen variansen ett äkta medelvärde av en transformerad variabel. Men frånsett den lilla komplikationen, åtminstone i stort sett så kan vi se många av de statistika vi vill skatta som medelvärden av någon transformerad variabel w, och resonemanget ovan om samplingsfel och standardfel och fördelning för samplingsfel håller för inte bara de primära medelvärdena utan mer generellt. Så om vi (åtminstone till en god approximation) kan betrakta ett statistikum som medelvärdet M_w av en variabel w, så är samplingsfelet för M_w (åtminstone till en god approximation) normalfördelat med medelvärdet noll och standardavvikelsen = standardfelet = sfel_M_w = s_w/sqrt(N). (Och nästan alltid har vi och bör ha så stora N att relativa skillnaden mellan N och N-1 är så liten att det inte spelar någon större roll. Och mellan N och N-Q försumbar, där Q>1 men fortfarande mycket mindre än N, om vi studera statistika som innehåller andra andra statistika som ”förbrukar” Q st. oberoenden. Genom att på strategiska platser i formlerna ersätta N med N-Q kan vi öka noggrannheten (och åtminstone i många fall få medelvärdet av standardfelet exakt lika med noll) men även det förutan så kan vi genom att göra N tillräckligt stort i förhållande till Q få en tillräckligt god approximation.) Så i vårt exempel; variansen kan ses som medelvärdet av (x-M_x)^2, och därmed är standardfelet för variansen lika med standardavvikelsen för (x-M_x)^2 delat med sqrt(N). (Eller mer noggrannt sfel_v_x = sqrt((1/(N-Q))*(\sum_{n=1}^N(((x-M_x)^2-v_x)^2)))/sqrt(N), där Q=2 eftersom vi förbrukat en frihetsgrad för M_x och en för v_x.)

Men vi bör inte heller glömma att ”medelvärdessättet” inte är det enda sättet att uppskatta samplingsfelet. Som diskuterades i föreläsning 5, en kraftfull metod är omtestmetoden. I fall då vi kan kosta på oss ett stort antal omtest är det en både enkel och direkt och tämligen säker metod att studera samplingsfelen.

Sannolikhetstätheten i normalfördelningen avtar snabbt då vi går många standardavvikelser bort från medelvärdet. Vi kan därför använda standardfelet för att konstatera att samplingsfelet förmodligen är försumbart, om det samplingsfel som för våra behov kan acceptera som litet är mycket stort i förhållande till standardfelet. I gynnsamma fall kan vi genomföra våra studier så att detta vilkor är uppfyllt (i fall då vi utan alltför stor kostnad kan göra N så stor att standardfelet blir försumbart litet i förhållande till så stora samplingsfel som vi för våra behov kan betrakta som små), och i så fall behöver vi ofta inte göra mer analys av samplingsfel och statistisk signifikans än så. ("NHST" och "konfindensintervall" som vi diskuterar nedan tämlige onödiga analyser att göra, t.ex. Vi vet redan att statistisk osäkerhet inte är ett av problemen i vår studie, så varför gå in i en djupara analys av den?)

I andra fall har vi kanske inte så stora marginaler, och måste eller bör göra en mer noggrann bedömning av statistisk signifikans. Här i föreläsning 7 så går Conway in i en något djupare diskussion av dels ”NHST ’p-värde’”-metoden (som han introducerade i föreläsning 4), dels konfidensintervallmetoden (som han introducerade i föreläsning 6).

Han börjar med att diskutera ”NHST” och tar (den onormaliserade) lutningskoefficienten k som exempel. (Men samma sak gäller för vilket statistikum som helst.) Vår nollhypotes H0 är att k har något visst värde. Här tar han k=0 som vårt exempel för nollhypotesen. Att ta noll som nollhypotes för k och r är en ganska ofta använd nollhypotes i praktiken. Vi beräknar sedan sannolikheten P(D|H0) att värdet för k i ett stickprov av den storlek N som vi använder skulle ge ett värde för k som ligger i närheten av det värde som blev den skattning vi fick från våra faktiska stickprovsdata D, givet att stickprovet är draget från en befolkning där värdet för k är lika med nollhypotesen H0. Denna sannolikhet kallar vi i här ”p”, p=P(D|H0). ”P(D|H0)” utläses som ”sannolikheten för D givet att H0 gäller. (Så ”P” står för ’sannolikhet’, ”P(x)” står för ’sannolikheten för x’, ”|” står för ’givet att’ (så-kallad betingad sannolikhet). ”P(D|H0)” skulle då bli ’sannolikheten att vi får data D givet att H0 gäller’. Så beteckningen ”P(D|H0)” är inte fullständig, vi lägger in något mer i ”NHST’s p” än den strikta bokstavliga uttolkningen av ”P(D|H0)”. ”P(D” är inte sannolikheten att vi skulle få de data D vi faktiskt fick, utan data D som ger det värde på just det statistikum (här k) som vi faktiskt fick från våra data D. Och inte ens det. Det skulle inte gå för kontinuerliga variabler eftersom sannolikheten att få ett visst exakt värde (för t.ex. k) är lika med noll. Så istället menar vi alltså sannolikheten att få data D som ger ett värde för k som ligger (i någon mening som vi måste precisera) i närheten av det värde på k som vi faktiskt fick från våra data D.) ”P(D” i ”P(D|H0)” definieras i ”NHST” tämligen ”generöst”. Med ”sannolikheten för att vi skall erhålla ett värde på k i närheten av det värde vi faktiskt fick från våra data D” menar vi i ”NHST” (oftast?) att vi skall erhålla ett värde på k som är av samma tecken som det tecken vi fick för k, och till absolutbeloppet lika stort eller större. (I ”riktad NHST”. Eller bara till absolutbeloppet lika stort eller större, i ”ickeriktad NHST” – ännu längre från den direkta bokstavliga uttalningen av ”P(D”.)
I ”NHST” gör man sedan så att om p är mindre än något överenskommet rimligt litet (positivt) värde alfa, så förkastar vi vår nollhypotes. D.v.s. om sannolikheten att man från en befolkning där nollhypotesen gäller skulle få ett stickprov som ger ungefär det värde för k som vi faktiskt fick från våra data D är mindre än alfa, så förkastar vi vår nollhypotes (det är så osannolikt att man, om k verkligen vore lika med noll för befolkningen, skulle få ett så stort |k| som vi fick; att vi bedömer det som för otroligt att vårt stora |k| bara skulle vara en statistisk fluktuation i ett stickprov från en befolkning där k=0, så vi bedömer nollhypotesen som för otrolig och förkastar den (jag skriver ”otroligt”, inte ”osannolikt”, efter semikolonet, ty vi har inte beräknat eller ens definierat någon sannolikhet för att H0 skulle vara sann)) . Och i motsatt fall så behåller vi vår nollhypotes. D.v.s., om p<alfa så förkastar vi H0, och annars behåller vi H0.

Vi får nu fyra olika fall för om vi behåller nollhypotesen eller inte, och om detta var korrekt eller inte. Vårt ”beslut” är korrekt om (och endast om) p<alfa och nollhypotesen verkligen är falsk, eller om p>=alfa och nollhypotesen verkligen är sann. Vårt ”beslut” är felaktigt om p<alfa men H0 trots allt är sann, detta kallas ofta ett typ-ett-fel eller ”falskt alarm” (i vårt exempel med k, vi falsklarmade att x skulle ha någon [linjär] påverkan på y). Vårt ”beslut” är också felaktigt om p>=alfa men H0 var trots allt falsk, detta kallas ofta ett typ-två-fel eller ”miss” (i vårt exempel, vi missade att x trots allt har en [linjär] påverkan på y).

Conway ger sedan sannolikheterna för dessa fyra olika möjligheter, eller rättare sagt de två olika möjligheterna i de två olika fallen för H0's sannhet. Betrakta först fallet att H0 är sann. Sannolikheten för att göra ett typ-ett-fel är då lika med alfa. Medan sannolikheten för att vi korrekt skall anse H0 sann då är 1-alfa. Observera att detta är sannolikheterna för att vi skall få det ena respektive det andra av de två möjliga besluten, givet att H0 faktiskt är sann. Att sannolikheten för att göra ett typ-ett-fel om H0 verkligen är sann har detta värde bör inte vara förvånande för oss. Det är ekvivalent med hur vi från början definierade vårt kriterium för att förkasta H0, och följer tämligen direkt från den definitionen. Betrakta sedan fallet att H0 är falsk. Sannolikheten för att vi skall göra ett typ-två-fel är då beta. Medan sannolikheten för att vi korrekt skall anse H0 falsk då är lika med ett minus beta. Observera att detta är sannolikheterna att för att vi skall få det ena respektive det andra av de två besluten, givet att H0 faktiskt är falsk. Vår sannolikhet alfa som avgjorde vilket beslut vi faktiskt tog beräknades under förutsättning att H0 faktiskt vore sann, så beta har ingen enkel relation till alfa utan måste beräknas från sannolikhetsfördelningarna för samplingsfelet för en befolkning där H0 är falsk. Alternativt kan sannolikheterna för de två olika beslutsmöjligheterna i fallet att H0 är falsk ges som sannolikheten POWER=1-beta.
(Observera alltså speciellt att alfa och beta (eller alfa och POWER) ger sannolikheterna för beslutsmöjligheterna, givet H0’s sanningsvärde. De ger på inget sätt sannolikheterna för att H0 skulle vara sann eller falsk. Någon sådan sannolikhet har vi överhuvudtaget inte definierat eller ens kan definiera utan att införa fler begrepp än vi gjort hittills i studiecirkeln.)

En ganska allmänt använd konvention speciellt inom sammhällsvetenskap uppger Conway, är att välja p=0.05 (5%). Att ta just det värdet saknar objektiv grund, det är en ren konvention. Det innebär alltså att man valt att i 95% av fallen då H0 faktiskt är sann ta det korrekta beslutet och valt att i 5% av fallen då H0 faktiskt är sann falsklarma. (Conway säger att 5% är ett trevligt lågt värde. Vad man tycker låter högt och lågt är ju en smaksak. Jag tycker det låter högt. Men det spelar ingen roll, det som är viktigt att komma ihåg är att det är en ren konvention.)

Vi kan beräknar p-värdet genom att först beräkna (skattningen för) lutningskoefficienten, k, och dess standardfel, sfel_k,
k= s_y*r_{x,y}/s_x = c_{x,y}/v_x
Conway hävdarr sedan att standarfelet kan beräknas som
sfel_k =sqrt( \sum_{n=1}^1((ymodell[n]-y[n])^2))/(N-2)
där ymodell[n]=y0+k*x[n] är modell värdet. Så summan är den kvadratiska felsumman. Men det kan uppenbarligen inte vara korrekt. Ty högerledet har enheter som y, medan vänsterledet har enheter som k d.v.s. enheter som y dividerat med enheter som x. Här måste ha smugit sig in något fel. Vi får återkomma till detta senare. Under tiden nöjer vi oss med att vi kan alltid uppskatta standardfelet med omtestmetoden.
Vi beräknar sedan
t = k/sfel_k
sfel_k är lika med standardavvikelsen för de olika skattningarna av k i ett stort antal samplingar(/omtest) så t är en normaliserad lutningskoefficient. Vid ett stort antal samplingar(/omtest) så är (för stora N) alltså t normalfördelad med medelvärde k0/sfel_k (där k0 = befolkningsvärdet för lutningskoefficienten, det korrekta värdet på lutningskoefficienten som är det vi egentligen skulle vilja veta) och standardavvikelse lika med ett.
Om k0=0 (vår nollhypotes i detta exempel) och vi antar att det k-värde vårt sample gav är negativt, så är därför (se föreläsning 5)
p =
sannolikheten att t vid ett slumpmässigt stickprov skulle bli mindre än eller lika med det värde vi har =
pnorm(t,mean=0,sd=1)
Eftersom normalfördelningen är symmetrisk kring medelvärdet så blir om vi skulle ha ett positivt k
p = pnorm(-t,mean=0,sd=1)
Eller för båda fallen
p = pnorm(-abs(t),mean=0,sd=1) .
(Vi kan naturligtvis också beräkna p direkt från k, k är normalfördelad över omtesten med standardavvikelse sfel_k, så
p = pnorm(-abs(k),mean=0,sd=sfel_k) .)


Conway går sedan in i en diskussion rörande problem med "NHST". Enligt honom har "NHST"' huvudsakligen följande tre problem:
1) Biaserat med N.
2) Binärt resultat. (Antingen behåller vi nollhypotesen eller så förkastar vi den.)
3) Nollhypotesen är en svag hypotes.
1 innebär att resultatet beror på N (vårt samplestorlek). Ju större N är, dessto mindre blir standardfelet, dessto större blir abs(t), dessto mindre blir p; och därmed dessto oftare blir resultatet bedömt som statistiskt signifikant. Men Conway har fel i att det skulle vara en brist hos "NHST". "NHST p" skall vara en "metastatistik", en undersökning av hurpass troligt det är att våra skattningar av de "deskriptivnära" statistika verkligen säger något om befolkningen, snarare än bara om något tillfälligt samplingsfel. "Deskriptivnära" statistika bör helst vara oberoende av N (vara väntevärdeskorrekta som de i så fall kallas). Men p är inte och är inte tänkt att vara ett "deskriptivnära" statistikum, det beskriver inte som sådant befolkningen, och är inte avsett att beskriva befolkningen. Det är därför ingen brist hos p att det är N-beroende, p skall endast beskriva hur sannolik nollhypotesen är att vara sann (istället för att vår direkta skattning är en sann beskrivning av befolkningen). Och att nollhypotesen snarare än stickprovsskattningen är den korrekta är ("allt annat lika") otroligare ju större N är, så ett korrekt "metastatistikum" p skall ha den egenskapen. 1 är därför inte en brist i "NHST" i sig självt egentligen, men svarar mot andra brister i "NHST" som både ger begränsningar i hur kraftfullt "NHST" egentligen är (svaghet hos "NHST", men inte strikt just "1"). Och som inbjuder till missbruk av "NHST" (men det är inte en brist i "NHST" i sig självt, utan en brist hos användarna av "NHST").
2 innebär att vi bara har två alternativ. Antingen behåller vi nollhypotesen eller så förkastar vi den. Men kriteriet för när vi behåller eller förkastar har ingen grund, utan är ett rent konventionellt sannolikhetsvärde. Men troligheten att nollhypotesen skall vara falsk blir inte plötsligt så stor att den bara skall förkastas vid ett visst sannolikhetsvärde som t.ex. 5%, utan den blir gradvis mindre och mindre trolig vid mindre och mindre p-värden. Detta är verkligen ett av de viktiga problemen med "NHST".
3 Nollhypotesen är en svag hypotes. Det enda vi har sagt med att förkasta nollhypotesen är att x uppvisar någon påverkan på y (av samma tecken som k, om vi har ensidig NHST, någon inverkan överhuvudtaget om vi har dubbelsidig). ("Uppvisar påverkan", jag skriver inte "har påverkan på", eftersom om det är en ickeexperimentell studie så vet vi inte om det är x som själv påverkar y, eller om det bara är en indirekt efefktiv påverkan (t.ex. påverkan från något z på både x och y).) Men det är ofta ett ointressant konstaterande. Vad vi egentligen vill veta är om x uppvisar någon ickeförsumbar påverkan på y. "Ickeförsumbar" är lika eller mer en fråga om praktisk signifikans än en fråga om statistisk signifikans.
Oftast i alla fall. Det finns viktiga fall där det vi är intresserade av är om det finns en påverkan överhuvudtaget. Säg t.ex. att vi studerar hur något påverkar ändringen av totala energin i ett slutet system. Om vi då fick ett tillräckligt säkert resultat som visade att den påverkades av något överhuvudtaget så vore det mycket intressant. Men om vi t.ex. studerar hur ett ämne påverkar dödligheten så är det (förmodligen?) inte bara av intresse att se att det finns en statistisk troliggjord påverkan, oavsett hur liten den är. Om den är tillräckligt liten så är den fortfarande inte så intressant även om den skulle vara starkt statistiskt säkerställd. En något bättre metod än åtminstone den enkla "NHST" som vi exemplifierar med här vore då förmodligen att t.ex. ta nollhypotesen som att dödligheten är under en viss acceptabel nivå, och förkasta nollhypotesen om den nollhypotesen skulle med alltför låg sannolkhet ge ett sampel med det värde på dödligheten som vi faktiskt uppmätte. Notera här hur 3 relaterar till 1. Om det finns någon påverkan (vi antar positiv påverkan) överhuvudtaget från ämnet så kommer den enkla nollhypotesstatistiktestningen med säkerhet att ge en förkastning av nollhypotesen för tillräckligt stor a N. Och det enda "NHST" säger är huruvida nollhypotesen är förkastad eller inte, om allt annat är den tyst. Så det (åtmisntone den enkla) "NHST" säger är ointressant, och det enda relavanta för de som genomfört denna "NHST-studie" att säga är ingenting. Men det är frestande att åtminstone säga något efter ett hårt arbete med att ha gjort en studie, så kanske de trots allt säger "vi har konstaterat en statistiskt säkerställd dödlighetshöjning", vilket är sant men irrelevant och därmed missledande. (Jag är överens med Conway om denna typ av problem med "NHST", men han verkar klassificera en del av det under 1 vilket jag alltså anser är fel, det är snarare 3 eller möjligen något helt annat, 1 är inte ett problem med "NHST" i sig självt.)

Dessa tre (eller två) problem är inte de enda med "NHST", och speciellt den enkla NHST. T.ex kontrollerar vi endast värde nedåt, men kanske det är viktigt för oss att kontrollera att värdet inte är för mycket större (till absolutbeloppet) än det vi fick i vårt sample.


En alternativ metod är då t.ex. konfidensintervallmetoden. Här beräknar vi istället ett intervall för k-värden kring det skattade k, inom vilket ett sampel tagit från en befolkning med k lika med det värde som vi fick i vårt sampel, skall med någon viss [ganska hög] sannolikhet hamna. Också konfidensintervallmetoden beräknar alltså sannolikheten för att få data som ligger i närheten av de data vi faktiskt fick, givet att vi antar att en viss hypotes är giltig. Lika litet som "NHST" beräknar konfidensintervallmetoden någon sannolikhet att den hypotesen är giltig eller inte. Sannolikheten är sannolikheten att få vissa data (här k i något visst intervall kring det värde vi faktiskt mätte för k) givet att en viss hypotes om befolkningen är sann. Den hypotesen är här att k för befolkningen faktisk är lika med det k vi mätte i vårt sampel. Ett konfidensintervall är alltså icke alls ett formellt felintervall kring det mätta k-värdet där det korrekta värdet med någon viss sannolikhet skall ligga. Någon sådan sannolikhet kan vi inte beräkna eller ens definiera utan att införa flera begrepp och antaganden än vi gjort hittills i StatisticsOne. Utan alltså tvärtom ett intervall där mätvärdet skall ligga, givet att det korrekta värdet är lika med det värde vi råkade få i just den studien vi råkade göra just nu. Men om den valda sannolikheten är hög, så kan vi dock, på motsvarande sätt som vi gjorde i NHST, att det är troligt att det korrekta k-värdet är inom intervallet, och mindre troligt att det ligger utanför. Detta är informellt, vi använder då trolig i någon informell förteoretisk mening. Men om än informellt, så någon form av osäkerhetsintervall för vårt skattade värde får vi. Och åt båda hållen, så det verkar vara åtminstone någerlunda användbart. Med alla osäkerheter det för med sig. Men det är så konfidensintervall används och nästan måste användas för att kunna användas till någonting i praktsika studier. Och även konfidensintervall med sina problem och svagheter, så är det oftast en bättre test än "NHST". Conway klagar över (eller refererar klagomål i psykologisanhället) att konfidensintervallen ofta blir "generande stora". Well. Är de stora så är de. Är den statistiska osäkerheten så stor så är den det. Att inte veta om det eller inte tala om det gör den inte mindre. Conway säger ingenting om hur konfidensintervall beräknas, men en enkel beräkning är ju ganska enkel efter att vi väl beräknat standardfelet. Fördelningen av skattade värden (för k i vårt exempel) är en normalfördelning med medelvärdet lika med det skattade värdet i just vår studie (enligt antagandet under vilket konfidensintervallet är definierat) och standardavvikelsen lika med standardfelet. Sedan är det bara att från pnorm-funktionen räkna baklänges för att hitta intervall kring detta medelvärde som har denna sannolikhet. För varje valt sannolikhetsvärde finns oändligt många sådana intervall, men det naturliga torde vara att ta intervallet symmetriskt kring medelvärdet antar jag, och då blir det välbestämt.

Ytterliggare ett alternativ är att jämföra flera olika modeller. Conway ger inga detaljer.

Yterliggagre ett alternativ till nollhypotestestning, säger Conway, är att titta på effektstorlekar. Men det är det egentligen inte. Statistisk signifikans är en sak och praktisk signifikans är en annan sak och det är viktigt att hålla dem isär. Som vi såg ovan, effektmått är till för att bedömma praktisk signifikans.(Absoluta eller relativa beroende på vad det är man skall använda dem till. Men ofta relativa effektmått som t.ex. linjära korrelationskoefficienten.) Men. Att de är olika saker innebär inte att de inte kan ha samband. Ibland kan t.ex. statistisk signifikans komma in som en del i den praktiska signifikansbedömningen. T.ex. kanske vi har en nivå av trolighet för att slå larm om att ämne ger en förhöjd dödlighet om det förhöjer dödligheten över en viss fastställd nivå. Men om det misstänks förhöja dödligheten över en annan fastställd högre nivå, så skall vi slå larm redan viss en annan lägre trolighetsnivå för att ämnet faktiskt har den högre dödlighetsförhöjningen. I sådana praktiska signifikansbedömningar kommer effektmått in som en del. Och olika sannolikheter beräknade från sannolikhetsfördelning för att få olika värden på skattningen in som en annan del. Men enbart effektmått i sig själva kan aldrig vara "statistisksignifikans-bedömnings"-statistika utan är alltid "deskriptivnära" statistika.


(Som vi ser kastar Conway ut ett ämne i småskvättar. Både nollhypotestestning och konfidensintervall har han ju redan tidigare introducerat. För NHST kom litet nytt här. Men för konfidensintervall? Och ännu har vi ändå inte kommit speciellt långt i att faktiskt beräkna dem och undersöka vad de beräkningarna egentligen föreställer. Ändå försöker jag i alla fall litet fylla ut utöver vad Conway säger, men ändå hänger fortfarande alltför många trådar i luften. Vi får se hur det går.)
"philosophy without science is blind, science without philosophy is lame" (tonyf)

Användarvisningsbild
Moridin
Avstängd
Inlägg: 16253
Blev medlem: tor 10 jan 2008, 11:32

Re: Studiecirkel: Statistics One

Inlägg av Moridin » sön 02 dec 2012, 13:22

tonyf skrev:Men Conway har fel i att det skulle vara en brist hos "NHST". "NHST p" skall vara en "metastatistik", en undersökning av hurpass troligt det är att våra skattningar av de "deskriptivnära" statistika verkligen säger något om befolkningen, snarare än bara om något tillfälligt samplingsfel. "Deskriptivnära" statistika bör helst vara oberoende av N (vara väntevärdeskorrekta som de i så fall kallas). Men p är inte och är inte tänkt att vara ett "deskriptivnära" statistikum, det beskriver inte som sådant befolkningen, och är inte avsett att beskriva befolkningen. Det är därför ingen brist hos p att det är N-beroende, p skall endast beskriva hur sannolik nollhypotesen är att vara sann (istället för att vår direkta skattning är en sann beskrivning av befolkningen). Och att nollhypotesen snarare än stickprovsskattningen är den korrekta är ("allt annat lika") otroligare ju större N är, så ett korrekt "metastatistikum" p skall ha den egenskapen. 1 är därför inte en brist i "NHST" i sig självt egentligen, men svarar mot andra brister i "NHST" som både ger begränsningar i hur kraftfullt "NHST" egentligen är (svaghet hos "NHST", men inte strikt just "1"). Och som inbjuder till missbruk av "NHST" (men det är inte en brist i "NHST" i sig självt, utan en brist hos användarna av "NHST").
Den centrala poängen är att p-värde beror både på effektstorlek och urvalsstorlek. Om man försöker använda p-värde som en indikation för huruvida man bör förkasta eller ej förkasta nollhypotesen så fungerar urvalsstorleken som en störfaktor. Vid stora urval kan nästan vilken skillnad som helst anses vara statistisk signifikant.

Att hävda att detta inte är någon brist hos NHST, utan i hur den används underskattar processen med vilket modern NHST kom till. Det är nämligen en bisarr hybrid mellan R. A. Fischer och Neyman–Pearson som både sidor skulle haft stora intellektuella problem med. Fischer skulle kritiserat föreställningen om ett fixt nivå för alfa för alla experiment, utan skulle enbart betraktat p-värde som ett indirekt mått på nollhypotesens trovärdighet. Neyman–Pearson skulle insisterat på att aldrig använda effektstorlek = 0 eller a = b som nollhypoteser etc.

I och med att en metod som NHST så lätt missförstås och missbrukas på så många olika sätt av högintelligenta och högutbildade forskare så måste NHST i sig axla en del av ansvaret.
Conway klagar över (eller refererar klagomål i psykologisanhället) att konfidensintervallen ofta blir "generande stora". Well. Är de stora så är de. Är den statistiska osäkerheten så stor så är den det. Att inte veta om det eller inte tala om det gör den inte mindre.
Anledningen att de blir så stora är för att forskningen är slarvig. Bättre forskning med mer bättre kontrollerade experiment med större urvalsstorlek gör att CI blir mindre.
Yterliggagre ett alternativ till nollhypotestestning, säger Conway, är att titta på effektstorlekar. Men det är det egentligen inte. Statistisk signifikans är en sak och praktisk signifikans är en annan sak och det är viktigt att hålla dem isär. Som vi såg ovan, effektmått är till för att bedömma praktisk signifikans
Tyvärr så använder många forskare statistisk signifikans för att göra uttalanden om praktisk signifikans. Vad som typiskt händer i en sådan studie är att resultatsektionen beskriver resultaten som statistiskt signifikanta medan diskussionen betraktar dem som praktiskt signifikanta. Så i den betydelsen är effektstorlekar ett alternativ till NHST för att dra slutsatser om praktisk signifikans, just för att föreställningen att statistisk signifikans implicerar praktisk signifikans är så bristfällig.
Either you believe evidence that can be tested, verified, and repeated will lead to a better understanding of reality, or you do not. - Michael Specter
|AIDSTruth | Evidens för makroevolution | Skeptical Science|

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » sön 09 dec 2012, 22:22

Nåja. Låt oss säga såhär, NHST (eller så-kallad NHST, så som konventionell NHST är formulerad) är ett svagt test i meningen att det ofta inte riktigt mäter det som skulle vara mest relevant för oss att mäta vad gäller statistisk signifikans. Mer exakt vad som är fel i vad, vad som är olika typer av fel, vad som är fel/brist/svaghet/inbjudning_till_felanvändning, och hur de sedan i sin tur hänger ihop eller inte och om på vilka sätt, är svåranalyserat så det får vi återkomma till. Statistikhistoria är tyvärr inte alls mitt ämne, så jag har inga kommentarer där (skriv gärna en essä här).
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » sön 09 dec 2012, 22:24

föreläsning 8a, multippel regression

Vi kommer nu in på regressionsanalys i tre och fler dimensioner. Som vanligt begränsar sig Conway till linjära modeller (sånärsom på möjligheten av en konstant där modellplanet krossar koordinataxeln för den oberoende variabeln, s.k. intercept). Detta är inte speciellt mycket svårare än det tvådimensionella fallet som vi behandlat tidigare, speciellt inte som vi där gick vidare till olinjära modeller så vi har redan erfarenhet av fallet med godtyckligt många modellparametrar. I tre dimensioner blir modellen ett plan i det tredimensionella rummet (eller rättare sagt, kan representeras som ett plan i det tredimensionella rummet (via användning av ett ett tredimensionellt koordinatsystem) även om grunddata inte skulle vara lägen för punkter i det tredimensionella rummet). Vi kan t.ex. välja att ha de två oberoende eller kvasioberoende variablerna i det horisontella planet, låt oss kalla dessa x och y, och den beroende variabeln på en vertikal koordinataxel, låt oss kalla denna z. Modellen blir då z_modell=z01+k1x*x+k1y*y. Vi har tre modellparametrar, interceptet z01, lutningskoefficienten i x-led k1x, lutningskoefficienten i y-led k1y. Numeriskt fungerar det bra, korrekt grafisk representation blir dock omöjlig eftersom vi inte ännu har tillgång till holografiska datorskärmar för någerlunda korrekt tredimensionell representation (mer eller mindre dåliga trick finns att försöka göra tredimensionell representation på en tvådimensionell skärm dock (som vi såg i föreläsning 7a del 1, ty redan för den tvådimensionella variabelrummety och modellen är sannolikhetsfördelningen tvådimensionell d.v.s. behöver åskådliggöras i ett tredimensionellt diagram (tre variabler, x, y, och sannolikhetstätheten som funktion av x och y), och för den tredimensionella modellen behöver vi tre dimensioner för att åakådliggöra modellen, men fyra för att åskådliggöra sannolikhetsfördelningen)). I fler än tre dimensioner fungerar inte vår förteoretiska geometriska intuition, men genom att vi nu studerat vektoralgebra och internaliserat den förståelsen så har vi nu utvecklat vår geometriska intuition till att också omfatta hyperplan i fyra eller fler dimensioner (man behöver naturligtvis ingen geometrisk representation av modellerna för att använda dem numeriskt, men ibland kan det vara ett praktiskt att ha en geometrisk åskådning). I D dimensioner så har vi D-1 st. oberoende eller kvasioberoende variabler som vi t.ex. kan kalla x1, x2, ..., xD-1 och en beroende variabel som vi t.ex. kan kalla xD. Planmodellen är
xDmodell = xD01 + \sum_{d=1]^D(k1d*xd) ,
ett D-1-dimensionellt hyperplan i det D-dimensionella rummet, där xD01 är "interceptet" och k1d lutningskoefficienten i xd-led.

Detta är naturligtvis inte alla modeller man kan använda i D dimensioner. Man kan ha en rent proportionell modell (en strikt linjär modell) utan "interceptet". I tre dimensioner
z_modell = k1x*x + k1y*y .
Man kan också ha fler basfunktioner, t.ex. flerdimensionella polynommodeller. T.ex. en andragradspolynommodell i tre dimensioner
z_modell = z01 + k1x*x +k1y*y + k1xx*x^2 + k1xy*x*y + k1yy*y^2 .
Det enda som är viktigt för att våra enkla analyser skall fungera är att modellen är linjärt parameteriserad (avbildningen av modellparametervektorn på modellvärdevektorn är linjär), huruvida modellen själv är linjär eller olinjär (huruvida avbildningen av de (eventuellt kvasi-)oberoende variablerna på modellvärde för den beroende variabeln kan vara linjär eller olinjär) (och som vi snart skall se, hur många dimensioner modellen har) spelar ingen roll. Conway inriktar sig dock här på planmodeller (linjär modell sånärsom på intercept). Men de allmänna matematiska metoderna för att karakterisera modeller med minstakvadratmetoden (i zD-led) i D dimensioner fungerar för vilka val av basfunktioner som helst. Skillnaderna mot det tvådiemnsionella fallet är mycket små.


Vi finner modellparametrarna genom att minimera kvadratiska medelfelet i xD-led. Modellen är
xDmodell = \sum_{m=1}^M(c[m]*f[m](x1,x2,...,xD-1)) = \sum_{m=1}^M(c[m]*f[m](x))
där c[m] är modellparameter nr. m, f[m] basfunktion nr. m, x radvektorn av alla de oberoende eller kvasioberoende variablerna x=[x1,x2,...,xD-1] (dessa kallas också ibland "predikatorer"). Vi skall finna i minstakvadratmening bästa approximationen till ekvationssystemet
\sum_{m=1}^M(c[m]*f[m](x[n])) = xD[n], n=1,2,...,N
där "n" betecknar datapunkt nr. n i det D-dimensionella variabelrummet. Eller på matrisform
F %*% c = xD
där
F =
[f[1](x[1]), f[2](x[1]), ..., f[M](x[1]
f[1](x[2]), f[2](x[2]), ..., f[M](x[2]
...
f[1](x[N]), f[2](x[N]), ..., f[M](x[N] ] ,
c =
[c[1]
c[2]
...
c[M] ] ,
xD =
[xD[1]
xD[2]
...
D[N] ]
(så "xD" använder vi för två olika saker, dels variabeln xD, dels kolumnvektorn med värdet för denna variabel för de N olika utfallen i vårt stickprov, och motsvarande kan vi göra för också andra variabler).
Ekvationen har exakt samma form som den för det tvådimensionella fallet i föreläsning 7a del 4. Enda skillnaden är hur värdena för basfunktionernas värden beräknas. Men när dessa väl beräknats är det samma ekvation som i det tvådimensionella fallet, och kan därför lösas med samma metoder som i det tvådimensionella fallet.

För att underlätta skrivandet av den beroende variabeln, och för att underlätta jämförelsen med ekvationerna vi skrev i det tvådimensionella fallet, inför vi också namnet "y" för denna,
y=xD .

För att bestämma modellparametrarna för fallet då modellen är ett hyperplan inför vi t.ex. basfunktionerna
f[1](x) = 1
f[m](x) = xm-1, m=2,3,...,D .
(Bättre är egentligen ofta att använda de normaliserade variablerna Zd=(xd-M_xd)/s_xd och basfunktionerna
f[1](Z) = 1/sqrt(N)
f[m](Z) = Zm-1/sqrt(N-1), m=2,3,...,D ,
eftersom de är normaliserade och baserade kring lägesmåttet för fördelningen. Minskar något risken med avrundningsfel att åtminstone ha satt alla variablerna på likvärdiga skalor och kring origo. Men till skillnad från det tvådimensionella fallet finns inget enkelt sätt att finna ortogonala basfunktioner. Så någon numerisk metod för ortogonalisering (t.ex. QR) måste ändå användads, och för våra enkla behov kan vi lika gärna ta de naiva basfunktionerna i de onormaliserade rådatavariablerna ovan.) Vi har då
F =
[1, x1[1], x2[1], ..., xD-1[1]
1, x1[2], x2[2], ..., xD-1[2]
...
1, x1[N], x2[N], ..., xD-1[N] ]
=
[1, x[1]
1, x[2]
...
1, x[N] ] .

Med dessa basfunktionerna är c[1]=xD01=y01="interceptet", och c[m]=k1xm-1=lutningkoefficienten i xm-1-led (m=2,3,...,D). Lutningskoefficienterna k1xd (d=1,2,...,D-1) är hur mycket xDmodell=ymodell ökar då vi ökar xd en enhet medan de övriga oberoende eller kvasioberoende variablerna hålls konstanta. Detta kallas också det partiella linjära beroendet av xDmodell=ymodell av xd, också kallat partialderivatan av xDmodell med avseende på xd. Ett helt annat linjärt beoroende än det totala linjära beroendet av xD=ymodell på xd. Det totala linjära beroendet av xD=y av xd (också kallat totala derivatan av xDmodell med avseende på xd) är den lutningskoefficient man får om man bortser från alla variablerna x1,...,xd-1,xd+1,...,xD-1, och anpassar endast (xd[n],xD[n])(n=1,...,N) till en rät linje.

Partialderivatorna kan vara viktiga, bland annat, för att försöka undersöka beroenden, och åtminstone göra mer eller mindre underbyggda gissningar om eventuella kausala påverkningar mellan variabler, också i ickeexperimentella observationsstudier. Om t.ex. y visar en total ökning då x1 ökar (totala derivatan av y med avseende på x1 är positiv (med en statistiskt säkerställd (eller åtminstone troliggjord) praktiskt signifikant stort värde, antar vi här)), så kan detta bero på att det finns en kausal mekanism som gör att en ökning av x1 tenderar att ge en ökning av y. Andra möjligheter skulle t.ex. kunna vara att det finns en kausal mekanism som gör att en ökning av y tenderar att ge en ökning av x1, eller att det finns en kausal mekanism som gör att en ökning av någon tredje variabel x2 tenderar att ge en ökning av både x1 och y. (Dessa möjligheter är naturligtvis vare sig uteslutande eller hela listan.) Om vi gör en (åtminstone)tredimensionell studie som omfattar (x1, x2, y) kan vi undersöka hur y ökar då x1 ökar medan x2 hålls konstant (t.ex. genom att skatta partialderivatan k01_{y,x1} i en planmodell). Vi utesluter då den eventuella kausala mekanismen att ökningen av y beror på en kausal mekanism som gör att både x1 och y tenderar att öka då x2 ökar. Observera att detta utesluter inte endast en direkt oberoende påverkan av x2 på både x1 och y, utan också en indirekt påverkan av x1 på y via en påverkan av x1 på x2 och en påverkan av x2 på y (och utesluter också motsvarande indirekta påverkan via x2 av y på x1, och utesluter också indirekt påverkan via x2 på både x1 och y av någon fjärde variabel x3).) Så genom en multippel regressionsanalys kan man komma något längre i undersökning av eventuella kausala samband även i en ickeexperimentell observationsstudie än vid enbart en tvådimensionell regressionsanalys ("enkel regression"). Men fortfarande inte alls lika långt som i en kontrollerad experimentell studie.





Conway inför nu två nya begrepp.

R = multippel linjär korrelationskoefficient = r_{ymodell,y} =
= cov_{ymodell,y}/(s_ymodell*s_y) =
= ((1/(N-1))*\sum{n=1}^N((ymodell[n]-M_ymodell)*(y[n]-M_y)))
/sqrt((1/(N-1))*\sum{n=1}^N((ymodell[n]-M_ymodell)^2)*(1/(N-1))*\sum{n=1}^N(y[n]-M_y)^2))
(Man kanske egentligen skall använda 1/(N-M) istället för 1/(N-1) i summorna med ymodell eftersom M frihetsgrader har förbrukats för beräkningen av modellparametrarna? Men vi förutsätter att N är så mycket större än M att vi inte behöver bekymra oss om det.)
R anger hur modellens prediktion av den beroende variabeln linjärt korrelerar med de observerade värdena för den beroende variabeln. Vi kommer från allmänna tolkningen av den linjära korrelationskoefficienten i föreläsning 7 ihåg att denna linjära korrelationskoefficient då beskriver: hur stor del av ökningen av den observerade beroende variabeln y relativt breddmåttet för totala spridningen av y-värdena som beskrivs av (eller "förklaras med") ökningen av modellens predikterade värde ymodell med ett breddmått för totala spridningen av ymodell-värdena. R är alltså ett slags kvalitetsmått på hur väl modellen förklarar variationenerna i den beroende variabeln, där R=1 betyder att modellen förklarar detta i någon mening fullständigt och R=0 att den inte alls förklarar detta (negativa R skulle betyda att modellen missförklarar detta åt fel håll, men negativa R skall inte uppstå).

R^2, kvadraten på ovanstående korrelationskoefficient.
R^2 visar sig vara lika med hur stor del av variansen av y som förklaras av variansen av ymodell. Denna kallas modellens bestämningskoefficient. Eftersom det är koefficienten som beskriver hur stor del av spridningen i oberoendevariabelvärdena som bestäms av spridningen i modellvärdena för den oberoende variabeln.

R eller R^2 är alltså hur väl modellen beskriver spridningen av (förändringen, variationen) de oberoendevariabelvärdena. Till skillnad för hur väl den beskriver värdena själva, måttet för det har vi ju tagit som den kvadratiska medelavvikelsen (medelvärdet för kvadraterna av modellfelen ymodell[n]-y[n]).

Vi förstår detta kvalitativt genom att göra en tvådimensionell rätlinjemodell med de observerade oberoendevariabelvärdena y tagna som beroende variabel och de motsvarande modellvärdena ymodell i vår ursprungliga D-dimensionella modell tagna som oberoende variabel. Vi kallar den ursprungliga D-dimensionella modellen "modell" och denna tvådimensionella modell "modell2". Lutningskoefficienten för modell2 bör bli åtminstone till en god approximation lika med ett, ty ymodell2 bör vara till en god approximation lika med ymodell eftersom båda är linjära (sånärsom på intercept) modeller minstakvadratanpassade till samma oberverade y-värden. Använder vi detta och det kända sambandet mellan lutningskoefficient och linjär korrelationskoefficient i det tvådimensionella fallet får vi
1 = k_{ymodell2,ymodell} = s_y*r_{y,ymodell}/s_ymodell

R = r_{y,ymodell} = s_ymodell/s_y
och
R^2 = v_ymodell/v_y

I själva verket gäller ovanstående inte bara approximativt, utan exakt (d.v.s. lutningskoefficienten för modell2 är inte bara till en god approximation lika med ett som vi kan förstå omedelbart utan någon beräkning att den måsta vara, utan exakt lika med ett). För att visa detta så behöver vi först några viktiga hjälpresultat för minstakvadratanpassade modeller (dessa är viktiga i sig själva, inte bara för vår omskrivning av bestämningskoefficienten).
i) För en modell som innehåller en konstant basfunktion ("intercept") så är medelvärdet för den oberoende variabeln lika stora för de observerade värdena i samplet som för motsvarande modellvärden. Eller ekvivalent, medelvärdet av felet är lika med noll,
\sum_[n=1}^N(y[n]-ymodell[n])=0 .
Ovanstående är samma sak som att y-ymodell är ortogonal mot en kolumnvektor "1" med N rader där varje element är lika med 1,
(1|y-ymodell)=0 .
Men felet ymodell-y är ortogonalt mot det M-dimensionella underrumm av det N-dimensionella vektorrummet som ges av modellens basfunktioner. Och då en konstant (1) är en av våra basfunktioner så måste alltså ovanstående ortogonalitet gälla, och i följer.
ii) För en modell som innehåller basfunktionerna x1, x2, ..., xD-1 så är felet linjärt okorrelerat med de oberoende eller kvasioberoende variablerna,
\sum{n=1}^N(xd[n]*(ymodell[n]-y[n])) = 0 (d=1,2,...,D-1).
Ty ovanstående summa är inre produkten mellan oberoende variabel nr. d och felet (eller mer precist, inre produkten mellan kolumnvektorn vars element är alla värdena för variabeln xd och kolumnvektorn vars element är alla värdena för felet (i samma ording i båda vektorerna)), och felet är ortogonalt mot det M-dimensionella underrum till det N-dimensionella kolumnvektorrummet som definieras av de M basfunktionerna. Och eftersom de D-1 st. oberoende eller kvasioberoende variablerna är basfunktioner så måste felet vara ortogonalt mot dessa.
iii) Felet är linjärt okorrelerat med modellvärdena för den beroende variabeln,
\sum_{n=1}^N(ymodell[n]*(ymodell[n]-y[n])) =
= (ymodell|ymodell-y) = 0 ,
ty ymodell är en linjärkombination av basvektorerna och felet ymodell-y är ortogonalt mot underrummet som definieras av basvektorerna.

Vi använder i för att införa nya variabler Y=y-M_y och Ymodell=ymodell-M_ymodell=ymodell-M_y, så att vi inte behöver bekymra oss med att subtrahera bort medelvärdet i varianserna och korrelationerna i beräkningarna.
R = r_{y,ymodell} = r_{Y,Ymodell}
= \sum{n=1}^N(Y[n]*Ymodell[n])/sqrt(\sum_{n=1}^N(Y[n]^2)*\sum_{n=1}^N(Ymodell[n]^2)) .
Använd nu iii för att skriva om kovariansen,
(N-1)*cov_{Y,Ymodell] = \sum_{n=1}^N(Y[n]*Ymodell[n])
= \sum_{n=1}^N((Ymodell[n]-(Ymodell[n]-Y[n]))*Ymodell[n])
= \sum_{n=1}^N(Ymodell[n]*Ymodell[n]) = (N-1)*v_Ymodell
Så kovariansen mellan beroendevariabelvärdena och motsvarande modellvärden är lika med variansen för modellvärdena,
cov_{y,ymodell} = cov_{Y,Ymodell} = v_Ymodell = v_ymodell .
Vi får då
R = cov_{y,ymodell}/sqrt(v_y*v_ymodell) = v_ymodell/sqrt(v_y*v_ymodell) = sqrt(v_ymodell/v_Y)
R = s_ymodell/s_y
(Detta bevisar också att R inte kan bli negativ.)
Och vi har vårt slutresultat,
R^2 = v_ymodell/v_y

Följande omskrivning av bestämningskoefficienten i variansen av felet (d.v.s. väsentligen kvadratiska medelfelet (medelvärdet av kvadraten på felen))(ty medelvärdet av felet är som vi såg ovan lika med noll) kan också ibland vara användbar
R^2*(N-1)*v_Y = \sum{n=1}^N(Ymodell[n]^2) =
= \sum_{n=1}^N((-Ymodell[n]^2+2*Ymodell[n]^2) =
= \sum_{n=1}^N((-Ymodell[n]^2+2*Ymodell[n]*Y[n]) =
= \sum_{n=1}^N((Y[n]^2-(Ymodell[n]^2-2*Ymodell[n]^2+Y[n]^2)) =
= \sum_{n=1}^N((Y[n]^2-(Ymodell[n]-Y[n][n])^2) =
= (N-1)*v_Y - \sum_{n=1}^N(((Ymodell[n]-Y[n][n])^2)

R^2 =
= 1 - \sum_{n=1}^N(((Ymodell[n]-Y[n][n])^2)/\sum_{n=1}^N(Y[n][n]^2) =
= 1 - v_{Ymodell-Y}/v_Y =
= 1 - v_{ymodell-y}/v_y

Så bestämningskoefficienten är också lika med ett minus det normaliserade kvadratiska medelfelet. Alltså också ett mått på normaliserade totala avvikelsen av modellen från data. Observera dock skrivningen i form av kvadratiskt medelfel till trots, besämningekoefficienten är ett mått på hur väl modellen predikterar förändringar av värdena på den beroende variabeln. Ty om datat är lika med någon konstant plus rent brus (ingen systematisk förändring av den oberoende variabeln med de oberoende eller kvasioberoende variablerna) så består inte bara felet av detta brus, utan även variansen av y består endast av detta brus. Om vi vill ha ett normaliserat kvalitetsmått för hur väl modellen predikterar de absoluta värdena av den beroende variabeln (inte ett kvalitetsmått för hur väl modellen predikterar hur y förändras med de oberoende eller kvasioberoende variablerna) så måste vi hitta någon normalisering som inte beror av spridningen i y (eller inte bara den i alla fall). Värde för R^2 nära 1 betyder "bra modell" medan lägre värden betyder "sämre modell". Där "bra" betyder att modellen predikterar mycket av hur datapunkterna i detta sampel varierar. Men R^2 är vad vi kallade ett "deskriptivnära statistikum", vi vill normalt använda det till att från slutsatsen att modellen predikterar vaiationen av datapunkterna i samplet bra eller dåligt dra slutsatsen att modellen predikterar variationen av datapunkterna i befolkningen ungefär lika bra. Huruvida det är fallet eller inte beror på om samplet var tillräckligt stort för att modellen för samplet skall vara ungefär densamma (ha ungefär samma värden på modellparametrarna) som motsvarande modell anpassad mot hela befolkningen. Observera att värdet på bestämningskoefficienten inte säger någonting om det. Utan för att bedömma det måste vi beräkna andra "feluppskattande statistika". Som t.ex. standardfelen för modellkoefficinterna. Och standardfelet för R^2, sfel_{R^2}; om värdet på R^2 ligger flera sfel_{R^2} högre än det lägsta värde på R^2 för vilket vi fortfarande skulle bedöma det som att modellen predikterar förändringen i den beroende variabeln bra, så drar vi slutsatsen att modellen predikterar förändringen av den beroende variabeln i befolkningsdata bra. Notera dock att man inte kan säga något allmänt om hur stor R^2 skall vara för att kunna sägas beskriva förändringen i y bra. Ibland kräver vi värden ganska nära ett för att vi skall se en beskrivning med modellen som meningsfull. Men ibland vill vi verkligen se en mycket svag trend i ett mycket brusigt data. Modellen kan då fortfarande vara relevant även om R^2 är mycket liten, förutsatt att sfel_{R^2} är ännu mycket mindre (och kanske kräver vi också andra standardfel skall vara mycket små) vilket vi kan uppnå genom att göra N mycket stor. Medan i andra sammanhang kanske hur väl modellen beskriver förändring av y inte alls är det relevanta (utan kanske t.e.x enbart hur väl värdena som sådana även om de tenderar att ligga konstant är det relevanta), och i sådana sammanhang är R och R^2 inte överhuvudtaget något relevant kvalitetsmått för modellen. (R^2 är alltså i vissa avseenden ett liknande mått som korrelationskoefficienter (vanliga korrelationskoefficienter mellan variabler) och [Cohens] d.)




Conway ger sedan ett exempel på en fyrdimensionell regressionsanalys av en lönestudie av akademiska psykologforskare. Detta är en ickeexperimentell observationssudie. Den beroende variabeln är y=lön (USD/år). De kvasioberoende variablerna är x1= tid sedan disputation (antal år), x2= antal publicerade artiklar, x3= genus. Genus är numeriskt kodat som man->0, kvinna->1. Studien är med ett stickprov av storleken 150. Den minstakvadratanpassade planmodellen är
ymodell = 46911 + 1382*x1 + 502*x2 + (-3484)*x3
I detta fall är vi intresserade av vaiationen av lön från olika faktorer så multippla linjära korrelationskoefficienten kan vara ett bra mått på kvaliteten av modellen. Det visar sig här att R=0,513. Linjär modell av lönevariatione är inte mycket bra, men ej heller usel ("sådär"). Är det troligt att detta stickprov säger något om lönevariationerna också i befolkningen is tort, inte bara i just detta stickprov? De uträknade standardfelen visar sig vara sfel_{intercept}=3401, sfel_k_x1=236, sfel_k_x2=154, sfel_k_x3=2438. Och modellparametrarna delat med respektive standardfel, t_{intercept}=13,8, t_k_x1=5.9, t_k_x2=3.0, t_k_x3=-1,4. Vi ser att "grundkonstanten" "intercept" är ganska statistisk säker, partiella beroendet av tid sedan disputation någerlunda statistiskt säker, partiella beroendet av antal publicerade artiklar ganska statistiskt osäker, och partiella beroendet av genus i stort sett nere i det statistiska bruset; "NHST-p"-värdena blir p_k_{intercept}<0,00005, p_k_x1<0,00005, p_k_x2=0,003, p_k_x3=0,155. Så enligt den konventionella NHST-bedömningen med 5% så är alla modellparametrarna utom beroendet på genus statistiskt signifikanta. Även om som vi diskuterat tidigare man kan sätta en hel del frågetecken i kanten på relevansen av den konventionen och metoden. Conway anger inga konfidensintervall men ett liberalt konfidensintervall på 95% får vi som 2 standardfel under det skattade värdet till 2 standardfel över det skattade värdet (för att ta samma värde som vi gjorde i NHSTn, även om 95% nog oftast får sägas vara litet väl liberalt (en ganska etablerad tradition är att använda intervallet från 3 standardfel under det skattade värdet till 3 standardfel över vilket ger en konfidensgrad av 99,7%)). (Eftersom pnorm(2,mean=0,sd=1)-pnorm(-2,mean=0,sd=1)=0,95.) Så konfint_intercept=[40109,53713], konfint_k_x1=[910,1854], konfint_k_x2=[194,810], konfint_k_x3=[-8360,+1392]. Observera dock att om vi använder dessa samtidigt för behandling av fler än en variabel så ger de okorrelerade konfidensintervallen ofta en något för pessimistisk skattning av den statistiska osäkerheten, eftersom sampligsfelen för de olika modellparametrarna oftast inte är okorrelerade.

Så det finns en indikation för att kvinnor har lägre lön än män, för samma tid och antal publikationer. Men det är en osäker indikation, "inte statistiskt säkerställd", det skulle i stort sett lika gärna kunna vara ett samplingsfel så att effekten visserligen finns i just det sampel vi råkade få men inte i befolkningen. Det finns också en osäkerhet med avseende på modellfel, är verkligen en endast linjär beskrivning av påverkningarna tillräckligt bra? Att multippla korrelationskoefficienten är endast måttligt stor skulle kunna vara en indikation på det, men vi vet inte eftersom vi inte försökt analysera det måttliga värdet på R i separata termer av modellfel och statistiskt brus. Conway ger vissa spekulationer, inte baserade på resultaten i denna studie, varför en endast linjär beskrivning av beroendet av dessa faktorer skulle kunna vara en alltför grov modell. Observera också att k_x3 endast ger det partiella linjära beroendet av lön på genus. Det skulle kunna finnas någon påverkan av genus på tid efter disputation eller på antal publikationer som gör att den totala påverkan på lön av genus blir större, eller mindre, än den partiella påverkan. Och om så skulle vara fallet måste man tänka efter vilken påverkan det egentligen är som är den mest relevanta, den partiella eller den totala?




Efter detta exempel så diskuterar Conway "standard" multippel regression versus "sekventiell" eller "hierarkisk" multippel regression. "Standard" multippel regression är vad vi gör här: vi behandlar alla basfunktionerna på en gång så att vi kan minimera det kvadratiska medelfelet. I sekventiell multippel regression däremot så tar vi in basfunktionerna en och en. Om de då inte är ortogonala (eller rättare sagt att de med våra oberoendevaribalvärden inte bildar ortogonala basvektorer) så blir resultatet ett annat än det vid standard mutippel regression. Och eftersom standard multippel regression ger minsta kvadratiska medelfel som går att få med vår uppsättning basfunktioner för detta data, så ger sekventiell multippel regression större fel. Att basvektorerna inte är ortogonala är detsamma som att de inte är okorrelerade, ty inre produkten mellan två basvektorer är lika med N-1 gånger kovariansen mellan dem. Resultatet av en sekvantiell multippel regression blir också (till skillnad från en standard multippel regression) beroende av i vilken ordning vi för in basfunktionerna. Conway lägger mycket tid på att diskutera sekventiell multippel regression men hans föreläsning är här svår att följa och förstå. Om det finns något motiv för att göra sekventiell multippel regression, jag tror inte det, så misslyckades Conway att förklara för mig vilket det i så fall skulle vara.
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » sön 23 dec 2012, 00:39

föreläsning 8b,c
Matrisalgebra. Uppskattning av modellkoefficienter (modellparametrar).

Detta tog vi upp redan i samband med föreläsning 7 (och det specifika för multippel regression 8a). Vi har några punkter kvar att ta, men i stort sett har vi redan täckt upp detta. Notera också att det inte bara är matrisalgebra utan också matrisaritmetik. Ungefär: matrisaritmetik är numeriska beräkningar med matriser, matrisalgebra är allmänna mönster som inte beror på de specifika inblandade talen som sådana beräkningar följer. Och många andra saker. Men Conway ger ett numeriskt exempel som vi kan ta vara på.


Jag ger datat som Conway använder som "kod", kopiera datat från webläsaren och spara i en fil xdata8c i din R-arbetskatalog.

Kod: Markera allt

3  2  3
3  2  3
2  4  4
4  3  4
4  4  3
5  4  3
2  5  4
3  3  2
5  3  4
3  5  4
Läs sedan in datamatrisen i R
> xdata <- as.matrix(read.table("xdata8c"))
I detta exempel antar vi att x1 är den beroende variabeln och x2 och x3 de oberoende eller kvasioberoende variablerna (prediktorerna). Skapa y-vektorn från x1 och matrisen F innehållande basvektorerna från basfunktionerna 1, x2, x3
> y <- xdata[,1]
> N <- nrow(xdata)
> F <- matrix(c(matrix(1,N,1),xdata[,2:3]),N,3)
> F
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 2 3
[3,] 1 4 4
[4,] 1 3 4
[5,] 1 4 3
[6,] 1 4 3
[7,] 1 5 4
[8,] 1 3 2
[9,] 1 3 4
[10,] 1 5 4
> QR <- qr(F)
> QR$rank
[1] 3
rangen är lika med tre = antalet basfunktioner: inga redundanta basfunktioner
> QR$pivot
{1] 1 2 3
ingen omnumrering av basfunktionerna har gjorts
Modellparametrarna är
c <- qr.coef(QR,y)
> c
[1] 4.086021505 -0.188172043 -0.008064516
Så vi har "intercept" y0=4,0860 och lutningskoefficienter k_x2=-0,188, k_x3=-0,008

Jämför modellvärdena ymodell med datavärdena y
> ymodell <- F%*%c
> matrix(c(y,ymodell),N,2)
[,1] [,2]
[1,] 3.685484 3
[2,] 3.685484 3
[3,] 3.301075 2
[4,] 3.489247 4
[5,] 3.309140 4
[6,] 3.309140 5
[7,] 3.112903 2
[8,] 3.505376 3
[9,] 3.489247 5
[10,] 3.112903 3
För det nakna ögat ser det ju inte ut som om denna modell beskriver dethär datasamplet såbra. Men låt oss beräkna några fomella kvalitetsparametrar.
> yfel <- ymodell-y
kvadratiska medelfelet är
> mkfel <- t(yfel)%*%yfel/7
Vi dividerar med 7=N-Q=10-3 istället för med N=10 eftersom tre frihetsgrader har gått åt för modellparametrarna (egentligen skall man inte göra det om vi (som vi kanske gör här) studerar hur bra modellen beskriver samplet, men det är relevant att göra om vi kanske tänker oss att det säger något om hur väl modellen som vi tar från detta sampel beskriver befolkningen)
> mkfel
1.43126
För att få det absoluta felmåttet i samma enheter som y själv tar vi kvadratenroten av detta, och får kvadratsrot-medelvärde-kvadrat-felet ("rms ('root-mean-square')-error")
> rmkfel <- sqrt(mkfel)
> rmkfel
[,1]
[1,] 1.196353
rmkfel är alltså ett standardavvikelseliknande felmått. Värdet är av samma storleksordning som y-värdena själva, så modellen ser inte ut att ge så noggranna prediktioner. Men vi skall vara försiktiga med att säga det; den relativa jämförelsen kanske är den relevanta, eller kanske inte är den mest relevanta, kanske vi har en praktiskt signifikant absolut skala som typiskt ligger mycket större än 3 och modellen förutsäger ganska noggrant att y blir till absolutbeloppet mycket liten för dessa x1 och x2 värden, och kanske trots allt är en bra modell. Medelvärde och standardavvikelse för y är
> mean(y)
[1] 3.4
> sd(y)
[1] 1.074968
Medelvärdet är den minstakvadratanpassade modellen med den enda basfunktione 1, och standardavvikelsen rmk-felet för den modellen. Vi ser att det ger väsentligen lika bra resultat att ta som vår modell det konstanta medelvärdet som den plana modellen med också två lutningskoefficienter. Så att inkludera lutningen verkar inte i detta fall ge någon ökad prediktionsgrad. Huruvida det var relevant att trots allt göra "multippel regression", inkludera också de två lutningskoefficienterna, beror på om vi är intresserade av lutningskoefficienterna som sådana. De bidrar inte till den absoluta noggrannheten här. Men om det inte är de absoluta värdena utan förändringarna i värdena som sådana som är vårt intresse så är det ju ändå lutningskoefficienterna vi skall beräkna. Att mkfelet för planmodellen här är större än för konstantmodellen betyder att förmodligen ger konstantmodellen en bättre prediktion av värdena i befolkningen. Men inte nödvändigtvis av förändringarna av värdena i befolkningen. Men eftersom planmodellen i vårt fall inte är mycket bättre, eller t.o.m. kanske i viss mening sämre, än konstantmodellen så gäller det förmodligen enbart i meningen att planmodellen predikterar korrekt "att lutningarna (till absolutbeloppet) i viss mening är ganska små", vilket i vissa tillämpningar kan vara ett värdefullt resultat i sig självt medan det i andra fall är irrelevant. Men för att verkligen kunna säga något mer exakt om det så skulle vi behöva någon form av uppskattning av hur stora samplingsfelen är och hur stor effekt de felen ger i vårt fall. Den lilla ökningen av rmkfelet som vi ser här beror bara på den mycket grova uppskattningen att minskningen av frihetsgrader från 9 för konstantmodellen (vi dividerar med 9 när vi beräknar variansen lika med mkfelet för den konstanta modellen) till 7 (vi dividerar med 7 då vi beräknar mkfelet för lutandeplanmodellen) ökar felmåttet mer än mer än de två extra basfunktionerna minskar summan av kvadraterna på modellfelen. Kom ihåg att från konstruktionen av minstakvadratmetoden så blir alltid summan av de kvadratiska felen lika stor eller mindre då vi ökar antalet basfunktioner, och lika stor bara då modellparametern för den extra basfunktionen blir noll; så om rmkfelet ökar då vi ökar antalet basfunktioner så beroer det på att minskningen av summan av kvadraterna på modellfelen inte blir tillräckligt stor för att kompensera för att vi sedan dividerar med ett mindra antal frihetsgrader. Det är en första mycket grov uppskattningen av att kanske konstantmodellen predikterar värdena för befolkningen bättre än lutandeplanmodellen (om modellparametrarna blev tillräckligt välbestämda skulle treparametermodellen prediktera något litet bättre än enparametermodellen men samplingfelen i modellparametrarna riskerar att bli för stora för att den förbättringen verkligen skall slå in), men för grov för att säga något med någon större säkerhet, utan en mer omfattande felanalys skulle behöva göras.

Om vi däremot inte nu oroar oss för mycket över hur modellerna predikterar befolkningen utan nöjer oss med hur de beskriver just vårt sampel, så ger ju planmodellen en något litet bättre beskrivning än konstantmodellen. För att göra den jämförelsen så måste vi dividera med samma värde för alla modellerna, vilket samma värde att dividera med vi tar kan på sätt och vis vara vilket som helst vi tar som N (här N=10). Vi har då kommit till multippla korrelationskoefficienten och bestämningskoefficienten ("coefficient of determination") som vi diskuterade i del a av denna föreläsningen.
> mkfel <- t(yfel)%*%yfel/10
> mkfel
[1] 1.001882
> rmkfel <- sqrt(mkfel)
> rmkfel
[1] 1.000994
variansen, om vi dividerar med 10 istället för 9
> vy <- var(y)*9/10
> vy
[1] 1.04
> sdy <- sqrt(vy)
> sdy
[1] 1.019804
rmk-felet rmkfel för lutandeplanmodellen blir något litet mindre än rmk-felet sdy för konstantmodellen. Bestämningskoefficienten för lutandeplanmodellen blir
R^2=1-v_{ymodell-y}/v_y
> Rk <- 1-mkfel/vy
> Rk
[1] 0.03665219
> R <- sqrt(Rk)
> R
[1] 0.1914476
Bestämningskoefficientens låga värde visar att [lutandeplan-]modellen förklarar väldigt litet av variationen av y-värdena. Vi kan också beräkna multippla korrelationskoeffocienten direkt med korrelationsfunktionen "cor"
> cor(y,ymodell)
[1] 0.1914476

Vi kan också bestämma modellen med funktionen "lm"
> pm1 <- lm(y~xdata[,2:3])
> pm1
Call:
lm(formula = y ~ xdata[, 2:3])
Coefficients:
(Intercept) xdata[, 2:3]V2 xdata[, 2:3]V3
4.086022 -0.188172 -0.008065
D.v.s. samma resultat som vi beräknade manuellt med "qr" ovan.

Vi kan också beräkna det totala beroendet av y=x1 av x2
> lm(y~xdata[,2]
Call:
lm(formula = y ~ xdata[, 2])
Coefficients:
(Intercept) xdata[, 2]
4.0667 -0.1905
Och av x3
> lm(y~xdata[,3])
Call:
lm(formula = y ~ xdata[, 3])
Coefficients:
(Intercept) xdata[, 3]
3.8636 -0.1364
Det totala linjära beroendet av y på x2 är -0,1905 y-enheter per x2-enhet, medan det partiella beroendet är endast -0,1882. Ingen större skillnad, det mesta y-beroendet på x2 verkar vara direkt. Det totala linjära beroendet av y på x3 är -0,1364 y-enheter per x3-enhet, medan det partiella beroendet är endast -0,008. Också här verkar det mesta beroendet vara direkt, men ändå en betydligt större indirekt korrelation.

Med det är exempelt slut. Men vi ser att vad som saknas här är en riktig analys av samplingsfel. Men jag förmodar att vi återkommer till det.
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » tis 15 jan 2013, 02:49

föreläsning 9, multippelregression i R

Conway går här igenom ett exempel på analys med multippel regression i R av ett simulerat dataset från en studie av fysisk uthållighet. Det är ett enkelt exempel med endast tre variabler, de två kvasioberoende variablerna x1= ålder i år och x2= antal år av aktiv fysisk träning, och den beroende variabeln x3=y= [fysisk] uthållighet. Vi analyserar detta dataset/stickprov genom att dels anpassa en plamodell till alla tre variablerna och titta på de partiella linjära beroendena av uthållighet på ålder och träningstid, dels anpassa rätlinjemodeller till uthållighetens beroende av endast en [åt gången] av ålder och träningstid och titta på de totala linjära beroendena. (Observera alltså att här såsom eljest då vi i dessa sammanhang talar om "beroenden" så avser vi matematiska beroenden i modellen (och i modellen är de kvasioberoende variablerna oberoende variabler i matematisk mening av oberoende variabler, men motsvarande variabler i den verkliga studien behöver inte nödvändigtvis vara oberoende variabler så som vi avser med oberoende variabler i en studie (se föreläsning 1)), de är statistiska beroenden vilka kan men inte alls nödvändigtvis behöver motsvara samma kausala beroenden hos dessa vaiabler i verkligheten. I just detta exempel så verkar det dock vara rimligt att anta att de ungefärligen motsvarar de kausala beroendena.)

Datafilen fanns på Courseras kusrssidor men tyvärr har vi varit litet långsamma så den finns inte kvar. Jag har sparat Conways alla föreläsningar men glömt datafilerna. Men jag har gjort en motsvarande datafil "endurdata1" som ger väsentligen samma värden på statistika som Conways. Kopiera denna och spara som "endurdata1" i din R-arbetskatalog:

Kod: Markera allt

age             exercise         endurance
63.2964259890046 9.56681620952549 1.73928511017049
49.400521667562 8.16748818149709 23.2276348252845
33.1624438625713 3.81240992426055 20.4936930863812
36.5824065072928 6.85624580291236 24.8691409125859
57.592989571752 14.4079885345368 15.8710304025771
48.9584407387961 6.27096930935518 21.302139701334
52.1862570049537 2.21990926478851 33.0011342247203
30.6613082550909 2.47569205521078 21.6092721887977
53.6785878724883 18.6606362956087 32.6053864082162
56.7800623258683 17.3424580409227 31.3025059761008
56.8978243929177 7.53391611901803 20.2263112917119
53.6239417923272 16.3160504054685 27.2845435599035
56.7136958947107 14.3831871804272 37.1204211099257
59.28783627586 7.55037176219422 10.2149462943267
49.3437490509275 14.0511235422311 21.8013815573386
46.3096268070215 16.3655899988251 54.269338753485
44.8756458490648 9.14254547990453 19.9730435958463
44.9056570402033 9.79653267439458 34.4041386574875
48.5477199724962 11.4709383561803 24.0405201853103
56.802692126282 9.93376503292679 18.984218821758
50.9686429921195 10.526720471909 14.1072650631823
50.2422849983092 10.3034095721054 35.8802262791589
37.0711246596858 12.6584232957554 17.1946701252494
38.5079803987505 11.178141062093 31.0963876876743
29.5040365335766 10.1402140294215 42.6565773122413
62.2767215566481 13.5442996413453 8.03152868185445
47.47401366722 10.3133407165291 32.6020993778543
63.6691022754542 6.92223874357497 19.9792618722432
52.9571634782213 4.26140674489164 4.28603921238491
46.5017704519963 5.35861908243215 37.0558341474712
59.8894778095481 6.59053067586119 23.236780534
53.8790707224353 6.15972397089506 33.5997787807862
48.8266054262497 7.78921017757065 18.7522467050429
43.1975178863833 3.51822329255941 10.6056813598714
45.8569610678954 6.72955976442604 34.6767449934843
49.3341178398432 13.9270986384617 30.705763924147
45.0396820524357 10.0425993535907 26.123807413518
45.8839636907064 11.5178069932273 33.017293396901
29.525210533465 5.32781535567441 29.1102523442832
39.5763006333285 5.27895658006846 25.8175324967836
62.4012190127141 9.43785584405443 27.0751731644393
32.6350105314855 10.4990746055706 30.638917358493
46.7993205106452 9.6922726649249 14.3615992011426
53.7533205765744 8.20950764433325 38.5849392747635
70.5405238999146 7.36941238290995 22.1884653254893
31.3572430268591 7.19979905011706 36.8986537638877
58.3697670284025 18.5178461284645 27.1074773079306
54.0996878259458 16.2130352435854 10.8227495209563
44.7721389982112 5.28869380369013 22.5822626827216
51.7645499431675 10.9200542425376 29.9569618185348
40.5459113811366 23.1213729644721 56.6457141082526
50.5544949913114 16.2183549163467 39.1743436902829
46.3691743361177 2.33656619589238 10.0501738233579
63.6710080437166 18.4689878932949 23.930355003352
30.5010545023005 8.48954776656186 29.9247295847091
69.0777969877465 7.94795753761714 12.3232402755872
41.2913041377464 4.68266265937254 14.0371534057888
49.1761722184152 13.3521362760189 25.0291113742895
55.924175759397 10.9776269860623 21.4807189681577
44.825964499179 13.3272361364644 36.2396331377085
50.1902225614619 8.47011608789306 14.093759972029
66.9341577346199 8.38745289607626 13.3181712656119
50.8958383984778 8.94800376801618 32.1369500172284
46.422980717967 9.59356438757708 31.3710927440089
52.0344038123444 8.01795246197417 41.1296954158154
45.6638702334365 5.90390327815193 27.0640758171008
44.791691979423 9.52797054549816 22.5998201810683
43.0699142437694 5.00489568253152 27.1800459187239
60.7754561163236 9.322346150528 36.2481671881911
32.2806890831974 6.78040293566946 25.2212215656778
53.2676367148119 18.1877671831924 43.5901525658808
60.4062694767999 8.09703065777917 14.6138766626987
52.0670475817456 13.648911186751 37.3869092655953
56.1897038829945 8.40231628434845 48.5728843420521
37.7555683041522 7.2649546977823 5.96924178214441
56.7512421367852 14.8600666803341 29.9539750893874
68.0493004281335 18.4676116582639 31.5032111712508
57.9778841907396 12.7771470810062 16.007674799739
48.9147787597149 17.173497852964 37.1333010609885
47.8015613947604 12.3151679444743 44.9400446420898
70.6054845719585 8.86447522836317 22.4276544714955
28.5517142329246 16.5486544338816 47.1586581993321
33.4408389946812 5.6790717805841 26.4922873376375
48.2165729355477 10.0395972533486 33.983592015833
55.0510286690681 9.01275623124047 50.6144682726815
40.4433140727209 10.3984066542406 43.2850116574331
49.5950198530124 11.8025938002462 13.4373926195438
34.4983870991086 14.7839761297547 34.0831657613908
49.5069189377215 12.5418665030591 8.53437944838557
53.5149252242356 6.70689523083356 18.4782552707723
51.2940423745513 3.46914627125123 20.245954467438
37.2379901401403 13.1753825009788 46.046098955047
48.6714888290213 6.53456158853371 18.5338199916586
58.2026678828188 25.1598164855489 52.0872732750482
62.5193149326775 5.58627073121263 17.4198265109044
44.6203373857268 12.6974355653737 35.5852364096581
52.8431211662581 7.80060850128227 26.7099575765813
54.9041655936032 19.334311813743 28.9983010866654
53.5346731676767 9.69534273552557 32.7021755522465
44.0150479421818 10.3376391361799 33.4866163571255
43.06312423318 6.97259412364212 19.1223405211098
40.149976780034 4.66053676440938 19.1185951193226
60.4703337830884 14.4473983167612 31.9963151384022
48.6957007484245 14.3052490883403 15.3035655236001
50.4953688571086 10.1736914428653 44.3995578385771
50.1184815530953 7.69819937091652 14.0951737808532
49.6996755511963 6.56084248528901 33.4330086032077
59.0327543050979 6.89365501932397 17.2202319713131
73.6377864514248 21.5993147990991 21.2627169030473
38.3431833858728 5.57489394019474 16.8009413121231
53.8888444332867 2.66604543353124 14.7448231144655
42.5411510724412 6.70086349917958 22.9557255300072
60.3245485045777 12.380887263958 29.8578271678184
28.2322909830066 7.0186331123392 48.481984790518
28.8410461804993 6.50027257401268 17.591345629242
47.2151865333868 12.4212929639841 26.1615912100134
37.7149853187325 11.0468378503567 24.1700355463113
43.8590293869522 5.45859385560097 12.1672701686877
45.140726914603 8.54330903171934 12.7183933245091
35.8576501164989 7.07178385971386 28.1328156569037
50.3915677053754 2.68051903859345 5.63343276014557
59.1154023319026 18.0043942756956 28.9716936311205
38.8954026981342 0.772538415824148 15.7084035767218
54.562227181238 13.6071713170668 16.432260534924
33.4473428209209 4.36694528381849 16.7502087716251
57.9544082862725 15.5336999816455 21.5332394344791
66.315528675806 11.72953615916 26.9032725934402
58.5356245812838 8.44165557065788 32.7587671535604
33.1017035752218 10.8805627146611 18.5814944822775
62.4502210497058 14.0156589551511 38.4810029868005
59.8645899851905 6.44659485614758 9.6228801469657
51.7153965974984 10.8963641769954 20.2217139037328
58.3731622815089 14.6362935846869 47.6429260927374
60.0835268034436 13.6283248941064 12.6390289867848
49.072692451438 13.2585410327817 11.4665194798668
71.8655490474039 14.120496774267 33.3915199097663
37.3947707131025 5.92769896568179 16.5377145490363
57.4229204662234 5.82377537486232 13.1343984641791
32.1722206391307 9.50976160464445 27.4806309738574
50.3094603010642 4.8260771058435 25.8863376830414
56.317324889049 13.1138640373026 30.3180884278408
51.3181776520225 18.1478519908443 34.6004526286113
35.8469904819341 14.6949943924377 37.1583815846757
46.922037440961 15.2508914856385 17.9019016496679
64.90632695879 12.0456394766697 14.5670307822532
63.9312286217956 13.6925451646993 37.4369834167142
46.3930357554541 10.9880989042646 37.6175600051282
41.0314488795463 14.3263948388933 26.6855207654238
36.3812130128116 10.7689759180676 21.9065997501837
52.6879001769611 5.91915464917592 15.0360279296277
29.4801981771345 7.7935896549818 15.0293991579533
49.8471120081215 14.376221250999 29.2353586785186
40.1289959162657 9.79986649532743 36.8674838584167
44.4421794985009 3.90290688899895 19.6877338976076
47.8913684436574 8.81259817259259 24.2021616911831
44.071120211408 9.15162545666577 22.941079817523
61.8494646300144 19.3692391146204 27.9988206683548
44.117052680853 7.74486661201339 33.1350921991173
59.5473727829959 14.4833110078592 17.1135487029172
43.7983259802695 12.2739306907552 4.3614291647397
42.9194369604108 12.1976195751928 9.83803133529297
54.5730846340601 18.2966744179542 13.9309833408599
45.9055845628845 14.6913026833559 19.8151201150412
47.0675240794194 15.1660674231758 43.8136039562375
43.402089622136 6.13766327944365 27.3385665380436
63.2296344365471 8.41941184426941 12.2214227560565
43.9881033133069 13.9230271677646 36.8900662173219
48.7642858277749 9.72892099503283 47.2306287577593
57.3107722580502 16.0393891314134 14.6693074277483
46.5746621552216 15.39764590589 18.7662611429542
44.2129896175003 5.28292887203761 21.1414919086553
49.7084862771374 14.8341792337365 35.6243762235599
67.7672455098601 11.5457309119348 17.1805299380176
48.4076843064362 15.1893399203932 31.1892959079565
41.1887625921817 10.682221258276 37.608029716277
47.9988823845703 4.28226875929864 20.1308630414392
30.5712775662766 12.996584806827 31.2814892555587
57.1051826711599 19.864274547023 39.3067076156417
18.2126678553801 8.31218756409089 24.9136981768547
49.1924937953765 9.56469263219972 33.0120535493175
61.0841526888215 8.91517734983414 22.4865970302187
50.38656318534 13.128335989081 23.0070402350552
27.2168445454656 5.90581610631391 45.3889811496872
70.6787429750778 15.1850478247583 14.4403825730215
57.5301303554196 10.2515055022026 16.8795102577579
53.3891377032648 8.02441935412299 33.1708540028374
35.0011418311291 1.22146904006985 27.713574457795
37.5646528353108 6.0961314452921 36.0818896600759
41.0074322070065 21.866704481681 39.4100910830246
56.1427266687776 6.07500485216424 3.35784908078358
48.7476627583312 7.50192422800691 9.36109023729573
54.5606118226846 8.9950583736221 35.102892273782
39.7989987071645 15.203898740935 38.4373737220274
62.3514443393197 10.834773804848 33.8501632345057
38.4814198971411 16.0916157710469 26.4624056713004
50.997787297758 12.1808849927857 34.5460611576917
53.0594557419641 2.59408450477312 19.3167778725826
57.4254790515455 10.4337127138319 20.8456930282566
54.9213158102589 26.5599073744005 49.7329593302403
43.8458570474722 11.1859434070368 17.6949838423772
64.7524827507241 21.9467154977259 27.8850347893661
47.8906955813872 7.44667251378514 33.6648183799279
48.550319276354 5.64213132913569 25.5423797752034
44.9864277179909 16.2914966497134 33.1104370422951
48.6660157619757 9.51960340701749 36.9392552775648
44.6406652366762 13.6173558184719 32.1955712538515
46.5705253512215 8.96410552557248 37.7470967804837
30.5725691441603 10.8410395518348 35.484492094621
78.8645079602524 19.859818839393 27.6184055274552
41.4713420695532 26.5693890906673 24.1999443864772
47.0052456600383 16.369251447497 19.3167674777092
56.16790876698 5.2571304008536 32.6054473140872
43.8553570719632 7.97555563623221 28.3639090458316
43.1813558622417 7.44186743740365 22.6204708376862
41.1474914763621 6.19184356110495 20.3963725543317
44.6682325208599 13.4467978871335 24.2307625678994
37.4970700695185 9.07590070715393 26.1155228664032
49.2101182651711 18.099665366707 44.478501688507
52.5274519443445 10.8465747707954 28.9606582277789
55.6477693485943 7.98625062617548 20.6553475659973
59.8783011000155 14.2002813694552 16.3066536036728
54.5228540773062 9.2379935568039 15.4426350781236
58.2737794071175 20.5173079776433 29.3482439973504
42.0122656975604 10.5492125834846 17.2252732895802
44.2662529034295 3.55535761821746 36.275673137407
41.8500198646349 5.76656618489171 36.7703101608974
58.1057850805362 16.9436598178514 42.5360493646721
58.2487792813516 12.8151104609487 33.9536944491063
35.4876147720862 11.4484271450218 35.9391742747785
62.8800695939098 10.227769049544 22.5207455166181
49.5704720285172 9.60281878873004 38.4103742574521
60.6336566886144 14.6557327074429 42.2201910585325
57.9728289334316 11.2141533797255 20.9673387325845
41.5743951415667 10.2458578445934 38.1315486272229
58.5376175449877 10.6456482026972 24.2770083671103
55.8179538242552 4.60684487605106 12.0915956499528
45.6538544590928 16.9082306966323 50.3201921366307
30.801559415672 7.32435349579589 12.9776116294995
45.1872856602121 5.63746657020434 33.9979727155857
61.669337145061 12.595261260443 31.3475541796059
53.503113979527 12.5447947213322 18.2125750208729
33.3831992937937 3.1215680963274 12.5315314080985
45.5530502989568 4.37260947558663 23.2965135709488
43.7280834411274 14.2379038625567 19.9624737914969
57.3434707742602 11.4461546337152 34.0901674036179

Första steget är att läsa in data till ett dataobjekt med R-funktionen "read.table":
> endur <- read.table("endurdata1", header=TRUE)
> is.data.frame(endur)
[1] TRUE
> ncol(endur)
[1] 3
> names(endur)
[1] "age" "exercise" "endurance"
Dataramen endur har tre kolumner: endur$age är ålder i år, endur$exercise är år av träning, endur$endurance är uthållighet (i någon godtycklig enhet som vi inte vet hur den är definierad). Antalet basfunktioner M i vår plana modell blir lika med antalet kolumner i endur minus ett (ty sista kolumnen är beroende variabeln "y") plus ett (för "intercept") d.v.s. lika med antalet kolumner
> M <- ncol(endur)
> M
[1] 3
> N <- nrow(endur)
> N
[1] 245
antalet datapunkter (stickprovsstorleken) N är lika med 245.



Vi studerar först uthållighet som funktion av ålder. Gör en "scatterplot" med uthållighet på ordinatan och ålder i år på abskissan
> plot(endur$age,endur$endurance)
Medelvärden och standardavvikelser för ålder och uthållighet är
> mean(endur$age)
[1] 49.18313
> sd(endur$age)
[1] 10.10757
> mean(endur$endurance)
[1] 26.53085
> sd(endur$endurance)
[1] 10.81886
Vi konstruerar sedan en rätlinjemodell, som vi kallar modell1, för att se hur stort det totala linjära beroendet uthålligheten av ålder är
> modrell1 <- lm(endur$endurance~endur$age)
> modell1

Call:
lm(formula = endur$endurance ~ endur$age)

Coefficients:
(Intercept) endur$age
33.1585 -0.1348

Uthålligheten minskar totalt "i genomsnitt" med 0,13 uthållighetsenheter per år högre ålder. Modellvärdena ges av "lm" som "fitted.values", lägg in den räta linjen i diagrammet som utgör modellens prediktion
> lines(endur$age,modell1$fitted.values,col="blue")
Alternativt kan vi rita den räta modellprediktionslinjen med "abline", vilket ritar linjen över hela diagrammet, inte bara över det intervall som täcks av endur$age-värdena som då vi ritade den med "lines" ovan
> abline(modell1,col="yellow")

Den multippla korrelationskoefficienten är
> rm1 <- cor(endur$endurance,modell1$fitted.values)
> rm1
[1] 0.1258984
Eftersom vi här har bara en "enkel regression", linjär modell sånärsom på intercept med bara en prediktor, så är multippla korrelationskoefficienten lika med vanliga korrelationskoefficienten, möjligen sånärsom på tecken (ty multippla korrelationskoefficienten är alltid ickenegativ). De är lika (åtminstone sånärsom på tecknet) eftersom att ge modellprediktionerna för y (modell1$fitted.values) är i detta fall detsamma som att ge x (endur$age) på en ny x-koordinataxel som är skiftad och skalad i förhållande till den ursprungliga. Och som vi diskuterade i föreläsning 7 så är Pearsons korrelationskoefficient konstruerad med en sådan normalisering att dess värde är oberoende av en sådan koordinatskalning (förutom att tecknet byts om vi byter riktning på den ena axeln men inte den andra).
> cor(endur$endurance,endur$age)
[1] -0.1258984
Och bestämningskoefficienten R^2
> Rsq1 <- mcor1^2
> Rsq1
[1] 0.0158504
D.v.s. 1,6 procent av variationen av uthålligheten i vårt stickprov förklaras av denna modell 1.

Vi kommer ihåg att R^2=1-v_{y-ymodell}/v_y. v_{y-ymodell} är ett mått på hur mycket de modellerade värdena av den oberoende variabeln avviker från de faktiska värdena av den oberoende variabeln i vårt stickprov, kvadrerade. Men vi är också intresserade av motsvarande värde på avvikelse i befolkningen. v_{y-ymodell} ger en något för låg skattning av den avvikelsen. Ty modellparametrarna skattade i stickprovet avviker normalt något från vad motsvarande värden skulle blivit om vi beräknat modellparametrarna från hela befolkningen (s.k. samplingsfel), och modellparametrarna beräknade från just vårt stickprov tenderar att ge modellprediktioner som ligger något närmare värdena på den oberoende variabeln i just vårt stickprov (och därmed sämre prediktion för att prediktera hela befolkningen eftersom den inte har just denna samplingsfeltendens att ligga närmare vår modell, som vi ofta är mest intresserade av). Vi kan kompensera för detta genom att dividera summan av de kvadratiska avvikelserna med antalet återstående frihetsgrader efter att modellparametrarna beräknats istället för med N eller N-1. D.v.s. vi kan ta \sum_{n=1}^N((y[n]-ymodell[n])^2)/(N-M) som vårt mått på residualvariansfel (mått på kvadratisk avvikelse från modellprediktion). Och kvadratroten på det som mått på standardresidualfel, ibland kallat "residual standard error". R-funktionen "lm" ger felen (y-ymodell) som "residuals", så i vårt fall blir residualvariansfelet
> rve1 <- var(lm1$residuals)*(N-1)/(N-2)
Funktionen "var" beräknar den vanliga variansen, d.v.s. dividerar med N-1, men vi har två modellparametrar och vill dividera med N-2, så därför måste vi först multiplicera resultatet från "var" med N-1 och sedan dividera med N-2. Residualstandardfelet blir
> rse1 <- sqrt(rve1)
> rse1
[1] 10.75483
Vi kan också beräkna en justerad bestämningskoefficient Ra^2 ("a" för "adjusted") där vi byter ut den vanliga variansen av y-ymodell i den vanliga bestämningskoefficienten R^2 mot residualvariansfelet. (Man kan gå in i djupare analyser av detta, men denna skattning räcker för oss här.) Den vanliga bestämningskoefficienten
> Rsq1 <- 1-var(lm1$residuals)/var(endur$endurance)
> Rsq1
[1] 0.0158504
> Rasq1 <- 1-rve1/var(endur$endurance)
> Rasq1
[1] 0.0118004
D.v.s. vi skattar att vår modell 1 förklarar 1,2 procent av variansen av uthålligheten i befolkningen.

R har en funktion "summary" som ger en sammanställning av en modell genererad med "lm"
> summary(modell1,correlation=TRUE)

Call:
lm(formula = endur$endurance ~ endur$age)

Residuals:
Min 1Q Median 3Q Max
-22.8949 -8.0658 -0.9653 7.5629 28.9511

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.15854 3.41992 9.696 <2e-16 ***
endur$age -0.13476 0.06812 -1.978 0.049 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 10.75 on 243 degrees of freedom
Multiple R-squared: 0.01585, Adjusted R-squared: 0.0118
F-statistic: 3.914 on 1 and 243 DF, p-value: 0.04902

Correlation of Coefficients:
(Intercept)
endur$age -0.98

"Residuals:" ger minimum- och maximum-värdena och kvartilerna för felen y-ymodell.
"Coefficients:" ger en tabell med resultat för modellparametrarna. Varje rad i tabellen ger resultat för en viss parameter. Om vi skriver modellen som ymodell=y01+k11*x1 där x1 är åldern i år, så ger här ger första raden ("(Intercept)") resultat för y01 och andra raden ("endur$age") resultat för k11. Första kolumnen ("Estimate") ger det skattade värdet på modellparametern. Andra kolumnen ("Std.Error") ger en skattning av standardfelet för modellparametarn (d.v.s. standardavvikelsen för de olika skattningarna av modellvärdet om vi skulle göra ett stort antal omtest). Tredje kolumnen ("t value") ger det skattade värdet på modellparametern dividerat med det skattade värdet på standardfelet för skattningen av modellparametervärdet (d.v.s tredje kolumnen är lika med första kolumnen delat med andra kolumnen). Fjärde kolumnen ger det dubbelsidiga "NHST-p-värdet" för nollhypotesen att vårdet på modellparametern skulle vara noll. Vi ser att här så är lutningskoefficienten i detta exempel statistisk signifikant enligt den mest använda varianten av NHST, den ligger precis över gränsen till statistisk signifikans (p=0,049<0,05). (Som vi diskuterat tidigare så kan ett bättre/mindre dåligt sätt att ange den statistiska osäkerheten än att ange "NHST-p" vara att ange konfidensintervall. Summary ger inte uttryckligen konfidensintervall men för stora N kan vi lita på centrala gränsvärdessatsen och för enkelt uppskattning av konfidensintervall från standardfelet. Plus/minus ett standardfel kring det skattade modellparametervärdet ger 68%-konfidensintervallet, plus/minus 2 standardfel ger 95%-konfidensintervallet, plus/minus tre standardfel ger 99,7%-konfidensintervallet. 99,7%-konfidensintervallet för det totala linjära beroendet för uthålligheten av åldern här är alltså [-0,34, +0,07][uthållighetsenheter/år]. Ofta anger man standardfelet själv (plus/minus 1 standardfel som ger 68%-konfidensintervallet) för att ge en uppskattning av ""typiskt samplingsfel"" (informellt talat, det är inte riktigt lika med typvärdet) och plus/minus 3 standarfel för att informellt ge "intervallet där det rätta värdet troligen är" (även om det inte är en strikt tolkning).)
"Residual standard error" definierade vi ovan och vi får också här samma värde (10,75) som vi beräknade manuellt ovan. Antalet frihetsgrader är antalet datapunkter i stickprovet minus antalet modellparametrar, här 245-2=243. "Multippel R-squared" är bestämningskoefficienten R^2, här lika med som vi beräknade manuellt ovan (0,01585). Och "Adjusted R-squared:" den justerade bestämningskoefficienten Ra^2 (med samma värde (0,0118) som vi beräknade manuellt ovan).
"Correlation of Coefficients:" anger Pearsons korrelationskoefficienter mellan samplingsfelen för skattningarna av modellparametervärdena. Vi ser att vi i detta exempel har en stark negativ korrelation mellan samplingsfelet för intercept och lutningskoefficienten. Om vi råkar få stickprov så att intercept blir större än vad det skulle blivit om vi tagit hela befolkningen, så tenderar starkt lutningskoefficienten bli mindre än vad den skulle blivit om vi tagit hela befolkningen. Detta kan ibland vara viktigt vid angivande av skattningen av samplingsfelet. Ty ibland är man inte så intresserad av t.ex. konfidensintervallen för de enskillda modellparametervärdena, utan mer intresserad av ett konfidensområde (här det tvådimensionella området) för (här de två) modellparametervärdena samtidigt. Med så stark korrelation som vi har i detta exemplet så skulle användande av de två konfidensintervallen var för sig för detta område ge ett onödigt stort konfidensområde eftersom man då inte tar hänsyn till korrelationseffekten (d.v.s. en alltför pessemistisk uppsakttning av den statistiska osäkerheten).



Vi studerar sedan uthålligheten som funktion av antal år av aktiv fysisk träning.
> modell2 <- lm(endur$endurance~endur$exercise)
> plot(endur$exercise,endur$endurance)
> abline(modell2,col="green")
> summary(modell2,correlation=TRUE)

Call:
lm(formula = endur$endurance ~ endur$exercise)

Residuals:
Min 1Q Median 3Q Max
-23.9475 -7.8696 -0.4326 7.6856 25.3501

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 18.3924 1.6000 11.49 < 2e-16 ***
endur$exercise 0.7625 0.1369 5.57 6.72e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 10.21 on 243 degrees of freedom
Multiple R-squared: 0.1132, Adjusted R-squared: 0.1096
F-statistic: 31.03 on 1 and 243 DF, p-value: 6.721e-08

Correlation of Coefficients:
(Intercept)
endur$exercise -0.91

Det totala linjära beroendet av uthållighet på antal år av träning är mycket större, och av motsatt tecken, jämfört med uthållighet av ålder. Vi verkar här ha en betydande effektstorlek (även om vi egentligen skulle behöva veta vad uthållighetsenheten betyder för att kunna dra den slutsatsen) med en hög statistisk signifikans. Om vi skriver denna modell som ymodell=y02+k22*x2 där x2 är antal år av träning, så är punktskattningen av lutningskoefficienten k22=+0,76 uthållighetsenheter/år med ett standardfel på 0,14 uthållighetsenheter/år. 99,7%-konfidensintervallet för k22 är [0,35, 1,17][uthållighetsenheter/år]. Modell 2 förklarar också betydligt mer av variationen i uthållighet än modell 1. R^2=11,3% av variationen i uthållighet i vårt stickprov bestäms av denna modell, och Ra^2=11,0% av variationen i uthållighet i befolkningen.



Vi studerar sedan de partiella linjära beroendena av uthållighet på ålder och träningstid genom att anpassa stickprovsdatat till en planmodell (modell 3), ymodell=y03+k13*x2+k23*x2.
> modell3 <- lm(endur$endurance~endur$age+endur$exercise)
> summary(modell3,correlation=TRUE)

Call:
lm(formula = endur$endurance ~ endur$age + endur$exercise)

Residuals:
Min 1Q Median 3Q Max
-25.0198 -7.1741 -0.0878 7.5776 27.1145

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 29.39520 3.20513 9.171 < 2e-16 ***
endur$age -0.25710 0.06549 -3.926 0.000113 ***
endur$exercise 0.91630 0.13864 6.609 2.45e-10 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 9.919 on 242 degrees of freedom
Multiple R-squared: 0.1663, Adjusted R-squared: 0.1594
F-statistic: 24.14 on 2 and 242 DF, p-value: 2.76e-10

Correlation of Coefficients:
(Intercept) endur$age
endur$age -0.87
endur$exercise -0.18 -0.28

Vi ser att de partiella linjära beroendena är betydligt starkare än de totala. Beroendet av ålder för en fix träningslängd är k13=-0,26[uthållighetsenheter/år], jämfört med ett totalt beroende av endast k11=-0,13[uthållighetsenheter/år]. Beroendet av träningstid för en fix ålder är k23=0,92[uthållighetsenheter/år] jämfört med ett totalt beroende av endast k22=0,76[uthållighetsenheter/år]. Hälften av minskningen i uthållighet med stigande ålder verkar alltså "maskeras" av att äldre verkar ha en tendens att ha tränat under en längre tid. Och 17% av effekten av att personer som tränat längre verkar "maskeras" av att personer som tränat längre verkar ha en tendens att vara äldre. Vi kontrollerar hur träningstid korrelerar med ålder
> cor(endur$exercise,endur$age)
[1] 0.2826409
En tydlig korrelation finns som visar att personer med högre ålder tenderar att ha tränat längre tid. En korrelation stor nog att tydligt ses med det nakna ögat i en scatterplot
> plot(endur$age,endur$exercise)

Betrakta speciellt specialfallen en person som aldrig tränar och enperson som alltid tränar. För en person som aldrig tränar så är träningstiden fix (=0 år), så uthålligheten minskar med -k13=0,26 enheter per levnadsår. För en person som alltid tränar så ökar träningstiden med ett år per år, så uthålligheten ökar med k13+k23=0,66 enheter per levnadsår. Jämfört med en genomsnittlig person för vilken uthålligheten minskar med 0,13 enheter per levnadsår. Vi kan dock misstänka att den linjära modellen för beroendena har ett begränsad giltighetsområde, så vi bör vara försiktiga med att anta att resultat som dessa gäller och framförallt gäller utan begränsningar. För att fastställa vilka sådana eventuella begränsningar skulle vara så skulle vi behöva göra mer omfattande undersökningar.

Standardfelet för k13 är 0,065[uthållighetsenheter/år], jämfört med 0,068 för k11. Standardfelet för k23 är 0,14[uthållighetsenheter/år], jämfört med 0,14 för k22. Ungefär desamma. Men då |k13| är dubbelt så stor som |k11| så blir standard-NHST-p betydligt mindre för k13 (p=0,011%) än för k11 (p=4,9%), så att uthållighet inte är oberoende av ålder är betydligt "starkare statistiskt signifikant" med modell3 än med modell1 även om redan modell 1 klarar den godtyckliga konventionella gränsen 5%.

Vi ser att denna tredimensionella modell förklarar betydligt mer av variationen av uthålligheten än någon av de tvådimensionella modellerna. Modell3 förklarar 16,6% av variationen hos uthålligheten i stickprovet och 15,9% av variationen hos uthålligheten i befolkningen. Jämfört med modell1 som bara förklarar 1,6% respektive 1,2%, och modell2 som bara förklarar 11,3% respektive 11,0%. Att den justerade bestämningskoefficienten ökar då man går från en modell till en annan modell som innehåller alla basfunktionerna i den första modellen plus någon eller några ytterligare är ofta ett viktigt kriterium för att dra slutsatsen att den andra modellen är "bättre" (inte enda kriteriet, det kan finnas många aspekter, men ofta ett inte oviktigt).




I nästa steg kör Conway igen hela exemplet igen, men denna gång med normaliserade variabler.
Z1=(x1-M_x1)/s_x1
Z2=(x2-M_x2)/s_x2
Zy=(y-M_y)/s_y
R-funktionen "scale" transformerar till normaliserade koordinater. Vi verifierar detta genom att manuellt normalisera x1 och sedan jämföra med resultat från "scale"
> Z1m <- (endur$age-mean(endur$age))/sd(endur$age)
> Z1 <- scale(endur$age)
> max(abs(Z1m-Z1))
[1] 0
Z1=Z1m så "scale" uppför sig som förväntat.


Vi gör återigen modell 1-3, men denna gång med normaliserade variabler. Först modell 1, det totala linjära beroendet hos Zy av Z1
> plot(scale(endur$age),scale(endur$endurance))
> modell1z <- lm(scale(endur$endurance)~scale(endur$age))
> abline(modell1z)
> summary(modell1z)

Call:
lm(formula = scale(endur$endurance) ~ scale(endur$age))

Residuals:
Min 1Q Median 3Q Max
-2.11621 -0.74554 -0.08922 0.69905 2.67598

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.154e-17 6.351e-02 0.000 1.000
scale(endur$age) -1.259e-01 6.364e-02 -1.978 0.049 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9941 on 243 degrees of freedom
Multiple R-squared: 0.01585, Adjusted R-squared: 0.0118
F-statistic: 3.914 on 1 and 243 DF, p-value: 0.04902

Correlation of Coefficients:
(Intercept)
scale(endur$age) 0.00

Vi ser att resultaten för normaliserade statistika som t (för lutningskoefficienten), R^2, Ra^2 blir desamma som för motsvarande modell modell1 för variabler i absoluta enheter. Modellparametrarna blir dock inte desmma. "Intercept" blir nu noll eftersom vi flyttat origo för båda variablerna till deras medelvärden. Och värdet på lutningskoefficienten blir normaliserat med standardavvikelserna. Vi jämför med att normalisera lutningskoefficienten manuellt
> modell1$coefficients[2]
endur$age
-0.1347581
> modell1$coefficients[2]*sd(endur$age)/sd(endur$endurance)
[1] -0.1258984
samma värde som från "lm" med "scale". För normaliserade koordinater skall lutningskoefficienten i enkel regression vara lika med korrelationskoefficienten
> cor(endur$endurance,endur$age)
[1] -0.1258984
vilket den också är.

I normaliserade koordinater vet vi att "intercept" skall vara lika med noll, så det är egentligen bättre att låta "lm" beräkna den strikt linjära modellen (kom ihåg att "lm" lägger till "intercept" som standard, vill vi inte ha med "intercept" får vi uttryckligen skriva ...~0+... i beskrivningen av beroendet i "lm"'s argument)
> summary(lm(scale(endur$endurance)~0+scale(endur$age)),correlation=TRUE)

Call:
lm(formula = scale(endur$endurance) ~ 0 + scale(endur$age))

Residuals:
Min 1Q Median 3Q Max
-2.11621 -0.74554 -0.08922 0.69905 2.67598

Coefficients:
Estimate Std. Error t value Pr(>|t|)
scale(endur$age) -0.12590 0.06351 -1.982 0.0486 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.992 on 244 degrees of freedom
Multiple R-squared: 0.01585, Adjusted R-squared: 0.01182
F-statistic: 3.93 on 1 and 244 DF, p-value: 0.04856

Värdet på lutningskoefficienten blir detsamma, men dess standardfel blir något litet mindre eftersom alla datapunkterna nu används för att anpassa enbart lutningskoefficienten och inte också intercept. Även om skillnaden är försumbar i detta fall. Residual standard error blir något litet mindre eftersom det nu är beräknat för 244 frihetsgrader, jämfört med 243 då vi har med också intercept. Ra^2 borde då också vara något litet mindre men "summary/lm" gör tydligen ett något annat estimat för denna än det enkla
Ra^2=1-(Residual standard error)^2/v_y
som vi har använt. Och får ett något litet högre värde på Ra^2, vilket verkar litet underligt men skillnaden är så liten att det inte är alltför mycket att bekymra sig om. (Vilket tydligt visar att tumregeln att lägga till ytterligare en basfunktion förbättrar prediktionen för befolkningen om Ra^2 ökar är just är endast en tumregel. I detta fall står det ju klart att det egentligen är bättre att inte ha med "intercept" i modellen, ty vi vet per konstruktion att "intercept" skall vara exakt lika med noll.)



Totala linjära beroendet hos uthålligheten av träningstid:
> modell2z <- lm(scale(endur$endurance)~scale(endur$exercise))
> plot(scale(endur$exercise),scale(endur$endurance))
> abline(modell2z)
> summary(modell2z,correlation=TRUE)

Call:
lm(formula = scale(endur$endurance) ~ scale(endur$exercise))

Residuals:
Min 1Q Median 3Q Max
-2.21350 -0.72739 -0.03998 0.71039 2.34314

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.569e-17 6.029e-02 0.00 1
scale(endur$exercise) 3.365e-01 6.041e-02 5.57 6.72e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9436 on 243 degrees of freedom
Multiple R-squared: 0.1132, Adjusted R-squared: 0.1096
F-statistic: 31.03 on 1 and 243 DF, p-value: 6.721e-08

Correlation of Coefficients:
(Intercept)
scale(endur$exercise) 0.00


Och den multippla linjära regressionsmodellen (plus intercept, jag tar med det här eftersom Conway gör det (och det kan kanske vara bra bara som en pedagogisk repetition att uttryckligen se att intercept verkligen blir noll), även om det egentligen vore bättre att inte ha med intercept när vi vet a-priori att intercept skall vara exkat noll)
> modell3z <- lm(scale(endur$endurance)~scale(endur$age)+scale(endur$exercise))
> summary(modell3z,correlation=TRUE)

Call:
lm(formula = scale(endur$endurance) ~ scale(endur$age) + scale(endur$exercise))

Residuals:
Min 1Q Median 3Q Max
-2.31261 -0.66311 -0.00811 0.70041 2.50623

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.661e-17 5.857e-02 0.000 1.000000
scale(endur$age) -2.402e-01 6.119e-02 -3.926 0.000113 ***
scale(endur$exercise) 4.044e-01 6.119e-02 6.609 2.45e-10 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9168 on 242 degrees of freedom
Multiple R-squared: 0.1663, Adjusted R-squared: 0.1594
F-statistic: 24.14 on 2 and 242 DF, p-value: 2.76e-10

Correlation of Coefficients:
(Intercept) scale(endur$age)
scale(endur$age) 0.00
scale(endur$exercise) 0.00 -0.28

Vi ser återigen att värdena för normaliserade statistika för "modell3z" (förutom de för intercept) blir lika med dem för "modell3", medan statistika i absoluta enheter blir skalade. Intercept självt får skattningen noll. Men notera att stadardfelet i den skattningen är hela 0,059, medan vi egentligen vet att intercept här måste vara exakt lika med noll.



Conway jämför sedan modeller med R-funktionen "anova". Jag väntar dock med att visa den, ty Conway bara visar resultat från den utan att förklara vad den gör. Vi återkommer till detta endast senare då vi kan förstå något av vad som kommer.



Hela korrelationsmatrisen är
> cor(endur)
age exercise endurance
age 1.0000000 0.2826409 -0.1258984
exercise 0.2826409 1.0000000 0.3365053
endurance -0.1258984 0.3365053 1.0000000

Vi ser som sagt att korrelationskoefficienterna mellan uthållighet, och ålder respektive träningstid, är lika med de enkla regressionskoefficienterna för normaliserade variabler. Men de enkla regressionerna visar uthållighet som funktion av ålder "för en genomsnittligt tränande person", och uthållighet som funktion av träningstid "för en genomsnittligt åldrande person". Men vi ser att träningstid är positivt korrelerat med ålder. En äldre person har (i vårt stickprov och därmed i vår befolkning om vårt stickprov är representativt) i genomsnitt tränat längre tid än en yngre. Och en person som har tränat längre tid är i genomsnitt äldre. För att se de renodlade effekterna av ålder och träningstid var för sig gör vi därför den multippla regressionen:
Zy = -0,2402*Z1+0,4044*Z2
Om vi ser normaliserad träningstid som proportionell mot normaliserad ålder plus ett "slumpmässigt klassiskt mätfel" e2
Z2 = kz21*Z1+e2
så har vi kz21=r_{Z1,Z2}=r_[Z2,Z1}=0,2826
och den enkla regressionen
Zy = -0,2402*Z1+0,4044*0,2826*Z1 = -0,1259*Z1
vilket också är resultatet vi fick direkt i modell1z.
Om vi ser normaliserad ålder som proportionell mot normaliserad träningstid plus ett "slumpmässigt klassiskt mätfel" e1
Z1 = kz12*Z2+e1
så har vi kz12=r_{Z1,Z2}=r_{Z2,Z1}=0,2826
och den enkla regressionen
Zy = -0,2402*0,2826*Z2+0,4044*Z2 = 0,3365*Z2
vilket också är resultatet vi fick direkt i modell2z.

Vi demonstrerar detta genom att göra en scatterplot av Z1 och Z2. Vi ritar också den blå räta linjen som visar minstakvadratanpassningen av Z1 som funktion av Z22 (medelvärdet av kvadratiskt fel i Z1-led minimerat), och den röda räta linjen som visar minstakvadratanpassningen av Z2 som funktion Z1 (medelvärdet av kvadratiskt fel i Z2-led minimerat).
> plot(scale(endur$exercise),scale(endur$age))
> lines(scale(endur$exercise),cor(endur$age,endur$exercise)*scale(endur$exercise),col="blue")
> lines(cor(endur$age,endur$exercise)*scale(endur$age),scale(endur$age),col="red")
Som jämförelse visar vi också den gröna räta linjen som är den totala minstakvadratanpassningen till datat (medelvärdet av summorna av kvadratiskt fel i Z1-led plus kvadratiskt fel i Z2-led minimerat)
> Z12 <- matrix(c(scale(endur$exercise),scale(endur$age)),245,2)
> eig1 <- eigen(cov(Z12))
> lines(Z12[,1],Z12[,1]*eig1$vectors[2,1]/eig1$vectors[1,1],col="green")
Notera hur olika dessa tre olika minstakvadratanpassade räta linjer är, och alltså hur viktigt det är att förstå vilket anpassningskriterium som är det relevanta för en viss applikation.
"philosophy without science is blind, science without philosophy is lame" (tonyf)

tonyf
Inlägg: 2440
Blev medlem: sön 05 nov 2006, 23:57

Re: Studiecirkel: Statistics One

Inlägg av tonyf » fre 01 feb 2013, 04:32

föreläsning 10a, regressionsmetoder för mediation
föreläsning 10b, väganalysmetoder för mediation
föreläsning 12a, mediation i R

Mediaton är att ett statistiskt beroende [helt eller delvis] kommer via ett annat statistiskt beroende. Jag använder här det ord Conway använder på engelska "mediation" också på svenska. Ty jag vet inte vad det heter på svenska, men "mediation" låter ju latin så kanske är det latin och kan kanske också användas på svenska. På sätt och vis såg vi exempel på mediation redan i den föregående föreläsningen, där vi studerade uthållighet som funktion av ålder och träningstid. Men ålder kom delvis via träningstid (personer som tränat längre tid tenderar att vara äldre (t.ex., ty återigen kan vi inte genom korrelationer enbart fastställa vilka kausala samband det är som skapar dessa korrelationer, vi får inte glömma att det också skulle kunna vara ålder som har en kausal tendens att skapa träningstid och att det kan finnas någon underliggande faktor som har en kausal tendens att skapa både ålder och träningstid)). Här skall vi dock studera uttryckligen [statistisk] mediation. Vi introducerar mediation genom ett exempel med endast tre variabler, den ursprungliga kvasioberoende variabeln x=extroversion, den kvasioberoende variabeln som vi skall ta som mediationsvariabel m= diversitet i livsupplevelser, den beroende variabeln y=lycklighet i livet. Här har vi ingen sant oberoende variabel, men mediatiosanalys kan i princip användas också då vi har någon sannt oberoende variabel. Mediationsvariabeln själv kan dock inte vara en sant oberoende variabel ty meningen med mediationsvariabeln är att den skall förmedla beroende till den beroende variabeln från andra oberoende eller kvasioberoende variabler. Så mediationsvariabeln måste vara fri att få beroenden från andra variabler, men en oberoende variabel definieras av att den är kontrollerat satt av experimentatorn och inte påverkas av några andra variabler än experimentatorns beslut (som bör göras av en slumptalsgenerator).


Vi antar att vi har god grund att antaga att lyckligheten varierar endast linjärt med de kvasioberoende variablerna, så vi använder modellen som är sånärsom på en additiv konstant linjär i x och y, modell4,
ymodell4 = y04 + kyx4*x + kym4*m
som skall beskriva befolkningens lycklighet
y = y004 + kyx04*x + kym04*m + e4
där e3 är det slumpmässiga "klassiska mätfelet" (se föreläsning 5, klassisk testteori, i detta exempel antar vi att vi inte har några systematiska fel) för den uppmätta lyckligheten i studien. Observera att då vi gör statistik på mätningar med mätfel så är inte befolkningen bara alla olika peroner med sina olika lycklighetsnivåer, det är alla [i princip möjliga] mätvärden av lyckligheterna inkluderande också alla möjliga utfall för mätfelet. Observera dock också att "mätfel" i denna modell inte enbart syftar på osäkerhet i själva vår mätning av lycklighet utan inkluderar också fundamental slumpmässighet i lycklighetsnivån i sig själv. Det inkluderar också deterministisk inverkan på lyckligheten från variabler som vi inte har med i vår studie och som är okorrelerade till de kvasioberoende variabler som vi har med i studien, ty också det ger ett bidrag till lyckligheten som beter sig som om det vore slumpmässigt i vår studie. Det kan också ha bidrag från basfunktioner i de variabler variabler vi har med i modellen men inte dessa basfunktioner (s.k. modellfel), det ger inte ett slumpmässigt fel men ger ingen linjär korrelation mellan fel och mätta värden och kan därför åtminstone delvis i vissa sammanhang betraktas som om det vore ett slumpmässigt fel. I just detta exempel så antager vi dock att det inte finns någon deterministisk avvikelse från linjär variation av lyckligheten med extroversion och liverfarenhetsdiversitet och att e3 kan ses som ett rent slumpmässigt fel.

Vi börjar vår studie av detta exempel med att konstatera att lycklighet y är positivt korrelerad med extroversion x
y = y001 + kyx01*x + e1 , kyx01 > 0 .
Vi fundera sedan på om detta eventuellt sker via någon förmedlande mekanism eller egenskap m. Den egenskap vi i detta fall vill studera om den kanske kan vara en sådan förmedlare av lycklighet är livserfarenhetsdiversitet m. Vi för då in m i vårt exempel och konstaterar att m är positivt korrelarad med x,
m = m002 + kmx02*x + e2 , kmx02 > 0 ,
och y positivt korrelerad med livserfarenhetsspridning m,
y = y003 + kym03*m + e3 , kym03 > 0 .
Vi studerar de tre tvådimensionella modellerna och den fulla tredimensionella modellen för att försöka undersöka till hur stor del m eventuellt kan vara förmedlaren av x till y. Om lyckligheten från x till y helt förmedlas av m så förväntar vi oss att den positiva totala derivatan kyx01 i modell1 helt och hållet skall gå till den partiella derivatan kym4 i modell4 medan den partiella derivatan kyx4 blir noll (inget direkt beroende av y på x). Om vi å andra sidan har en betydande men icke fullständig minskning av från den totala derivatan kyx1 till den partiella derivatan kyx4 så säger vi att vi har partiell mediation av x via m.
(Numreringen är här inte exakt densamma som Conways. Detta för att jag i detta referat vill ha namngett/numrerat alla de 4 modellerna. Tror inte att den skillnaden skall skapa någon förvirring för de som både läser detta referat och tittar på Conways föreläsningsvideor, men kan kanske vara bra att uttryckligen skriva ut. Min notation är såhär: Sista siffran visar vilken modell, denna föregås av "0" för befolkningsvärde (statistisk parameter) och inte om stickprovsvärde (statistisk statistikum). Start "y0" är "intercept", start "k" är lutningskoefficient, följt av vilken variabel som påverkas följt av vilken variabel som påverkar.)

På samma sätt som för föreläsning 9 så har jag inte tillgång till Conways datafil utan har gjort en egen som ger väsentligen samma statistikavärden som Conways. Spara nedanstående data som fil "happydata1.txt" i din R-arbetskatalog

Kod: Markera allt

extrovert        diverse          happy
3.77171590160519 2.94035448100095 1.67425553858362
4.65733583606174 1.39992685106681 3.33235982550761
3.57491934843446 1.8779512648229 2.17145263247972
2.82044646890961 1.32835819645953 1.90110969645437
3.57012719351487 1.66659427328463 3.20858277504772
2.97169426544923 1.75620654569014 2.87989922763817
4.86992368502599 3.06476825682283 2.85939257697992
3.73024732844589 4.36464873242196 3.49098025557653
4.35128471959752 2.41101451397218 2.60816158604943
3.56390641422593 1.17969846451887 2.89470010412478
3.54848365714029 2.25288005677965 3.78141201405255
4.01733593382583 3.58343567727799 2.0576895172543
4.73858024745194 1.56893500351037 2.90707268438808
4.65237522587296 3.03386548078654 2.84277411454294
3.36613294636945 2.37939295045914 3.47623461561912
3.70144104738738 3.90373857818251 3.49697436142161
3.44513804896316 2.99141908473577 1.73392673320422
4.58328292007509 2.64326617325931 2.25150995676811
3.0645222057588 3.03173122191412 4.2330495004882
4.06033985233317 2.929479729968 4.09953716184846
3.41665257550618 2.48895928479205 2.53970471272599
4.01584652157535 3.2427427708946 1.0681806637312
2.46160216648512 2.53295969152855 2.37257856441498
3.5327747361467 3.89456851445965 3.71164956747389
3.58177049336884 2.01052455340551 3.09887982469481
4.72637700583843 3.32958990215983 3.16618103881063
4.0426258131694 2.89786920130354 3.95087195169231
3.1804495844832 2.82016839563069 2.80817590808157
4.00376876546073 2.82742874315467 5.14331273755601
4.66679465779522 0.867497886456722 3.58977637514011
4.1602624433483 2.26729654077925 1.4809758209246
4.39302610567431 3.73218148019523 3.36387896757699
3.58628701558705 3.63614514032579 1.49660057590486
3.67835955304312 2.9555527483425 3.18385728486578
4.02064630838321 2.49623920570556 1.71865055708073
3.47472117924617 2.66050209651213 2.69756718667445
3.79543385407053 1.91640804025956 2.6963066637985
4.11857754112768 2.97477059896957 3.33868355497543
4.466211334003 2.72508053326509 4.06851404290163
4.45620981308243 2.97742671870459 2.39109660060061
4.82671353353241 3.54108452286744 5.79899879792458
4.35411700659957 2.95952968515752 1.82612765900076
4.51711687649396 2.71415869176687 1.91536627040121
4.03129945271589 2.8375437757888 4.19039257930195
4.62347179981937 0.390170646978623 2.43331337550895
3.65691402495497 2.2692084092106 3.73665492020593
3.73153908447628 3.13226240310441 4.4801277046793
3.43407259608014 3.97557244995967 3.6808420200514
4.04973715253689 2.65541105242177 2.24394291439486
4.16119461189504 3.35396521471637 3.32190215563027
2.56217364694275 2.62301908117284 1.87912955558343
3.60852995989904 2.11299054962208 2.58923128648223
4.19835273092231 2.29872670668824 2.83653194512855
4.7040117051846 2.93791650757911 3.55507836735645
4.01070649805719 2.62377689768104 3.05604541334595
4.51605461502656 3.14300943966844 2.37554709918727
4.71049343257318 2.10096304293971 2.3598316580712
3.34406224310317 3.54734352381464 2.63807766175118
1.41589551062321 0.932214059819646 1.81461378924791
2.06418519732131 3.66363505257012 2.26146260845212
3.16269474450495 1.42935061436527 3.4584527100275
4.44259837883274 4.25841781400329 2.95241179759256
3.37533309256904 2.34244297995549 1.74642127388348
2.90130296977509 2.03362402215291 4.54380092308253
4.89236132266647 4.22266992850413 4.21115851312065
4.48746154897556 3.4030161618828 1.58905922573084
4.88135655478919 4.05499187408953 4.71300624251385
3.41925072221653 4.50979837877814 3.03964327343718
4.3421254924881 5.00676910943344 3.62048838086702
4.37300047946304 1.48616217630235 2.96404042408328
3.37399446329409 2.68285584996341 3.55169699226116
3.16435497444442 3.06866471521483 4.56035195503543
3.67488396301225 3.03108387480124 3.07775665083469
4.38476482195799 1.65924184942617 3.50892103597074
3.25336127333993 1.49853411763289 2.03439188816919
1.87455855706621 1.10444856122125 2.90612242758172
3.82727667783023 2.32453754493529 3.32725594246541
4.13795804819939 4.17854066888244 2.5417699761667
3.72099252870974 2.88957336936472 2.77417040647826
3.33293538368277 2.86914513221814 1.76316371383064
3.36024207558353 1.7708513958894 4.63374889528841
3.16013822858987 3.24548177582491 4.97904867530442
4.37419367879931 2.84426424363869 5.41137815081389
4.4696367066844 3.61217098904063 4.98212613925016
3.35780277798493 3.30658752943633 4.03189881915915
4.28838207710274 3.04016896723146 4.62489289011802
4.54415586004596 2.28879527268348 4.93306663265565
3.4980196456541 3.91041266418311 3.21634917096818
4.56669166977442 2.28470630716113 3.19259705128698
4.39429378841135 2.35078754243594 4.98218790261194
4.94876353631705 4.94995734987842 4.90733052959238
2.1194975610057 2.47450861641138 2.94498083174134
3.70038714368787 1.80147280967926 3.91814883638813
4.68851562824613 3.13067757855741 2.96983572912522
3.98846959417237 3.54223830625475 5.10102997569381
3.08574337801291 1.81955607473072 3.12242429527945
3.39909905134602 1.84120967489678 3.01263122938623
3.63119487546591 1.43785089549279 2.59068675078673
4.77449280558429 2.83273866309002 2.93034833625828
3.40648949492319 2.40933473892314 4.09482382390121
3.16978170932425 3.64370190942735 2.74710334392616
2.32299138324285 2.26197844335873 2.45875512496098
3.54495813914002 3.77821309562657 3.92137671969787
4.10746367356493 1.35561316368529 3.26879082069217
2.91553414674196 2.47045676602996 4.21343896623331
3.82371269639227 2.52306499683427 3.18981779867088
3.07423233134249 2.0558006041687 1.41540158160014
2.93247681286697 3.46546968951615 3.43497695480535
4.19000271903568 2.6879403761342 4.30259717926551
4.35894006855947 0.824976075229998 3.27477199144613
3.74563397876362 3.59367910966985 3.6462136197195
4.42108319536899 4.03632508087017 4.70873689100425
4.32939064376327 3.05543049701309 3.74375429171601
4.60921338367181 3.76287590274752 4.51384263432808
2.6914181161024 0.142948271570051 2.60772958413813
4.2394458942657 1.32531624729968 2.7979116614417
3.98739148565557 2.94873197080829 2.81377911297502
4.41200702684348 1.64072789421425 4.2078959716882
3.11222271652037 2.17111245367335 2.39996411976763
4.40609409582682 3.95088426077631 3.18239041688968
3.10610774932923 1.90002412012959 2.93037565487537
2.89937451972747 1.46381053878313 2.9423650189134
3.1370095641272 3.5601449501991 4.14343289295295
3.9035669658863 3.41934778389633 4.46364986915112
4.01985516450192 2.41860437620285 3.71566059844144
4.37353603591536 2.8401582998218 4.172932610688
3.30303353978392 1.82523971818834 3.41766068504113
3.05086604723221 1.86837106509338 2.6546337427821
3.11566166650879 2.63113661558517 2.37394086592809
4.28874232676956 2.01448448235857 4.93085990961547
2.80427347712124 2.9185795789789 2.34916011332102
3.84553383782721 3.57113625476083 3.22065780517946
3.94820601910346 1.0242323423068 2.47876520912816
3.91302689930921 3.95831989136163 2.45861189616945
3.54583188023417 3.28949768780089 4.15692871620355
4.15993057882363 2.37479635904797 2.54218313264677
3.83518225573286 1.10665550874778 3.68542950020773
3.5814425398873 2.52776404682711 2.38556126925712
4.22874021423358 1.54483809926896 3.04686172250814
4.7765737995604 3.8169212268322 3.31200187791575
3.93802661991529 4.61125961526689 2.50633184761194
3.63801951457272 3.67180598654703 2.43867932505218
3.9205944759439 0.947015959089219 2.44252233204673
3.37311402272463 4.44613553718062 2.49769462483467
3.03061420983392 2.25991854459149 4.45390133165886
3.19893007774288 2.26424793145672 3.90820110985553
3.32124430030943 2.15204508312187 2.55681580483691
3.48960814586489 1.29653131220836 3.63904751016126
3.65796129189363 2.83080378843048 3.9338474230414
4.70762042040443 3.07994327614327 2.95079921019142
3.21257901232546 2.68256806890625 2.96483310348132
4.50560549452394 2.45963924592861 1.93313001211574
4.64599504816926 2.8783439122394 4.11319056778611
3.23451895029197 1.69334067676358 4.14786984290969
2.93914940501544 2.68298431609043 3.62524739556392
4.09799356803468 2.20489709347714 3.36569092435355
3.66418603768928 3.16512573739246 3.56827754666566
4.17308314952292 2.81119227665379 2.24086359595373
2.83996614360454 3.16422000652153 4.03613704182748
2.78541834228964 2.47914914655134 4.81671011211284
2.57545192006865 2.91784277530731 3.13766182577065
4.04419114774745 3.34343351662978 3.57458543732338
3.3301362148158 1.97618008415599 2.06478411419715
4.62239194075189 3.72122305648006 4.70856866803549
3.55908333527934 2.98940114490306 4.40475388228262
3.70004753194014 2.6238996551375 3.02757065747393
4.91069549912686 4.37283130520485 4.34061123476873
2.59868133834551 1.96815915532661 3.09124948006962
3.1435590116246 2.89451788498462 3.4842814843762
4.61651833694916 3.45419742541063 3.16631122418543
2.54080278464609 3.18325892788841 1.64261463793752
3.64406232269902 2.35496871218167 5.15782597268875
3.91099676119235 2.36533885498311 1.77702312464375
4.45401115291753 2.79390591451635 2.05177115585107
4.80807056483892 1.83990701700671 2.4543526886338
3.70136890272739 2.9833022584105 2.26816639103744
4.29680698671058 4.1839094452748 5.56607217789215
3.15540363730884 2.11864555622506 1.92594607994257
3.47835753145446 1.87986490194014 3.24473681454739
3.36210212208584 2.49891530053274 2.99630114919246
3.92457639966177 4.85243364566096 4.53146911679732
3.0912328481386 3.5898947250789 4.54402277518522
3.00824116334691 2.90753175138219 2.48335421732034
4.32818957873334 2.57680687617778 3.72586076417981
3.40336335329629 1.5888594486735 2.29903599060654
3.94338373585649 4.07714231893656 1.93157960695152
4.46472351159435 1.78259227183761 3.13519067620315
4.90578486904994 1.8624667244723 3.90461738669771
och läs in den som en dataram "happydata1" i R.
> happydata1 <- read.table("happydata1.txt",header=TRUE)
> N <- nrow(happydata1)
> N
[1] 188
> ncol(happydata1)
[1] 3
> names(happydata1)
[1] "extrovert" "diverse" "happy"
happydata1 har 188 rader, och 3 kolumner med namnen "extrovert", "diverse", "happy". (Att antalet rader är lika med 188 betyder att det finns 188 datatripplar, namnen ingår inte i dataramens rader de ligger för sig själva (s.k. metadata).)

Vi börjar med att studera lycklighet som funktion av extroversion
> modell1 <- lm(happydata1$happy~happydata1$extrovert)
> summary(modell1,correlation=TRUE)

Call:
lm(formula = happydata1$happy ~ happydata1$extrovert)

Residuals:
Min 1Q Median 3Q Max
-2.22736 -0.63269 -0.08444 0.64822 2.28027

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.1902 0.3922 5.584 8.24e-08 ***
happydata1$extrovert 0.2752 0.1022 2.693 0.00773 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9467 on 186 degrees of freedom
Multiple R-squared: 0.03753, Adjusted R-squared: 0.03236
F-statistic: 7.253 on 1 and 186 DF, p-value: 0.007726

Correlation of Coefficients:
(Intercept)
happydata1$extrovert -0.98

> plot(happydata$extrovert,happydat$happy)
> abline(modell1)

Vi ser att lyckligheten verkligen tenderar att öka med extroversionen. Detta stickprov skattar att lyckligeheten i genomsnitt ökar med 0,28 lycklighetsenheter per extroversionsenhet. Det är den skattade effektstorleken i absoluta enheter. Den skattade relativa effektstorleken är lika med Pearsons korrelationskoefficient som är lika med multippla korrelationskoefficienten för enkel regression, som är lika med kvadratroten ur bestämningskoefficienten (eller minus kvadratroten ur bestämningskoefficienten för negativ lutningskoefficient, men här har vi positiv lutningskoefficient), d.v.s. här sqrt(0,03753)
> sqrt(0.03753)
[1] 0.1937266
> cor(happydata1$happy,happydata1$extrovert)
[1] 0.1937256
Bestämningskoefficienten själv är 0,03753, endast 3,7% av variansen i detta stickprov förklaras av modell1, en tämligen måttlig förklaringsgrad eller effektstorlek.

Standardfelet för lutningskoefficienten är 0,1022. Inte mycket mindre än lutningskoefficineten själv tyvärr. Men åtminstone någerlunda mycket mindre, så resultatet har visserligen en icke försumbar statistisk osäkerhet, men inte värre än att vi kan med någerlunda statistisk signifikans säga att vi har en positiv korrelation mellan lycklighet och extroversion. R/summary ger ett p-värde på 0,77%, vilket här innebär att om befolkningen skulle ha noll korrelation mellan lycklighet och extroversion så skulle vid ett oberoende omtest sannoliketen att vi skulle få en skattning av lutningskoefficienten vars absolutbelopp var större än eller lika med 0,2752 vara lika med 0,77%. För att avgöra om det är troligt att vi verkligen har en _positiv_ korrelation skulle vi hellre vilja ha det ensidiga p-värdet
p_{enkelsidig} = P(kyx1>0|kyx01=0)
istället för det dubbelsidiga p-värde
p_{dubbelsidig} = P(|kyx1|>0|kxy01=0)
som R/summary ger oss. Eftersom samplingsfelet bör vara till en god approximation normalfördelat (ty N=188 är ganska stort) och normalfördelningen är symmetrisk kring medelvärdet (här: noll) så är det ensidiga p-värdet till en god approximation halva det dubbelsidiga, d.v.s. 0,39%. D.v.s. om befolkningslutningskoefficienten vore lika med noll så skulle sannolikheten att vid ett oberoende test få en stickprovslutningskoefficient större än eller lika med +0,28 lycklighetsenheter per extroversionsenhet vara lika med 0,039%. Eftersom det är en såpass låg sannolikhet så verkar det då troligare att befolkningslutningskoefficienten är större än noll.

Men ett av problemen med p-värde är att det inte säger oss någonting om hur stor den skall vara för olika "trolighet". Genom att t.ex. beräkna olika konfidensintervall kan vi få en uppfattning om detta. P_k-konfidensintervallet är det minsta intervall kring det skattade värdet för kyx01 (d.v.s. vårt erhållna värde för kyx1 i detta test) som det skattade värdet för kyx01 skall hamna i med sannolikheten P_k vid ett oberoende omtest givet att lutningskoefficienten för befolkningen kyx01 vore lika med det värde kyx1_{"vårt test"} som vi skattade i vårt nuvarande test,
P_k = P(kyx1_{omtest} ligger i konfidensintervallet|kyx01=kyx1_{vårt test})
N är ganska stort så det bör vara rimligt att antaga att samplingsfelet är approximativt normalfördelat. Vi har då (100-5)%-konfidensintervallet = 95%-konfidensintervallet = kyx1 +/- 2*standardfelet = [+0,07, +0,48][lycklighetsenheter/extroversionsenhet] och 99,7%-konfidensintervallet kyx1 +/- 3*standardfelet = [-0,03, +0,58][lycklighetsenheter/extroversionsenhet].
Det kan också vara intressant att se konfidensintervallet med motsvarande konfidens som vårt p-värde, (100-0,39%)-konfidensintervallet = 99,61%-konfidensintervallet.
> pnorm(2.885,mean=0,sd=1)-pnorm(-2.885,mean=0,sd=1)
[1] 0.9960859
så detta konfidensintervall är kyx1 +/- 2,885*standardfelet = [-0,02, +0,57][lycklighetsenheter/extroversionsenhet]


Vi tittar nu på livserfarenhetsvariation som funktion av extraversion
> modell2 <- lm(happydata1$diverse~happydata1$extrovert)
> summary(modell2,correlation=TRUE)

Call:
lm(formula = happydata1$diverse ~ happydata1$extrovert)

Residuals:
Min 1Q Median 3Q Max
-2.5496 -0.5885 0.0310 0.5488 2.1468

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.62789 0.37237 4.372 2.05e-05 ***
happydata1$extrovert 0.28374 0.09702 2.924 0.00388 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8987 on 186 degrees of freedom
Multiple R-squared: 0.04396, Adjusted R-squared: 0.03882
F-statistic: 8.553 on 1 and 186 DF, p-value: 0.00388

Correlation of Coefficients:
(Intercept)
happydata1$extrovert -0.98

> plot(happydata1$extrovert,happydata1$diverse)
> abline(modell2)

Resultatet är liknande som för modell1. En positiv korrelation mellan livserfarenhetsvariation och extroversion av förmodligen måttlig effektstorlek med hyffsad stark men inte mycket stark statistisk signifikans. (Se själv närmare på resultatet.)
Vi går så till modell3 och tittar på lycklighet som funktion av livserfarenhetsvariation
> modell3 <- lm(happydata1$happy~happydata1$diverse)
> summary(modell3,correlation=TRUE)

Call:
lm(formula = happydata1$happy ~ happydata1$diverse)

Residuals:
Min 1Q Median 3Q Max
-2.28200 -0.67715 -0.05478 0.70735 2.38282

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.63278 0.21450 12.27 <2e-16 ***
happydata1$diverse 0.22123 0.07525 2.94 0.0037 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9433 on 186 degrees of freedom
Multiple R-squared: 0.0444, Adjusted R-squared: 0.03927
F-statistic: 8.643 on 1 and 186 DF, p-value: 0.0037

Correlation of Coefficients:
(Intercept)
happydata1$diverse -0.95

> plot(happydata1$happy,happydata1$diverse)
> abline(modell3)

Även här ett liknande resultat. Så lycklighet tenderar att öka med extroversion och med liverfarenhetsspridning. Men liverfarenhetsspridning tenderar att öka med extroversion. Kanske lycklighetsökningen med extroversion är medierad av liverfarenhetsspridningen? Som ett test av denna hypotes så modellerar vi lycklighet som funktion av extroversion och liverfarenhetsvariation
> modell4 <- lm(happydata1$happy~happydata1$extrovert+happydata1$divers)
> summary(modell4,correlation=TRUE)

Call:
lm(formula = happydata1$happy ~ happydata1$extrovert + happydata1$divers)

Residuals:
Min 1Q Median 3Q Max
-2.31617 -0.64119 -0.02895 0.66285 2.17872

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.88612 0.40648 4.640 6.57e-06 ***
happydata1$extrovert 0.22224 0.10315 2.155 0.0325 *
happydata1$divers 0.18680 0.07622 2.451 0.0152 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.9342 on 185 degrees of freedom
Multiple R-squared: 0.0678, Adjusted R-squared: 0.05772
F-statistic: 6.727 on 2 and 185 DF, p-value: 0.001513

Correlation of Coefficients:
(Intercept) happydata1$extrovert
happydata1$extrovert -0.85
happydata1$divers -0.31 -0.21

Vi ser att den totala derivatan i modell1 +0,28 lycklighetsenheter/extroversionsenhet har misnkat till den motsvarande partiella derivatan +0,22 lycklighetsenheter/extroversionsenhet i modell4.
(Och den totala derivatan i modell3 +0,22 lycklighetsenheter/livserfarenhetsvariationsenhet till motsvarande partiella derivata +0,19 lycklighetsenheter/livserfarenhetsvariationsenhet i modell4. Notera också att modell4 har betydligt högre förklaringsgrad än modell1, modell1 uppskattar vi förklara 3,2% av variationen i lycklighet medan modell4 uppskattar vi förklara 5,8%.)

Så en inte dominerande men ändå inte försumbar del av lycklighetens ökning med extroversionen verkar kunna vara medierad av liverfarenhetsvariationen. Ökningen av lycklighet med extroversion verkar vara partiellt medierad av livserfarenhetsvariation.

Den totala ökningen av lycklighet med extroversion i modell1 kan vi beskriva som en summa av den direkta/rena/partiella effekten av ökning av lycklighet med extroversion i modell4 plus den indirekta effekten medierad av liverfarenhetsspridningen. Den indirekta effekten är den direkta/rean/partiella effekten av hur lyckligheten ökar med livserfarenhetasvariationen i modell4 gånger hur mycket livserfarenhetsvariationen ökar med extroversionen i modell2.
kyx1 = kyx4+kym4*kmx2 = 0,22224+0,18680*0,28374 = 0,2752 [lycklighetseheter/extroversionsenhet] ,
d.v.s. samma resultat som vi erhöll direkt från modell1.

Vi skall dock vara försiktiga med att dra slutsatser om [några vissa] kausala påverkningar från detta resultat. För det första är värdena på lutningskoefficienterna ovan värden för stickprov. Motsvarande värden för befolkningen är lika med stickprovsvärdena plus okända slumpmässiga samplingsfel. För det andra, så även om värdena skulle ha försumbar statistisk osäkerhet, så skulle vi ändå inte kunna säga något säkert om vilka kausala påverkningar som ger upphov till dessa korrelationer. Dels kan det finnas ytterligare variabler än de som vi har med i modellerna som påverkar flera variabler och orsakar korrelationer mellan de variabler vi har med i dessa modeller (utan att vi har någon kausal påverkan mellan de variabler vi har med, eller om vi har kausal påverkan mellan de variabler vi har med som gör korrelationer vi ser starkare eller svagare än de skulle vara utifrån enbart den kausala påverkan mellan de variabler vi har med). Och även om det inte skulle finnas påverkan från variabler som vi inte har med i våra modeller så kan vi inte enbart från denna studie säga i vilken riktning de kausala påverkningarna är, t.ex. om det är extroversion som kausalt påverkar livserfarenhetsvariation eller livserfarenhetsvariation som påverkar extroversion. (Lika gärna som vi skapade modell1 från modell4 och modell2, så skulle vi kunna skapa modell3 från modell4 och en modell med extroversion som funktion av livserfarenhetsspridning.
> lm(happydata1$extrovert~happydata1$diverse)
Call:
lm(formula = happydata1$extrovert ~ happydata1$diverse)

Coefficients:
(Intercept) happydata1$diverse
3.3597 0.1549
> 0.18680+0.22224*0.1549
[1] 0.221225
d.v.s. samma värde som vi fick i modell3.)
Men resultatet från denna studie är ändå konsistenta med att extroversion tenderar att öka lycklighet med en partiell mediation via den kausala vägen att extroversion dels ger en direkt kausal påverkning att öka lycklighet dels en indirekt kausal påverkan där extroversion tenderar ökar liverfarenhetsvariation och livserfarenhetsvariation ökar lycklighet. Vi skulle hypotetiskt kunna fått ett resultat som var inkonsistent med den hypotesen, och därför ger resultatet av denna studie en ökad trovärdighet för hypotesen, om än fortfarande en begränsad trovärdighet.

Vad gäller statistisk signifikans för mediation så ligger vi här litet i ett gränsfall. De enskillda modellerna har hyffsat liten statistisk osäkerhet men inte mycket liten. Standardfelen är alla ungefär 0,1. Tittar vi på skillnaden mellan den totala derivatan för y med avseende på x i modell1 och partiella derivatan för y med avseende på x i modell4 så är den bara 0,06, något mindre än typiska standardfel. Vi verkar ha kanske en mediation men inte riktigt bra statistiskt säkerställd. Helst skulle vi ha en större studie (större N) än den vi har här. Det kan dock möjligen finnas korrelationer mellan samplingsfelen för kyx1 och kyx4 som gör mediationen något mindre statistisk osäker än vid första anblicken av att bara jämföra skillnaden mellan kyx1 och kyx4 med standardfelen. Conway visar hur man kan göra ett NHST-typ av test för den statistiska sigifikansen för mediation med s.k. Sobeltest. Men dels finns detta inte i R självt utan man måste ladda in ett extra programpaket, dels förklarar han inte hur det fungerar. Så vi lämnar det därhän tillsvidare. (Det visar sig att Sobeltestet ger ett ensidigt p-värde på ungefär 3% så mediationen är statistiskt signifikant enligt standardkonventionen. Men det är ändå ett såpass högt värde att det bekräftar vår preliminära slutsats att vi från denna studie endast preliminärt konstaterar mediation, och försöker följa upp med en större studie.)



(Jag hoppade visst över väganalysmetoder. Men det enda Conway sade om det var några diagram som ändå jag inte tyckte var speciellt upplysande som visade hur de olika statistiska variablerna färdades mellan modellerna.)
"philosophy without science is blind, science without philosophy is lame" (tonyf)

Skriv svar