General Linear Models in Julia: Iris Study Case


In [55]:
using DataFrames, DataArrays, DataFramesMeta, RDatasets
using MLBase
using GLM
using Gadfly

Load Data


In [2]:
iris = dataset("datasets", "iris");

Data Description


In [3]:
showcols(iris)


150x5 DataFrames.DataFrame
| Col # | Name        | Eltype      | Missing |
|-------|-------------|-------------|---------|
| 1     | SepalLength | Float64     | 0       |
| 2     | SepalWidth  | Float64     | 0       |
| 3     | PetalLength | Float64     | 0       |
| 4     | PetalWidth  | Float64     | 0       |
| 5     | Species     | ASCIIString | 0       |

In [4]:
head(iris)


Out[4]:
SepalLengthSepalWidthPetalLengthPetalWidthSpecies
15.13.51.40.2setosa
24.93.01.40.2setosa
34.73.21.30.2setosa
44.63.11.50.2setosa
55.03.61.40.2setosa
65.43.91.70.4setosa

In [5]:
p1 = plot(iris, x="SepalLength", y="SepalWidth", color="Species")
p2 = plot(iris, x="PetalLength", y="PetalWidth", color="Species")
p3 = plot(iris, x="SepalLength", y="PetalLength", color="Species")
p4 = plot(iris, x="SepalWidth", y="PetalWidth", color="Species")
p = hstack(vstack(p1, p2), vstack(p3, p4))
draw(SVGJS(900px, 600px), p)


WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:1
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:1
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:1
in set_mapped_data! at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:275
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
in __call#41__ at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:46
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
in __call#41__ at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:46
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
in __call#41__ at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:46
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:46
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:43
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:507
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:557
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:738
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
WARNING: Base.Nothing is deprecated, use Void instead.
  likely near In[5]:5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in apply_scales at /Users/diego/.julia/v0.4/Gadfly/src/scale.jl:58
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:715
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in concat at /Users/diego/.julia/v0.4/Gadfly/src/aesthetics.jl:243
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:738
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Base.None is deprecated, use Union{} instead.
  likely near In[5]:5
in aesthetics_type at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:111
WARNING: Base.None is deprecated, use Union{} instead.
  likely near In[5]:5
in aesthetics_type at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:111
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geom/point.jl:35
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geometry.jl:47
 in render_prepared at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:846
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:785
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:574
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:574
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:574
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:579
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:579
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:579
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:754
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:754
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:754
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:759
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:759
WARNING: Base.String is deprecated, use AbstractString instead.
  likely near In[5]:5
in render at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:759
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:46
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:43
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:507
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:557
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:738
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in apply_scales at /Users/diego/.julia/v0.4/Gadfly/src/scale.jl:58
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:715
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in concat at /Users/diego/.julia/v0.4/Gadfly/src/aesthetics.jl:243
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:738
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geom/point.jl:35
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geometry.jl:47
 in render_prepared at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:846
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:785
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
SepalWidth -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 -2.5 0.0 2.5 5.0 7.5 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 setosa versicolor virginica Species -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 -2.5 -2.4 -2.3 -2.2 -2.1 -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 -2.5 0.0 2.5 5.0 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 PetalWidth SepalLength -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 9.2 9.4 9.6 9.8 10.0 10.2 10.4 10.6 10.8 11.0 11.2 11.4 11.6 11.8 12.0 0 5 10 15 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 setosa versicolor virginica Species -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 -10 0 10 20 -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 PetalLength PetalLength -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 -10 0 10 20 -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 setosa versicolor virginica Species -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 -2.5 -2.4 -2.3 -2.2 -2.1 -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 -2.5 0.0 2.5 5.0 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 PetalWidth SepalLength -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 7.2 7.4 7.6 7.8 8.0 8.2 8.4 8.6 8.8 9.0 9.2 9.4 9.6 9.8 10.0 10.2 10.4 10.6 10.8 11.0 11.2 11.4 11.6 11.8 12.0 0 5 10 15 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 setosa versicolor virginica Species -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7.0 -2.5 0.0 2.5 5.0 7.5 -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0 5.2 5.4 5.6 5.8 6.0 6.2 6.4 6.6 6.8 7.0 SepalWidth

Rename Explanatory and Dependent Variables


In [6]:
df = copy(iris)
rename!(df, :SepalLength, :x1)
rename!(df, :SepalWidth, :x2)
rename!(df, :PetalLength, :x3)
rename!(df, :PetalWidth, :x4)
rename!(df, :Species, :y);


 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:46
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:43
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:507
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:557
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:738
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in apply_scales at /Users/diego/.julia/v0.4/Gadfly/src/scale.jl:58
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:715
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in concat at /Users/diego/.julia/v0.4/Gadfly/src/aesthetics.jl:243
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:738
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geom/point.jl:35
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geometry.jl:47
 in render_prepared at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:846
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:785
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:46
 in call at /Users/diego/.julia/v0.4/Gadfly/src/coord.jl:43
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:507
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:557
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in default_statistic at /Users/diego/.julia/v0.4/Gadfly/src/guide.jl:738
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:669
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in apply_scales at /Users/diego/.julia/v0.4/Gadfly/src/scale.jl:58
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:715
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in concat at /Users/diego/.julia/v0.4/Gadfly/src/aesthetics.jl:243
 in render_prepare at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:738
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:781
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5
WARNING: Union(args...) is deprecated, use Union{args...} instead.
 in depwarn at deprecated.jl:73
 in call at deprecated.jl:50
 in call at /Users/diego/.julia/v0.4/Gadfly/src/varset.jl:53
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geom/point.jl:35
 in render at /Users/diego/.julia/v0.4/Gadfly/src/geometry.jl:47
 in render_prepared at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:846
 in render at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:785
 in vstack at /Users/diego/.julia/v0.4/Gadfly/src/Gadfly.jl:890
 in include_string at loading.jl:266
 in execute_request_0x535c5df2 at /Users/diego/.julia/v0.4/IJulia/src/execute_request.jl:177
 in eventloop at /Users/diego/.julia/v0.4/IJulia/src/IJulia.jl:141
 in anonymous at task.jl:447
while loading In[5], in expression starting on line 5

Preprocess Data

Lets separate the data to identify each class individualy with a binary model.


In [9]:
df_y1 = copy(df)
df_y2 = copy(df)
df_y3 = copy(df)

df_y1[:y] = DataArray{Int8}(df_y1[:y] .== "setosa")
df_y2[:y] = DataArray{Int8}(df_y2[:y] .== "versicolor")
df_y3[:y] = DataArray{Int8}(df_y3[:y] .== "virginica");

Auxiliary Functions


In [98]:
fit_model(df, formula) = glm(formula, df, Binomial())
function fit_models(df, formulas)
    linear_models = []
    for formula in formulas
        try 
            push!(linear_models, fit_model(df, formula)) 
        catch 
            LoadError 
        end
    end 
    return linear_models
end

predict_models(linear_models) = Array[GLM.predict(lm) for lm in linear_models]

binarize(vector) = map(x -> x >= .5? 1 : 0, vector)
evaluate_bin(y_real, y_pred) = calculate_accuracy(y_real, binarize(y_pred))
calculate_accuracy(y_real, y_pred) = round(sum(DataArray{Int8}(y_pred - y_real .== 0))/length(y_real), 4)
function max_label(y_preds, index)
    values = map(y -> y[index], y_preds)
    max_value = maximum(values)
    return findin(values, max_value)[1]
end

function evaluate(y_real, y_preds)
    y_pred = map(i -> max_label(y_preds, i), 1:length(y_real))
    acc = calculate_accuracy(y_real, y_pred)
    return acc, y_pred
end

function confusion_matrix(y_real, y_pred)
    size = max(length(Set(y_real)), length(Set(y_pred)))
    matrix = fill(0, (size, size))
    for i=1:length(y_real)
        matrix[y_real[i], y_pred[i]] += 1
    end
    return matrix
end


Out[98]:
confusion_matrix (generic function with 1 method)

Simple Regression Analysis

Analysis Setosa Class

Define the first-order models:


In [23]:
formulas = [y ~ x1, y ~ x2, y ~ x3, y  ~ x4]


Out[23]:
4-element Array{DataFrames.Formula,1}:
 Formula: y ~ x1
 Formula: y ~ x2
 Formula: y ~ x3
 Formula: y ~ x4

Fit Model and Evaluate for Y = Setosa


In [62]:
lms = fit_models(df_y1, formulas);

In [73]:
map(y_pred -> evaluate_bin(df_y1[:y], y_pred), predict_models(lms))


Out[73]:
4-element Array{Float64,1}:
 0.666667
 0.46    
 0.646667
 0.666667

Fit Model and Evaluate for Y = Versicolor


In [71]:
lms = fit_models(df_y2, formulas);

In [74]:
map(y_pred -> evaluate_bin(df_y2[:y], y_pred), predict_models(lms))


Out[74]:
4-element Array{Float64,1}:
 0.666667
 0.726667
 0.646667
 0.666667

Fit Model and Evaluate for Y = Virginica


In [152]:
lms = fit_models(df_y3, formulas);

In [76]:
map(y_pred -> evaluate_bin(df_y3[:y], y_pred), predict_models(lms))


Out[76]:
4-element Array{Float64,1}:
 0.666667
 0.593333
 0.686667
 0.666667

Final Simple Regression Model Y → [:Setosa, :Versicolor, :Virginica]


In [79]:
lms = fit_model(df_y1, formulas[1]), fit_model(df_y2, formulas[1]), fit_model(df_y3, formulas[4]);
df_y = copy(df)
df_y[:y] = df_y1[:y] + df_y2[:y]*2 + df_y3[:y]*3
acc, y_pred = evaluate(df_y[:y], predict_models(lms))
println("Acc: $acc")


Acc: 0.8466666666666667

Multiple Regression Analysis


In [80]:
formulas = [y ~ x1 + x2, y ~ x1 + x3, y ~ x1 + x4, y  ~ x2 + x3, y ~ x2 + x4, y ~ x3 + x4, 
            y ~ x1 + x2 + x3, y ~ x2 + x3 + x4, y ~ x1 + x3 + x4, y ~ x1 + x2 + x3 + x4]


Out[80]:
10-element Array{DataFrames.Formula,1}:
 Formula: y ~ x1 + x2          
 Formula: y ~ x1 + x3          
 Formula: y ~ x1 + x4          
 Formula: y ~ x2 + x3          
 Formula: y ~ x2 + x4          
 Formula: y ~ x3 + x4          
 Formula: y ~ x1 + x2 + x3     
 Formula: y ~ x2 + x3 + x4     
 Formula: y ~ x1 + x3 + x4     
 Formula: y ~ x1 + x2 + x3 + x4

In [99]:
lms = fit_models(df_y1, formulas)
acc_1 = map(y_pred -> evaluate_bin(df_y1[:y], y_pred), predict_models(lms))

lms = fit_models(df_y2, formulas)
acc_2 = map(y_pred -> evaluate_bin(df_y2[:y], y_pred), predict_models(lms))

lms = fit_models(df_y3, formulas)
acc_3 = map(y_pred -> evaluate_bin(df_y3[:y], y_pred), predict_models(lms))

println("Acc Y1: ", acc_1)
println("Acc Y2: ", acc_2)
println("Acc Y3: ", acc_3)


Acc Y1: Array[]
Acc Y2: [0.7133,0.62,0.6667,0.7267,0.7267,0.64,0.72,0.7467,0.7133,0.74]
Acc Y3: [0.8067,0.9667,0.96,0.9533,0.9533,0.96,0.9667,0.98,0.98,0.9867]

Final Multiple Regression Model Y → [:Setosa, :Versicolor, :Virginica]

Selection of the best models that fitted in simple and multiple regression analysis.


In [108]:
f1 = y ~ x1
f2 = y ~ x2 + x3 + x4
f3 = y ~ x1 + x2 + x3 + x4
lm1 = fit_model(df_y1, f1)
lm2 = fit_model(df_y2, f2)
lm3 = fit_model(df_y3, f3)
acc, y_pred = evaluate(df_y[:y], predict_models([lm1, lm2, lm3]))
println("Acc: $acc")
confusion_matrix(df_y[:y], y_pred)


Acc: 0.94
Out[108]:
3x3 Array{Int64,2}:
 50   0   0
  5  43   2
  1   1  48