Help with mean absolute deviation function (MAD).

73 views
Skip to first unread message

Daniel Carrera

unread,
Jul 27, 2016, 5:50:02 AM7/27/16
to julia-stats
Hello,

My "mad" function seems to be broken. Maybe I just don't know how to use it right:

julia> using StatsBase

julia> @doc mad
  No documentation found.

  StatsBase.mad is a generic Function.

  # 2 methods for generic function "mad":
  mad{T<:Real}(v::Range{T<:Real}, args...) at /home/daniel/.julia/v0.4/StatsBase/src/scalarstats.jl:180
  mad{T<:Real}(v::AbstractArray{T<:Real,N}, args...) at /home/daniel/.julia/v0.4/StatsBase/src/scalarstats.jl:179

julia> mad([1,2,3,4])
ERROR: InexactError()
 in mad! at /home/daniel/.julia/v0.4/StatsBase/src/scalarstats.jl:184
 in mad! at /home/daniel/.julia/v0.4/StatsBase/src/scalarstats.jl:183
 in mad at /home/daniel/.julia/v0.4/StatsBase/src/scalarstats.jl:179

julia> 



Does anyone know what's happening? Also, I am confused by the "constant" parameter. The documentation says:

mad(x[center][; constant=1.4826])

Compute the median absolute deviation of x.

One can optionally supply the center. By default, constant=1.4826 for consistent estimation of the standard deviation of a normal distribution.




Does this mean that, by default, the mad() function doesn't give you the MAD, bunt instead it gives you MAD*1.4826 ?

Thanks for the help.

Cheers,
Daniel.




j verzani

unread,
Jul 27, 2016, 9:49:22 AM7/27/16
to julia-stats
It seems `mad` calls `mad!` with a copy. The mad! function reuses the copied vector for storage. As the differences from the median are not integers you get an assignment error. That's fussy and should be easily addressed. The multiplier is also done by default in R so that the units of spread for mad and sd are similar.

Daniel Carrera

unread,
Jul 27, 2016, 9:55:21 AM7/27/16
to julia...@googlegroups.com
Thanks.

Why can't the MAD just be implemented as `mad(x) = median(abs(x - median(x)))` ?

Cheers,
Daniel.

--
You received this message because you are subscribed to a topic in the Google Groups "julia-stats" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/julia-stats/zQDssmSjdyo/unsubscribe.
To unsubscribe from this group and all its topics, send an email to julia-stats...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Andreas Noack

unread,
Jul 27, 2016, 9:59:07 AM7/27/16
to julia...@googlegroups.com
median(abs(x - median(x))) probably creates three temporaries which is the reason to do this in place. The mad function should promote integers to floats before calling mad!. Please file an issue.

--
You received this message because you are subscribed to the Google Groups "julia-stats" group.
To unsubscribe from this group and stop receiving emails from it, send an email to julia-stats...@googlegroups.com.

Daniel Carrera

unread,
Jul 27, 2016, 3:38:02 PM7/27/16
to julia...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages