﻿

# c# pdf library github : Delete metadata from pdf software Library project winforms asp.net html UWP Wiley%20Advanced%20Modelling%20in%20Finance%20using%20Excel%20and%20VBA11-part582

106
The Efficient Frontier
0%
2%
4%
6%
8%
10%
12%
0%
5%
10%
15%
20%
25%
Risk (Standard Deviation)
Expected Return
TBills
Bonds
Shares
Constrained Points
Unconstrained Frontier
Fig1 PF
Figure 6.2 Risk–return representation of portfolios
In the following sections, we start by identifying individual points on the efﬁcient fron-
tier and then, in due course, generate the whole frontier. The ﬁnal stage is to impose
constraints on the holdings of individual asset classes (which in turn conﬁne the return
of the portfolio to a single range) and then to ﬁnd the position of the constrained frontier
points. Note that, although the scale of the chart does not allow us to conﬁrm this visu-
ally, the constrained points will always lie on or slightly to the right of the unconstrained
frontier.
If there are no additional constraints on the weights for the individual assets, frontier
portfolios can be obtained from formulas outlined by Huang and Litzenberger (1988,
section 6.4). However, generating efﬁcient portfolios using Solver is easier to explain,
so this approach is described ﬁrst, and then extended to the case when the weights on
individual asset classes are constrained. Finally, methods are suggested for generating the
entire efﬁcient frontier.
6.3 USING SOLVER TO FIND EFFICIENT POINTS
Given the same asset data set out in Figure 6.3, suppose we want to construct an efﬁcient
portfolio producing a target return of 7%. The problem is to ﬁnd the split across the
assets that achieves the target return whilst minimising the variance of return. This is
astandard optimisation problem amenable to Excel’s Solver, which contains a range of
iterative search methods for optimisation. Since portfolio variance is a quadratic function
of the weights, we will be using Solver for quadratic programming.
Delete metadata from pdf - add, remove, update PDF metadata in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Enable VB.NET Users to Read, Write, Edit, Delete and Update PDF Document Metadata
Portfolio Optimisation
107
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A
B
C
D
E
F
G
H
I
J
Using Solver to reproduce Unconstrained Frontier Portfolios
Asset Data
Exp Ret Std Dev
TBills
0.6%
4.3%
Target exp return
7.0%
target1
Bonds
2.1%
10.1%
Shares
9.0%
20.8%
(Ctrl + Shift + U to run Macro)
Correlation Matrix
TBills
Bonds
Shares
Frontier portfolio weights
TBills
1.00
0.63
0.09
TBills
40.0%
Bonds
0.63
1.00
0.23
Bonds
50.0%
change1
Shares
0.09
0.23
1.00
Shares
10.0%
VCV Matrix
TBills
Bonds
Shares
TBills
0.0018
0.0027
0.0008
Exp Ret
2.2%
portret1
Bonds
0.0027
0.0102
0.0048
Std Dev
7.0%
portsd1
Shares
0.0008
0.0048
0.0433
Figure 6.3 Sheet EF1 (in EQUITY1.xls) ready for optimisation
The algebraic structure of problems amenable to solution with quadratic programming
is documented fully in Eppen et al. (1998), as is the use of Excel’s Solver. Therefore,
we conﬁne ourselves to a brief explanation of how to operate Solver for this portfolio
problem using the layout in Figure 6.3. Notice the various range names attached to cells,
e.g. change1 for cells I11:I12, portret1 for I15, etc.
Solver requires ‘changing cells’, a ‘target cell’ for minimisation and the speciﬁcation
of ‘constraints’, which act as restrictions on feasible values for the changing cells. Notice
that the condition on full investment can be achieved by putting the formula:
=1SUM(I11:I12)
in cell I10. So the ‘changing cells’ for the optimisation are cells I11:I12 or, using the
range name, change1. The target cell to be minimised is the standard deviation of return
(I16), named portsd1. There is one explicit constraint, namely that the expected return
(cell I15), named portret1, must at least equal the target level (in cell I5), named target1.
(Note: The range names are particularly useful in specifying the Solver parameters and
again later in writing the VBA macros to automate the optimisation.)
The steps with Solver are:
1. Invoke Solver by choosing Tools then Options then Solver.
2. Specify in the Solver Parameter Dialog Box:
the Target cell (I16) to be optimised
specify max or min, as shown in Figure 6.4 and
the changing cells (I11:I12).
3. Choose Add to specify the constraints then OK (Figure 6.4 below on the right). This
constraint ensures that I15 must meet the target (cell I5).
4. Click on Options and ensure that Assume Linear Model is not checked.
5. Solve and get the results in the spreadsheet.
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
›› VB.NET PDF: Delete PDF Page. VB.NET PDF - How to Delete PDF Document Page in VB.NET. Visual Basic Sample Codes to Delete PDF Document Page in VB.NET Class.
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
Page: Delete Existing PDF Pages. |. Home ›› XDoc.PDF ›› C# PDF: Delete PDF Page. C#.NET PDF Library - Delete PDF Document Page in C#.NET.
108
Figure 6.4 Setting up Solver to minimise variance
Applying Solver, the optimum weights suggest positive holdings of Bonds and Shares
and a negative holding of TBills in the proportions shown in the sheet in Figure 6.5.
Cell I15 conﬁrms that this efﬁcient portfolio with minimum standard deviation of 15.7%
achieves the required return of 7%. Changing the target expected return in cell I5 and
invoking Solver again with the same speciﬁcations as before produces another efﬁcient
portfolio. (The reader should conﬁrm this by changing the target return in I5 from 7%
to say 3% and then invoking Solver to get the new portfolio weights. Another exercise
is to determine the weights for the unique minimum variance portfolio. If the constraint
portret1=target1showninFigure6.4isdeleted,Solvergivestheweightsforthisspecial
case–expected return 0.7%, risk 4.1%.)
Since there are no constraints on the weights assigned to individual assets, negative
holdings are possible, which is also known as short selling. Indeed for our example in
Figure 6.5, the frontier portfolio with an expected return of 7% contains a negative holding
of 5.6% in TBills. This means that the portfolio entails borrowing a proportion of the
portfolio value, thus incurring an interest charge to offset against the expected returns
from the positive holdings in the other two assets.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A
B
C
D
E
F
G
H
I
J
Using Solver to reproduce Unconstrained Frontier Portfolios
Asset Data
Exp Ret Std Dev
TBills
0.6%
4.3%
Target exp return
7.0%
target1
Bonds
2.1%
10.1%
Shares
9.0%
20.8%
(Ctrl + Shift + U to run Macro)
Correlation Matrix
TBills
Bonds
Shares
Frontier portfolio weights
TBills
1.00
0.63
0.09
TBills
-5.6%
Bonds
0.63
1.00
0.23
Bonds
35.8%
change1
Shares
0.09
0.23
1.00
Shares
69.8%
VCV Matrix
TBills
Bonds
Shares
TBills
0.0018
0.0027
0.0008
Exp Ret
7.0%
portret1
Bonds
0.0027
0.0102
0.0048
Std Dev
15.7%
portsd1
Shares
0.0008
0.0048
0.0433
Figure 6.5 The unconstrained frontier portfolio with 7% expected return
So far, optimal portfolio weights have been obtained by minimising portfolio risk.
An alternative approach is to determine portfolio weights to maximise expected return
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Offer professional PDF document metadata editing APIs, using which VB.NET developers can redact, delete, view and save PDF metadata. PDF Document Protection.
C# PDF Library SDK to view, edit, convert, process PDF file for C#
PDF SDK for .NET allows you to read, add, edit, update, and delete PDF file metadata, like Title, Subject, Author, Creator, Producer, Keywords, etc.
Portfolio Optimisation
109
for a speciﬁed level of risk. Although these appear to be different problems for Solver,
the optimum weights correspond to portfolios lying on the efﬁcient frontier as in the
minimisation formulation.
6.4 GENERATING THE EFFICIENT FRONTIER (HUANG
AND LITZENBERGER’S APPROACH)
If there are no constraints on individual asset weights, the efﬁcient frontier can also be
produced elegantly from algebra. Although some of the more advanced textbooks (such
as Elton and Gruber, 1995) demonstrate this through the iterative solution of a set of
simultaneous equations, there is a better approach. Huang and Litzenberger (denoted HL)
have described how to ﬁnd two points on the frontier, and then to generate the whole
of the frontier from these points (by applying a result due to Black). This section builds
on their algebraic approach, the calculation sequence being explained using matrices, to
generalise the approach to portfolios with many (i.e. more than three) assets. The context
of the following description is spreadsheet implementation with Excel’s array functions.
This section is of a somewhat more advanced level and may be deferred on ﬁrst reading
until the remainder of the chapter has been understood.
Sheet EF1HL shown in Figure 6.6 includes named ranges to improve the clarity of
the formulas in the cells. The vector of expected returns (C5:C7) is named e, the vector
of weights (I5:I7) is named w and the unit vector in A24:A26 is named u. The vari-
ance–covariance matrix in C15:E17 is named V. As explained earlier, the portfolio
variance is written in matrix form as w
T
Vw and is evaluated with Excel’s matrix multi-
plication functions in cell I11.
The HL method for ﬁnding efﬁcient portfolios requires the inverse of the
variance–covariance matrix, which is written as V
1
.Excel’s MINVERSE function for
matrix inversion does the actual calculation. The array formula to enter into the 3 by
3cell range, H15:J17, is:
DMINVERSE(C15:E17)
Note that for array functions, having selected the cell range for the formulas and entered
the appropriate formula, the keystroke combination CtrlCShiftCEnter must be pressed to
complete the entry. (If no array formula brackets fg appear in the cell, then press F2 and
try again.)
In order to ﬁnd two frontier portfolios (labelled g and gCh), Huang and Litzenberger
start by calculating four scalar quantities (A, B, C and D). The ﬁrst three, A, B and C,
are products of vectors and matrices and the fourth, D, depends on the previous three:
T
V
1
e B D e
T
V
1
e C D u
T
V
1
u D D BC  A
2
If we deﬁne two intermediate column vectors l D V
1
e and m D V
1
u, shown in the
sheet in cells C24:C26 and D24:D26, the matrix multiplication expressions simplify to:
T
l B D e
T
l C D u
T
m
The single cell formula for A in cell G23: DMMULT(TRANSPOSE(u), l) involves the
MMULT array function, so it must be entered as an array formula (similarly the formulas
for B and C). Since the calculations for A, B, C and D all result in scalars, there is no
need to ‘select’ an area greater than a single cell for any of them.
VB.NET PDF delete text library: delete, remove text from PDF file
VB.NET PDF - How to Delete Text from PDF File in VB.NET. VB.NET Programming Guide to Delete Text from PDF File Using XDoc.PDF SDK for VB.NET.
C# PDF delete text Library: delete, remove text from PDF file in
C#.NET PDF SDK - Delete Text from PDF File in C#.NET. How to Use C# Programming Demo Code to Delete Text from PDF File with .NET PDF Component.
110
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
A
B
C
D
E
F
G
H
I
J
K
Using Algebra to reproduce Unconstrained Frontier Portfolios
Asset Data
Exp Ret
Std Dev
Portfolio Weights
TBills
0.6%
4.3%
TBills
33.3%
Bonds
2.1%
10.1%
Bonds
33.3%
Shares
9.0%
20.8%
Shares
33.3%
Correlation Matrix
TBills
Bonds
Shares
via fn
TBills
1.00
0.63
0.09
Exp Ret
3.90%
3.90%
Bonds
0.63
1.00
0.23
Variance
0.0080
Shares
0.09
0.23
1.00
Std Dev
8.95%
8.95%
VCV Matrix
TBills
Bonds
Shares
VCV inverse
TBills
0.0018
0.0027
0.0008
901.51
-246.92
10.80
Bonds
0.0027
0.0102
0.0048
-246.92
171.13
-14.52
Shares
0.0008
0.0048
0.0433
10.80
-14.52
24.53
Finding weights, g and h, to generate points on the frontier
uvec
l
m
g
h
g+h
A
3.97
1
1.20
665.40
B
0.20
124.0% -1851.9%
-1727.9%
1
0.81
-90.30
C
595.91
-20.5%
805.2%
784.6%
1
1.97
20.82
D
104.15
-3.5%
1046.7%
1043.2%
Exp Ret
0.0%
100.0%
100.0%
Std Dev
4.4%
237.6%
Generating Frontier Portfolios, using g and h
Target expected return
7.0%
weights
via fn
TBills
-5.6%
-5.6%
Exp Ret
7.0%
Bonds
35.8%
35.8%
Std Dev
15.7%
Shares
69.8%
69.8%
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Delete unimportant contents: Flatten form fields. Document and metadata. All object data. VB.NET Demo Code to Optimize An Exist PDF File in Visual C#.NET Project.
How to C#: Basic SDK Concept of XDoc.PDF for .NET
load, combine, and split PDF file(s), and add, create, insert, delete, re-order XDoc.PDF for .NET supports editing PDF document metadata, like Title
pected return of 7% consists of holding a mixture of Bonds and Stocks whilst short
gTBills. This result from HL’s approach is identical to the result in Figure 6.5 for
roptimisation with no constraints on weights.
er points on the frontier can be evaluated using the array expression gCh
Ł
T by
ying different values for the expected return, T. In this way the efﬁcient frontier can
nerated. For example, in Excel a Data Table with a range of expected returns from
10% as inputs and portfolio risk and return as outputs can be used as the basis for
Y(Scatter) chart. In Figure 6.2, the points labelled as the ‘Unconstrained Frontier’
from such a Data Table.
is evident, the spreadsheet manipulations required to evaluate the weights for the
fﬁcient portfolios are complex. This is the ideal situation for a VBA user-deﬁned
on to simplify formula entry. In section 6.10, the code to implement Huang and
nberger’s approach is explained. The function HLPortfolioWeights has four argu-
:expret, retvec vcvmat and rf (here D 1). Argument expret is the expected return
frontier portfolio for which the weights are required, retvec is the vector of expected
sand vcvmat the variance–covariance matrix. The function returns an array of the
priate portfolio weights. In Figure 6.6, weights from this user-deﬁned function are
nin cells E36:E38 alongside the weights obtained from spreadsheet manipulation.
6.5 CONSTRAINED FRONTIER PORTFOLIOS
eare constraints on the holdings of individual assets (for example that weights must
n-negative), the analytical solution approach no longer applies. However, Solver
roduce the optimum set of weights. To distinguish these from the previous case, we
he resulting portfolio a ‘constrained’ frontier portfolio. In the ﬁrst extract of sheet
nFigure 6.7, possible portfolio weights are in cells H8:J8 (named portwts2), with
Figure 6.8 Setting up Solver with constraints on values for the weights
The frontier portfolio found by Solver has 7.4% in TBills, 20.0% in Bonds and 72.6%
in Shares. This frontier portfolio with an expected return of 7.0%, but now constrained
to have non-negative holdings, a maximum of 10% in TBills and 20% in Bonds, has a
standard deviation of 15.8%. This compares to a standard deviation of only 15.7% in the
unconstrained case, illustrating the point that typically the addition of constraints produces
asolution that is inferior to the unconstrained case.
By repeating the use of Solver for a number of different target expected returns we can
generate a series of points on the constrained frontier (see Figure 6.9). The mechanics of
the macro are described in section 6.12. With the constraints on weights detailed above,
the minimum and maximum portfolio expected returns are 6.8% and 9.0% respectively.
[The reader should check these ﬁgures by applying Solver to ﬁnd the weights to minimise
(maximise) expected return.] Assuming 11 optimisations, this range of returns is split up
into 11 target returns and Solver is used 11 times to ﬁnd frontier portfolios whose returns
lie in the feasible range (between 6.8% and 9.0%).
21
22
23
24
25
26
27
28
29
30
31
32
33
34
A
B
C
D
E
F
G
H
I
Constrained Frontier Portfolios
TBills
Bonds
Shares
Std Dev
Exp Ret
effwts2
10.0%
20.0%
70.0%
15.2%
6.8%
7.4%
20.0%
72.6%
15.8%
7.0%
4.7%
20.0%
75.3%
16.3%
7.2%
2.1%
20.0%
77.9%
16.8%
7.4%
0.0%
19.3%
80.7%
17.3%
7.7%
0.0%
16.1%
83.9%
17.9%
7.9%
0.0%
12.9%
87.1%
18.5%
8.1%
0.0%
9.7%
90.3%
19.0%
8.3%
0.0%
6.4%
93.6%
19.6%
8.6%
0.0%
3.2%
96.8%
20.2%
8.8%
0.0%
0.0%
100.0%
20.8%
9.0%
Figure 6.9 Weights for constrained frontier portfolios
The portfolios in Figure 6.9 appear labelled Constrained Points in Figure 6.2, the last one
being identical to investing only in Shares.
Portfolio Optimisation
113
In summary, the most general technique for determining weights for risky portfolios
is to apply optimisation using Solver, essentially a numerical iterative process. However,
if there are no constraints on the values of the weights (other than that they sum to
unity), HL’s analytical approach provides formulas for the optimal weights which can be
implemented via user-deﬁned functions described in section 6.10.
6.6 COMBINING RISK-FREE AND RISKY ASSETS
This section, together with sections 6.7, 6.8 and 6.9, contains additional material pertinent
to the problem of choosing portfolios from risky assets. However, it is essentially theoret-
ical, and could be regarded as appendix material. Its main importance is that we develop
the formulas to solve the ‘three generic portfolio problems’ (as described in Taggart,
1996) and provide user-deﬁned functions. These functions provide solutions to support
ideas in Chapters 7 and 8. We introduce the concept of a risk-free asset (that is an asset
with zero risk) in order to complete the path towards the development of the capital asset
pricing model in the next chapter.
Having discussed portfolios with three (or more) risky assets and shown how to
select efﬁcient combinations which are expected to generate speciﬁed target returns with
minimum risk, we brieﬂy explore how risk and return in investment should be balanced.
This risk–return trade-off is a major factor in deciding how to split investment between
aportfolio of risky assets and a risk-free asset. The ideas are developed in the context of
three generic portfolio problems:
ž One–combining a risk-free asset with a risky asset
ž Two–combining two risky assets
ž Three–combining a risk-free asset with a risky portfolio
The spreadsheet approaches are illustrated in the sheet labelled Generic.
We require a way of measuring an individual’s trade-off between risk and return and
borrow the concept of the utility function from economics. Let us suppose that individuals
have utility functions of the form:
UD Er
p
 0.5A
p
2
The higher the value of the risk aversion coefﬁcient A for the investor the larger is
the penalty from portfolio risk that is subtracted from the portfolio’s expected return.
Experiments have found the typical value of A to lie between 2 and 4, and we have
chosen A D 3 for our illustrations.
Since the development in the following sections is in terms of two assets, the general
formulas for portfolio return and risk given in section 6.1 are restated here for two assets,
namely:
Portfolio return:
Er
p
D w
1
Er
1
C w
2
Er
2
Portfolio variance:
Varr
p
D 
p
2
Dw
1
2
1
2
Cw
2
2
2
2
C2w
1
w
2
cov1, 2
where the covariance of the two assets cov1, 2 can equally well be expressed in terms of
their correlation using cov1,2 D corr1, 2
1
2
.The risk-free asset has return denoted
r
f
with zero variance and zero covariances with the risky assets. The portfolio risk is the
square root of the variance.
114
6.7 PROBLEM ONE–COMBINING A RISK-FREE ASSET WITH
ARISKY ASSET
The ﬁrst of the generic portfolio problems, Problem One, involves one risk-free asset
(asset0) and one risky asset (asset1) with returns assumed to be uncorrelated. The details
are shown in Figure 6.10: the risk-free rate is 1% and asset1 has risk and return somewhat
similar to the Bonds that featured in the earlier portfolio. By varying the weight invested
in asset1 (cell H14) in a range from 0% to 100% we can generate the straight line linking
the risk–return point for asset0 to the risk–return point for asset1. This line is shown in
Figure 6.11.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
A
B
C
D
E
F
G
H
I
J
K
Generic Portfolio Problems
Problem One : risk-free asset and 1 risky asset
Asset Data
Exp Ret Std Dev
Risk aversion coefficient (A)
)
3.00
asset 0
1.0%
0.0%
asset 1
2.1%
10.1%
Corr Matrix
asset 0
asset 1
Optimal Portfolio
utility
0.0120
asset 0
1.00
0.00
asset 1
0.00
1.00
weights
asset 0
64.1%
return
1.40%
VCV Matrix
asset 0
asset 1
asset 1
35.9%
std dev
3.63%
asset 0
0.0000
0.0000
asset 1 via fn
35.9%
asset 1
0.0000
0.0102
Figure 6.10 Spreadsheet calculations for Problem One, sheet Generic
Problem One
0%
1%
1%
2%
2%
3%
0%
2%
4%
6%
8%
10%
12%
Portfolio risk (standard deviation)
Portfolio return
0.000
0.002
0.004
0.006
0.008
0.010
0.012
0.014
Portfolio utility
Figure 6.11 Utility and return versus risk for Problem One
Individual investors will choose a particular point on the line depending on the value
of their risk aversion coefﬁcient (in cell K6). Figure 6.11 includes the utility curve for
portfolios with different proportions of asset1 assuming a risk aversion coefﬁcient of 3
(shown as a series of separate boxes and linked to the right-hand scale of the chart). The
Portfolio Optimisation
115
utility starts at 0.01 (with 100% invested in asset0) and increases steadily as the proportion
invested in asset1 increases until the optimal point is reached, declining thereafter to a
utility value of 0.006 with 100% invested in asset1.
The optimal point on the line corresponds to that of maximum utility, which occurs
when the weight for asset1 (in cell H14) is evaluated from the formula:
w
1
Ł
D[Er
1
 r
f
]/A
1
2
In this example, the optimal portfolio will have 36% (35.9%) invested in the risky asset
to produce a utility value of 0.012 (that is, a certainty equivalent return of 1.2%). A
user-deﬁned function called Prob1OptimalRiskyWeight has been developed to provide
this weight (as in cell H15). It is described in section 6.11.
Note also that the proportion of the optimal investment put into the risky asset (as
opposed to asset0) depends on the investor’s degree of risk aversion. An investor with a
higher risk aversion coefﬁcient (of say 4) would reduce his proportion of risky assets in
his optimal portfolio to 27%.
6.8 PROBLEM TWO–COMBINING TWO RISKY ASSETS
In Problem Two both assets are risky. In our illustration, their returns are weakly positively
correlated, just as was the case for the Bonds and Shares in the earlier portfolio example.
The details are set out in Figure 6.12 with correlation 0.23 in cell D25.
18
19
20
21
22
23
24
25
26
27
28
29
30
31
A
B
C
D
E
F
G
H
I
J
K
Problem Two : 2 risky assets and no risk-free asset
Asset Data
Exp Ret Std Dev
Risk aversion coefficient (A)
3.00
asset 1
2.1%
10.1%
asset 2
9.0%
20.8%
Minimum Variance Portfolio
utility
0.0151
weights
Corr Matrix
asset 1
asset 2
asset 1
87.7%
return
2.95%
asset 1
1.00
0.23
asset 2
12.3%
std dev
9.77%
asset 2
0.23
1.00
Optimal Risky Portfolio
utility
0.0333
VCV Matrix
asset 1
asset 2
weights
asset 1
0.0102
0.0048
asset 1
35.2%
return
6.57%
asset 2
0.0048
0.0433
asset 2
64.8%
std dev
14.70%
asset 1 via fn
35.2%
Figure 6.12 Spreadsheet calculations for Problem Two, sheet Generic
By varying the weight invested in asset1, we can trace the outline or frontier (see the
continuous line in Figure 6.13). The resulting curve linking the risk–return points repre-
sented by combinations of the two risky assets demonstrates the beneﬁt of diversiﬁcation.
For example, if an investor starts with a portfolio wholly invested in asset1 then he can
increase the return of his portfolio by swapping part of his portfolio into asset2. The risk
of his portfolio will also be reduced by this swap despite the fact that asset2, on its own,
is a riskier asset than asset1.
This process of swapping from asset1 to asset2 reduces portfolio risk until the point
represented by the minimum variance portfolio is reached with 87.7% in asset1 and a
portfolio standard deviation of 9.77%. The formula for the minimum variance portfolio