opgaver:Uge5

(Difference between revisions)
Jump to: navigation, search
Line 55: Line 55:
 
{{hidden end}}
 
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
Først skal dataen centreres, så to nye datasæt defineres ved
+
Covariansen mellem to vektorer er givet ved $\Sigma_{i,j} = \text{cov}(X_i,X_j) = E[(X_i-\mu_i)(X_j-\mu_j)]$, hvor $E[\cdot]$ er forventningsværdien - simpelthen gennemsnittet. Dermed kan man manuelt udregne covariansmatricen ved først at udregne
  
 
:<code>X1 = A - mean(A);</code>
 
:<code>X1 = A - mean(A);</code>
 
:<code>X2 = P - mean(P);</code>
 
:<code>X2 = P - mean(P);</code>
  
Herefter kan man simpelthen manuelt indsætte i kovarians matricen,
+
og kan man simpelthen manuelt indsætte i kovarians matricen,
  
 
:<code>C_man = [ mean( X1 .* X1 )  mean( X1 .* X2 ) ; ...</code>
 
:<code>C_man = [ mean( X1 .* X1 )  mean( X1 .* X2 ) ; ...</code>
 
::<code>mean( X2 .* X1 )  mean( X2 .* X2 ) ];</code>
 
::<code>mean( X2 .* X1 )  mean( X2 .* X2 ) ];</code>
  
og tilsvarende kan man manuelt finde den lineære korrelation med
+
Tilsvarende kan man manuelt finde den lineære korrelation med
  
 
:<code>r_man = mean( X1 .* X2 ) / ( std(A) * std(P) );</code>
 
:<code>r_man = mean( X1 .* X2 ) / ( std(A) * std(P) );</code>
 +
 +
Værdien af <code>r_man</code> er ca. 0.45, så de variable er korrelerede, men ikke super-godt.
 
{{hidden end}}
 
{{hidden end}}
  
Line 73: Line 75:
 
Beregn kovariansmatricen og korrelationsmatricen med MATLAB's indbyggede funktioner, og sammenlign resultatet med dine egne beregninger.
 
Beregn kovariansmatricen og korrelationsmatricen med MATLAB's indbyggede funktioner, og sammenlign resultatet med dine egne beregninger.
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
+
Læs om funktionerne <code>cov</code> og <code>corr</code> i MATLAB hjælpen.
 
{{hidden end}}
 
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Man bruger simpelthen de to funktioner <code>cov</code> og <code>corr</code> på <code>A</code> og <code>P</code> vektorerne,
  
 +
:<code>C_aut = cov(A,P);</code>
 +
:<code>r_aut = corr(A,P);</code>
 
{{hidden end}}
 
{{hidden end}}
  
Line 82: Line 87:
 
Tag logaritmen af begge værdier, og plot resultatet igen. Diskutér forskellen - er korrelationen tydeligere nu? Beregn korrelationen for de logaritmiske værdier. Hvorfor er korrelationen anderledes end i spørgsmål 2?
 
Tag logaritmen af begge værdier, og plot resultatet igen. Diskutér forskellen - er korrelationen tydeligere nu? Beregn korrelationen for de logaritmiske værdier. Hvorfor er korrelationen anderledes end i spørgsmål 2?
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
[[File:uge5fig2.png|frame|Antal indbyggere som en funktion af landeareal, logaritmisk.]]
 +
Man plotter simpelthen
  
 +
:<code>figure</code>
 +
:<code>plot(log(A),log(P),'.')</code>
 +
:<code>xlabel('log( lands størrelse [miles^2] )')</code>
 +
:<code>ylabel('log( antal indbyggere )')</code>
 +
:<code>title('Dobbeltlogaritmisk sammenhæng')</code>
 +
 +
Nu er det meget nemmere at se på data, da den tydeligvis er mere eksponentielt fordelt. Ud fra figuren forventer man også at korrelationen mellem de logaritmiske vektorer er mere lineær, da den faktisk ser lineær ud nu!
 +
 +
:<code>C_log = cov(log(A),log(P));</code>
 +
:<code>r_log = corr(log(A),log(P));</code>
 +
 +
Det viser sig at <code>r_log</code> er omkring 0.86, hvilket præcis er som forventet - korrelationen er bedre for de logaritmiske.
 
{{hidden end}}
 
{{hidden end}}
  
 
=== Spørgsmål 5 ===
 
=== Spørgsmål 5 ===
Lav et lineært fit af resultatet i spørgsmål 4. Hvad er $\chi^2$ for fittet? Beskriver en lineær relation forholdet?
+
Lav et lineært fit af resultatet i spørgsmål 4. Hvor godt er fittet? Beskriver en lineær relation forholdet?
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
[[File:uge5fig3.png|frame|Antal indbyggere som en funktion af landeareal, logaritmisk, sammen med et lineært fit.]]
 +
Fittet laves bare med
  
 +
:<code>[cfun good] = fit(log(A),log(P),'poly1');</code>
 +
 +
og kan plottes oven i den forrige figur med
 +
 +
:<code>hold on</code>
 +
:<code>plot(log(A),cfun(log(A)),'-g')</code>
 +
 +
For at finde ud af hvor godt fittet er, kan man udregne $\chi^2$ for det. Man kan også bruge den $R^2$ værdi som <code>fit</code> funktionen giver. Denne er givet i
 +
 +
:<code>good.rsquare;</code>
 +
 +
Denne viser sig at være meget tæt på 1, hvilket fortæller at fittet er ret godt.
 +
 +
Altså er en lineær relation god til at beskrive forholdet mellem logaritmen af antallet af indbyggere i et lang og logaritmen af arealet af landet.
 
{{hidden end}}
 
{{hidden end}}
  
Line 100: Line 135:
 
Indlæs datasættet og beregn korrelationerne mellem de to variable. Er variablene korrelerede?
 
Indlæs datasættet og beregn korrelationerne mellem de to variable. Er variablene korrelerede?
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Først indlæses datasættet med
  
 +
:<code>tal = importdata([datadir,'opg2data.txt'],',');</code>
 +
:<code>x = tal(:,1);</code>
 +
:<code>y = tal(:,2);</code>
 +
 +
Korrelationerne mellem de to variable findes med de indbyggede MATLAB funktioner,
 +
 +
:<code>C = cov(x,y);</code>
 +
:<code>r = corr(x,y);</code>
 +
 +
Det viser sig at der er cirka 1.1 % korrelation mellem variablene, og derfor er de slet ikke korrelerede!
 
{{hidden end}}
 
{{hidden end}}
  
Line 106: Line 152:
 
Lav et scatter plot af de to variable. Ved visuel inspektion, forklar hvorfor der ikke var en korrelation mellem de to akser i beregningen.
 
Lav et scatter plot af de to variable. Ved visuel inspektion, forklar hvorfor der ikke var en korrelation mellem de to akser i beregningen.
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
[[File:uge5fig4.png|frame|Disse variable er ikke lineært korrelerede.]]
 +
Plottet laves simpelthen med koden
  
 +
:<code>figure</code>
 +
:<code>plot(x,y,'.')</code>
 +
:<code>xlabel('data fra første kolonne')</code>
 +
:<code>ylabel('data fra anden kolonne')</code>
 +
:<code>title('Scatter plot af data')</code>
 +
 +
Dette plot er vist her til højre.
 +
 +
Det er tydeligt at se at der er en eller anden sammenhæng mellem de to akser, men den er absolut ikke lineær. Den lineære korrelation tager kun (logisk nok) linearitet med i beregningen, så alle højere ordens korrelationer bliver ikke fundet. For at kunne se højere ordens korrelationer skal man bruge mere avancerede statistiske værktøjer, som der bliver taget hul på i næste opgave.
 
{{hidden end}}
 
{{hidden end}}
  
Line 118: Line 175:
 
Der er tydeligvis en afhængighed mellem $x$- og $y$-aksen. I hvilke tilfælde vil en lineær korrelation være et acceptabelt mål for korrelationen mellem to værdier?
 
Der er tydeligvis en afhængighed mellem $x$- og $y$-aksen. I hvilke tilfælde vil en lineær korrelation være et acceptabelt mål for korrelationen mellem to værdier?
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
+
Lineær korrelation er et acceptabelt mål for korrelation i tilfælde hvor der er overordnet linearitet, uden symmetrier og højere-ordens effekter.
 
{{hidden end}}
 
{{hidden end}}
  

Revision as of 14:19, 7 March 2012

I denne uge skal I arbejde med lidt mere avanceret statisk, som en forsmag på hvad I kan lære i mere avancerede statistik-kurser, som f.eks. Anvendt Statistik, der afholdes i blok 1.

Som en forberedelse på at kunne lave disse opgaver, skal I læse et lille dokument skrevet af Morten Dam Jørgensen, der desuden også lavede nedenstående opgaver.

Det kan også hjælpe at læse nogle Wikipedia-sider om emnerne, som f.eks.


Contents

Opgave 1 - Lineær korrelation

Disse øvelser viser hvordan lineære korrelationer kan beregnes og visualiseres, metoder som er anvendelige på det meste data med flere parametre.

  • Du skal starte med at hente datasættet lande.txt, der stammer fra [1].

Spørgsmål 1

Start med at indlæse datafilen, og plot så populationen i forhold til landenes størrelse.

Spørgsmål 2

Beregn den linære korrelation manuelt (altså uden at bruge de indbyggede MATLAB funktioner til at gøre det). Er de to variable korrelerede?

Spørgsmål 3

Beregn kovariansmatricen og korrelationsmatricen med MATLAB's indbyggede funktioner, og sammenlign resultatet med dine egne beregninger.

Spørgsmål 4

Tag logaritmen af begge værdier, og plot resultatet igen. Diskutér forskellen - er korrelationen tydeligere nu? Beregn korrelationen for de logaritmiske værdier. Hvorfor er korrelationen anderledes end i spørgsmål 2?

Spørgsmål 5

Lav et lineært fit af resultatet i spørgsmål 4. Hvor godt er fittet? Beskriver en lineær relation forholdet?


Opgave 2 - Flere korrelationer

Disse øvelser viser mere med korrelationer.

Spørgsmål 1

Indlæs datasættet og beregn korrelationerne mellem de to variable. Er variablene korrelerede?

Spørgsmål 2

Lav et scatter plot af de to variable. Ved visuel inspektion, forklar hvorfor der ikke var en korrelation mellem de to akser i beregningen.

Spørgsmål 3

Datasættet er genereret med følgende udtryk:

n = 2000;
x = linspace(-1, 1, n);
y = - 5 * (x.^2 - 1/2).^2 + unifrnd(-1, 1, [1 n])/3;

Der er tydeligvis en afhængighed mellem $x$- og $y$-aksen. I hvilke tilfælde vil en lineær korrelation være et acceptabelt mål for korrelationen mellem to værdier?


Opgave 3 -

Disse øvelser handler om radial acceleration (med Principal Component Analysis).

  • Du skal starte med at hente datasættet ipod_4.txt, der er et datasæt taget med app'en iSeismometer på en Ipod Touch som del af et eksperiment på kurset i 2011.

Spørgsmål 1

Indlæs datasættet. De fire variable er hhv. acceleration langs $x$-, $y$- og $z$-akserne samt tid i sekunder. Plot de tre accelerationskomponenter som funktion af tiden.

Spørgsmål 2

I dette spørgsmål skal du finde de dominerende komponenter, ved at benytte PCA metoden beskrevet afsnit 2 i multivariatstatistik.pdf dokumentet. For at hjælpe dig lidt på vej er spørgsmålet delt op i mindre dele:

Del 1

Transponér input matricen sådan at den er $M \times N$, hvor $M$ svarer til antallet af parametre og $N$ antallet af målinger. Centrér derefter dataen ved først at beregne middelværdien for de fire parametre, og fratræk denne de enkelte komponenter.

Del 2

Beregn kovariansmatricen af den centrerede data, og beregn så egenværdierne og egenvektorerne af den, med den indbyggede funktion i MATLAB. Gem diagonalen af egenværdimatricen i en vektor ($M \times 1$).

Del 3

Sorter egenværdierne efter faldende orden, og gem de indekser som sorteringsmetoden retunerer i en vektor.

Del 4

Sorter egenvektorerne og egenværdierne med indeks-vektoren.

Del 5

Projektér den oprindelige data langs den nye basis (egenvektor matricen).

Spørgsmål 3

Plot hvert komponent af det transformerede datasæt som funktion af tiden. Ved at sammenligne værdierne fra egenvektorne med de fire plots, forklar hvad de enkelte komponenter beskriver.

Spørgsmål 4

(Frivillig) Benyt MATLABs indbyggede PCA rutiner i stedet:

[C, latent, explained] = pcacov(cov(data'))
biplot(egenvec(:,1:2), 'scores', signals(1:2,:)', 'varlabels',datalabels)

Spørgsmål 5

(Frivillig) PCA teknikken afhænger af lineære relationer mellem de forskellige variable. Der findes en anden metode til ikke-lineære data, der benytter det såkaldte "kernel-kneb". I zip-filen medfølger en funktion kaldet "kernelpca_tutorial.m", gentag spørgsmål 4 for resultatet fra funktionen.

Mere info: http://en.wikipedia.org/wiki/Kernel_principal_component_analysis


Samlede løsninger



Personal tools
Namespaces
Variants
Actions
Navigation
Opgaver
Andet
Toolbox
Commercial