2010-03-01
851-0585-04L – Modelling and Simulating Social Systems with MATLAB
Lesson 2 – Statistics and plotting
Anders Johansson and Wenjian Yu
© ETH Zürich |
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 2
Lesson 2 - Contents
Repetition Creating and accessing
scalars, vectors, matrices for loop if case
Solutions for lesson 1 exercises
Statistics
Plotting
Exercises
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 3
Contents of the course22.02.
01.03.
08.03.
15.03.
22.03.
29.03.
12.04.
26.04.
03.05.
10.05.
17.05.
31.05.
Introduction to MATLAB
Introduction to social-science modeling and simulationWorking on
projects (seminar theses)
Handing in seminar thesis and giving a presentation
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 4
Repetition
Creating a scalar:
>> a=10
a =
10
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 5
Repetition
Creating a row vector:
>> v=[1 2 3 4 5]
v =
1 2 3 4 5
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 6
Repetition
Creating a row vector, 2nd method:
>> v=1:5
v =
1 2 3 4 5
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 7
Repetition
Creating a row vector, 3rd method:
linspace(startVal, endVal, n)
>> v=linspace(0.5, 1.5, 5)
v =
0.50 0.75 1.00 1.25 1.50
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 8
Repetition
Creating a column vector:
>> v=[1; 2; 3; 4; 5]
v =
1 2 3 4 5
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 9
Repetition
Creating a column vector, 2nd method:
>> v=[1 2 3 4 5]’
v =
1 2 3 4 5
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 10
Repetition
Creating a matrix:
>> A=[1 2 3 4; 5 6 7 8]
A =
1 2 3 4 5 6 7 8
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 11
Repetition
Creating a matrix, 2nd method:
>> A=[1:4; 5:8]
A =
1 2 3 4 5 6 7 8
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 12
Repetition
Accessing a scalar:
>> a
a =
10
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 13
Repetition
Accessing an element in a vector:
v(index) (index=1..n)
>> v(2)
ans =
2
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 14
Repetition
Accessing an element in a matrix:
A(rowIndex, columnIndex)
>> A(2, 1)
ans =
5
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 15
Repetition - operators
Scalar operators:
Basic: +, -, *, /
Exponentialisation: ^
Square root: sqrt()
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 16
Repetition - operators
Matrix operators:
Basic: +, -, *
Element-wise operators:
Multiplication: .*
Division: ./
Exponentialisation: .^
Solving Ax=b: x = A\b
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 17
Repetition – for loop
Computation can be automized with for loops:
>> y=0;for x=1:4 y = y + x^2 + x;end
>> y
y = 40
4
1
2 )(x
xxy
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 18
Repetition – if case
Conditional computation can be made with if:
>> val=-4;if (val>0 ) absVal = val;else absVal = -val;end
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 19
Lesson 1: Exercise 1
Compute:
a) b)
c)
255
10718
100
0i
i
10
5
2 )(i
ii
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 20
Lesson 1: Exercise 1 – solution
Compute:
a)
255
10718
>> (18+107)/(5*25)
ans =
1
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 21
Lesson 1: Exercise 1 – solution
Compute:
b)
100
0i
i
>> s=0;>> for i=0:100s=s+i; end>> s
s =
5050
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 22
Lesson 1: Exercise 1 – solution
Compute:
c)
10
5
2 )(i
ii
>> s=0;>> for i=5:10s=s+i^2-i; end>> s
s =
310
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 23
Lesson 1: Exercise 2
Solve for x:
4522
32
22332
1432
4321
4321
4321
4321
xxxx
xxxx
xxxx
xxxx
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 24
Lesson 1: Exercise 2 – solution>> A=[2 -3 -1 4; 2 3 -3 2; 2 -1 -1 -1; 2 -1 2 5];>> b=[1; 2; 3; 4];>> x=A\b
x = 1.9755 0.3627 0.8431 -0.2549
>> A*xans = 1.0000 2.0000 3.0000 4.0000
4522
32
22332
1432
4321
4321
4321
4321
xxxx
xxxx
xxxx
xxxx
Ax=b
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 25
Lesson 1: Exercise 3
Fibonacci sequence: Write a function which compute
the Fibonacci sequence until a given number n and
return the result in a vector.
The Fibonacci sequence F(n) is given by :
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 26
Lesson 1: Exercise 3 – solution
fibonacci.m:
function [v] = fibonacci(n) v(1) = 0; if ( n>=1 ) v(2) = 1;end for i=3:n+1 v(i) = v(i-1) + v(i-2);end
>> fibonacci(7)ans = 0 1 1 2 3 5 8 13
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 27
Statistics functions Statistics in MATLAB can be performed with the following commands:
Mean value: mean(x)
Median value: median(x)
Min/max values: min(x), max(x)
Standard deviation: std(x)
Variance: var(x)
Covariance: cov(x)
Correlation coefficient: corrcoef(x)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 28
Plotting functions
Plotting in MATLAB can be performed with the following
commands:
Plot vector x vs. vector y:
Linear scale: plot(x, y)
Double-logarithmic scale: loglog(x, y)
Semi-logarithmic scale: semilogx(x, y)
semilogy(x, y)
Plot histogram of x:
hist(x)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 29
Plotting tips
To make the plots look nicer, the following
commands can be used:
Set label on x axis:
xlabel(‘text’)
Set label on y axis:
ylabel(‘text’)
Set title:
title(‘text’)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 30
Details of plot
An additional parameter can be provided to plot()
to define how the curve will look like:
plot(x, y, ‘key’)
Where key is a string which can contain:
Color codes: ‘r’, ‘g’, ‘b’, ‘k’, ‘y’, …
Line codes: ‘-’, ‘--’, ‘.-’ (solid, dashed, etc.)
Marker codes: ‘*’, ‘.’, ‘s’, ’x’
Examples: plot(x, y, ‘r--’)
plot(x, y, ‘g*’) * * * *
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 31
Two additional useful commands: hold on|off grid on|off
>> x=[-5:0.1:5];
>> y1=exp(-x.^2);
>> y2=2*exp(-x.^2);
>> y3=exp(-(x.^2)/3);
Plotting tips
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 32
Plotting tips
>> plot(x,y1);
>> hold on
>> plot(x,y2,’r’);>> plot(x,y3,’g’);
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 33
Plotting tips
>> plot(x,y1);
>> hold on
>> plot(x,y2,’r’);>> plot(x,y3,’g’);>> grid on
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 34
Datasets
Two datasets for statistical plotting can be found on the
course web page
http://www.soms.ethz.ch/matlab
you will find the files:
countries.m
cities.m
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 35
Datasets
Download the files countries.m and
cities.m and save them in the working
directory of MATLAB.
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 36
Datasets – countries
This dataset countries.m contains a matrix A
with the following specification:
Rows: Different countries
Column 1: Population
Column 2: Annual growth (%)
Column 3: Percentage of youth
Column 4: Life expectancy (years)
Column 5: Mortality
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 37
Datasets – countries
Most often, we want to access complete
columns in the matrix. This can be done by
A(:, index)
For example if you are interested in the life-
expectancy column, it is recommended to do:
>> life = x(:,4);
and then the vector life can be used to access
the vector containing all life expectancies.
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 38
Datasets – countries
The sort() function can be used to sort all
items of a vector in inclining order.
>> life = A(:, 4);
>> plot(life)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 39
Datasets – countries
The sort() function can be used to sort all
items of a vector in inclining order.
>> life = A(:, 4);
>> lifeS = sort(life);
>> plot(lifeS)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 40
Datasets – countries
The histogram hist() is useful for getting the
distribution of the values of a vector.
>> life = A(:, 4);
>> hist(life)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 41
Datasets – countries
Alternatively, a second parameter specifies the
number of bars:
>> life = A(:, 4);
>> hist(life, 30)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 42
Exercise 1
Statistics: Generate a vector of N random
numbers with randn(N,1)
Calculate the mean and standard deviation. Do
the mean and standard deviation converge to
certain values, for an increasing N?
Optional: Display the histogram with
hist(randn(N,1)) and compare with the
histogram of rand()
Slides/exercises: www.soms.ethz.ch/matlab (use Firefox!)
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 43
Exercise 2
Demographics: From the countries.m dataset,
find out why there is such a large difference
between the mean and the median population of
all countries.
Hint: Use hist(x, n)
Also sort() can be useful.
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 44
Exercise 3
Demographics: From the countries.m dataset,
see which columns have strongest correlation.
Can you reason why these columns have
stronger correlations?
Hint: Use corrcoef() to find the correlation
between columns.
2010-03-01 A. Johansson & W. Yu/ [email protected] [email protected] 45
Exercise 4 – optional
Zipf’s law: Zipf’s law says that the rank, x, of
cities (1: largest, 2: 2nd largest, 3: 3rd largest, ...)
and the size, y, of cities (population) has a
power-law relation: y ~ xb
Test if Zipf’s law holds for the three cases in the
cities.m file. Try to estimate the b
parameter.
Hint: Use log() and plot() (or loglog())