martes, 24 de septiembre de 2013

julia tiene un sistema de paquetes de extensión, y para uso para análisis de datos tenemos el
paquete DataFrames, que se base en data.frames como originalmente implementado en R/S. Para usarlo tenemos que escribir:

julia> using DataFrames

y ahora tenemos acceso a las definiciones del paquete. Primero, implementa un valor especial NA  "no accesible" para representar valores de variables desconocidos:

julia> NA
NA

julia> NA+1
NA

julia> sin(NA)
NA

Hacemos un vector de datos:  (el tipo DataArray)

julia> dv =DataArray([1,4,2,9,4,5,2])
7-element DataArray{Int64,1}:
 1
 4
 2
 9
 4
 5
 2

julia> length(dv)
7

julia> size(dv)
(7,)

Podemos asignar NA a uno de los elementos:

julia> dv[2]=NA
NA

julia> dv'
1x7 DataArray{Int64,2}:
 1  NA  2  9  4  5  2

Note el uso de ' para transposición! (Y aqui, para ahorrar espacio).

julia> mean(dv)
NA

¿Podemos calcular el promedio de los elementos que no es NA?  Usamos la función 
removeNA:

julia> removeNA(dv)
6-element Array{Int64,1}:
 1
 2
 9
 4
 5
 2

julia> mean(removeNA(dv))
3.8333333333333335

Ahora construimos un DataFrame, una  cierta matriz de filas y coumnas, donde cada columna es un 
DataArray:

julia> df=DataFrame(A=1:5, B=["M","M","H","H","M"])
5x2 DataFrame:
        A   B
[1,]    1 "M"
[2,]    2 "M"
[3,]    3 "H"
[4,]    4 "H"
[5,]    5 "M"


julia> describe(df)
A
Min      1.0
1st Qu.  2.0
Median   3.0
Mean     3.0
3rd Qu.  4.0
Max      5.0
NAs      0
NA%      0.0%

B
Length  5
Type    ASCIIString
NAs     0
NA%     0.0%
Unique  2

julia> size(df)
(5,2)

julia> length(df)
2

Veremos unos conjuntos de datos clasicos contenido en R:

julia> using RDatasets

julia> anscombe = data("datasets","anscombe")
11x9 DataFrame:
            x1 x2 x3 x4    y1   y2    y3   y4
[1,]      1 10 10 10  8  8.04 9.14  7.46 6.58
[2,]      2  8  8  8  8  6.95 8.14  6.77 5.76
[3,]      3 13 13 13  8  7.58 8.74 12.74 7.71
[4,]      4  9  9  9  8  8.81 8.77  7.11 8.84
[5,]      5 11 11 11  8  8.33 9.26  7.81 8.47
[6,]      6 14 14 14  8  9.96  8.1  8.84 7.04
[7,]      7  6  6  6  8  7.24 6.13  6.08 5.25
[8,]      8  4  4  4 19  4.26  3.1  5.39 12.5
[9,]      9 12 12 12  8 10.84 9.13  8.15 5.56
[10,]    10  7  7  7  8  4.82 7.26  6.42 7.91
[11,]    11  5  5  5  8  5.68 4.74  5.73 6.89


julia> describe(anscombe)

Min      1.0
1st Qu.  3.5
Median   6.0
Mean     6.0
3rd Qu.  8.5
Max      11.0
NAs      0
NA%      0.0%

x1
Min      4.0
1st Qu.  6.5
Median   9.0
Mean     9.0
3rd Qu.  11.5
Max      14.0
NAs      0
NA%      0.0%

x2
Min      4.0
1st Qu.  6.5
Median   9.0
Mean     9.0
3rd Qu.  11.5
Max      14.0
NAs      0
NA%      0.0%

x3
Min      4.0
1st Qu.  6.5
Median   9.0
Mean     9.0
3rd Qu.  11.5
Max      14.0
NAs      0
NA%      0.0%

x4
Min      8.0
1st Qu.  8.0
Median   8.0
Mean     9.0
3rd Qu.  8.0
Max      19.0
NAs      0
NA%      0.0%

y1
Min      4.26
1st Qu.  6.3149999999999995
Median   7.58
Mean     7.500909090909093
3rd Qu.  8.57
Max      10.84
NAs      0
NA%      0.0%

y2
Min      3.1
1st Qu.  6.695
Median   8.14
Mean     7.500909090909091
3rd Qu.  8.95
Max      9.26
NAs      0
NA%      0.0%

y3
Min      5.39
1st Qu.  6.25
Median   7.11
Mean     7.500000000000001
3rd Qu.  7.98
Max      12.74
NAs      0
NA%      0.0%

y4
Min      5.25
1st Qu.  6.17
Median   7.04
Mean     7.50090909090909
3rd Qu.  8.190000000000001
Max      12.5
NAs      0
NA%      0.0%


julia> size(anscombe)
(11,9)

julia> length(anscombe)
9

julia> typeof(anscombe)
DataFrame (constructor with 22 methods)

julia> colnames(anscombe)
9-element Array{Union(ASCIIString,UTF8String),1}:
 ""  
 "x1"
 "x2"
 "x3"
 "x4"
 "y1"
 "y2"
 "y3"
 "y4"

Eso es "anscombes quartet", un conjunto de data clasico, construido para mostrar que pares de variables 
(x,y) puede tener exactamente los mismos valores de muchas estadisticos descriptivos, como correlación, coeficientes de regresión, etc, pero, sim embargo, tener plots muy diferentes!

Podemos investigar eso con julia?

julia> using GLM

julia> using Distributions

julia> colnames(anscombe)
9-element Array{Union(ASCIIString,UTF8String),1}:
 ""  
 "x1"
 "x2"
 "x3"
 "x4"
 "y1"
 "y2"
 "y3"
 "y4"

julia> a1 = lm(:(y1 ~ x1), anscombe)

Formula: y1 ~ x1

Coefficients:

2x4 DataFrame:
        Estimate Std.Error t value   Pr(>|t|)
[1,]     3.00009   1.12475 2.66735  0.0257341
[2,]    0.500091  0.117906 4.24146 0.00216963



julia> a2 = lm(:(y2 ~ x2), anscombe)

Formula: y2 ~ x2

Coefficients:

2x4 DataFrame:
        Estimate Std.Error t value   Pr(>|t|)
[1,]     3.00091    1.1253 2.66676  0.0257589
[2,]         0.5  0.117964 4.23859 0.00217882

Aqui, la "Formula" en :(y2 ~ x2)  se interpreta como en R.  

En otro blog veremos como hacer plots!






No hay comentarios:

Publicar un comentario