opgaver:Uge5
Pia Jensen (Talk | contribs) |
Pia Jensen (Talk | contribs) |
||
Line 26: | Line 26: | ||
Start med at indlæse datafilen, og plot så populationen i forhold til landenes størrelse. | Start med at indlæse datafilen, og plot så populationen i forhold til landenes størrelse. | ||
{{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:uge5fig1.png|frame|Antal indbyggere som en funktion af landeareal.]] | ||
+ | Datafilen kan indlæses med koden | ||
+ | :<code>lande = importdata('lande.txt',';');</code> | ||
+ | |||
+ | For nemmere at kunne arbejde med data sorteres de nu i rækkefølge efter landeareal, og population og areal skrives ind i hvert sit array: | ||
+ | |||
+ | :<code>sorted = sortrows(lande.data,1);</code> | ||
+ | :<code>A = sorted(:,1);</code> | ||
+ | :<code>P = sorted(:,2);</code> | ||
+ | |||
+ | Plottet laves med | ||
+ | |||
+ | :<code>figure</code> | ||
+ | :<code>plot(A,P,'.')</code> | ||
+ | :<code>xlabel('lands størrelse [miles^2]')</code> | ||
+ | :<code>ylabel('antal indbyggere')</code> | ||
+ | :<code>title('Lineær sammenhæng')</code> | ||
+ | |||
+ | Dette plot kan ses her til højre. | ||
+ | :<code></code> | ||
{{hidden end}} | {{hidden end}} | ||
=== Spørgsmål 2 === | === Spørgsmål 2 === | ||
− | Beregn den linære korrelation manuelt. Er de to variable korrelerede? | + | Beregn den linære korrelation manuelt (altså uden at bruge de indbyggede MATLAB funktioner til at gøre det). Er de to variable korrelerede? |
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
Beregn først kovarians matricen (ligning 1 i [[Media:multivariatstatistik.pdf|multivariatstatistik.pdf]] dokumentet). | Beregn først kovarians matricen (ligning 1 i [[Media:multivariatstatistik.pdf|multivariatstatistik.pdf]] dokumentet). | ||
{{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 | ||
+ | |||
+ | :<code>X1 = A - mean(A);</code> | ||
+ | :<code>X2 = P - mean(P);</code> | ||
+ | |||
+ | Herefter kan man simpelthen manuelt indsætte i kovarians matricen, | ||
+ | |||
+ | :<code>C_man = [ mean( X1 .* X1 ) mean( X1 .* X2 ) ; ...</code> | ||
+ | ::<code>mean( X2 .* X1 ) mean( X2 .* X2 ) ];</code> | ||
+ | |||
+ | og tilsvarende kan man manuelt finde den lineære korrelation med | ||
+ | :<code>r_man = mean( X1 .* X2 ) / ( std(A) * std(P) );</code> | ||
{{hidden end}} | {{hidden end}} | ||
Revision as of 13:40, 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.
- Dokument om multivariat statistik: multivariatstatistik.pdf
Det kan også hjælpe at læse nogle Wikipedia-sider om emnerne, som f.eks.
- Multivariate analysis
- Covariance Matrix
- Correlations
- Autocorrelations (valgfri)
- Principal Component Analysis
- Linear models
- Non-linear models (kernel methods)
- Fast fourier transforms - cool blog om FFT (valgfri)
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.
Spørgsmål 1
Start med at indlæse datafilen, og plot så populationen i forhold til landenes størrelse.
Datafilen kan indlæses med koden
lande = importdata('lande.txt',';');
For nemmere at kunne arbejde med data sorteres de nu i rækkefølge efter landeareal, og population og areal skrives ind i hvert sit array:
sorted = sortrows(lande.data,1);
A = sorted(:,1);
P = sorted(:,2);
Plottet laves med
figure
plot(A,P,'.')
xlabel('lands størrelse [miles^2]')
ylabel('antal indbyggere')
title('Lineær sammenhæng')
Dette plot kan ses her til højre.
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?
Beregn først kovarians matricen (ligning 1 i multivariatstatistik.pdf dokumentet).
Først skal dataen centreres, så to nye datasæt defineres ved
X1 = A - mean(A);
X2 = P - mean(P);
Herefter kan man simpelthen manuelt indsætte i kovarians matricen,
C_man = [ mean( X1 .* X1 ) mean( X1 .* X2 ) ; ...
mean( X2 .* X1 ) mean( X2 .* X2 ) ];
og tilsvarende kan man manuelt finde den lineære korrelation med
r_man = mean( X1 .* X2 ) / ( std(A) * std(P) );
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. Hvad er $\chi^2$ for fittet? Beskriver en lineær relation forholdet?
Opgave 2 - Flere korrelationer
Disse øvelser viser mere med korrelationer.
- Du skal starte med at hente datasættet opg2data.txt.
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.
data_center = data - repmat(middelværdierne, 1, antallet_af_målinger)
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.
[smidvæk indices] = sort(egenværdier, 'descend')
Del 4
Sorter egenvektorerne og egenværdierne med indeks-vektoren.
egenvec = egenvec(:,indices); egenværdier = egenværdier(indices)
Del 5
Projektér den oprindelige data langs den nye basis (egenvektor matricen).
data_pca = egenvec' * data
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
- Et samlet dokument med MATLAB kode til at løse alle opgaverne ovenfor kan hentes her: opgaver_uge5_kovarians.m