2015-06-28 16 views
5

Sto cercando di calcolare la media della deviazione media di un campione ("S") di numeri. I risultati che ottengo quando si utilizza la funzione "mad()" e quando si effettuano i calcoli di deviazione media media un passo alla volta sono diversi. Perché?Perché i risultati di mad (x) differiscono dai risultati attesi?

s<- c(100,110,114,121,130,130,160) 

Utilizzando il "pazzo()" la funzione, ottengo:

> mad(s) 
[1] 13.3434 

Quando abbattere la formula e fare la stessa operazione un passo alla volta, ottengo:

> sum(abs(s-mean(s)))/length(s) 
[1] 14.08163 

Perché questi risultati differiscono?

Sto facendo un errore quando si immette la mia formula? (Questo non sarebbe sorprendente - sto solo iniziando a imparare R). Cosa c'è di sbagliato nella mia formula?

Oppure è la formula che R utilizza per calcolare la deviazione media medio differente dalla seguente (reso Wikipedia)

MAD = (somma di (valori assoluti (ogni valore meno valore medio per esempio))) diviso per (il numero di valori nel campione)?

(Grazie per il vostro aiuto!)

risposta

8

"MAD" è, purtroppo, un termine con molteplici significati; deviazione assoluta media dalla media (talvolta chiamata semplicemente MD o deviazione media), deviazione assoluta mediana dalla mediana, deviazione assoluta media dalla mediana (che si verifica quando si calcola la scala in un Laplace), ecc. Wikipedia - mentre spesso utile - - non è l'arbitro dell'uso; a volte può essere un po 'idiosincratico nel suo uso dei termini (che non è particolarmente una critica di Wikipedia, è in parte inerente alla natura della cosa). [Personalmente, in assenza di ulteriori indizi, interpreterei normalmente la MAD come deviazione assoluta mediana dalla mediana, e mi aspetto una deviazione assoluta media dalla media se non scritta completamente per essere scritta come "deviazione media"/"MD" o " deviazione media assoluta"]

la questione di cui R sta calcolando viene risolto mediante il semplice espediente di ?mad:.

mad {stats} R Documentation 

Median Absolute Deviation 

Description 

Compute the median absolute deviation, i.e., the (lo-/hi-) median of the 
absolute deviations from the median, and (by default) adjust by a factor 
for asymptotically normal consistency. 

Proprio come un suggerimento generale, quando si utilizza una funzione per la prima volta, don' Supponiamo che tu sappia cosa sta facendo. Ad esempio, prima di leggere l'aiuto per MAD per la prima volta, I non si aspettava che si moltiplicasse per quella costante come predefinito. (Penso che sia una cattiva idea, dal momento che per impostazione predefinita non calcola in realtà nulla di chiamato MAD, ma invece una stima robusta di σ per una popolazione in cui la parte non contaminata è gaussiana - ma è così che funziona.)

La maggior parte delle funzioni farà ciò che si pensa di fare, ma alcuni potrebbero sorprenderti. Controlla le definizioni nella guida, guarda come sono definiti gli input e gli output e prova gli esempi.

Per inciso se si desidera una deviazione mediana (assoluta) dalla media, è possibile ottenerla entro mad(x,mean(x),1). Ma se si desidera che lo10 si traduca nella deviazione dalla media, non so se c'è qualcosa di più semplice da scrivere rispetto a mean(abs(x-mean(x))); ha almeno il vantaggio di essere completamente esplicito.

+0

Grazie per la risposta! Stavo provando ad arrivare alla deviazione media dalla media (per un campione/vettore (X <-), e non mi sono reso conto che matto (X) –

1

Come suggerito da @Glen_b, mad fa più che applicare una formula, inclusa una "correzione" per coerenza con normalità.

sembrare un esempi:

#with mad 
mad(s) 
mad(s,center= mean(s)) 

# using formulas 
sum(abs(s-median(s)))/length(s) 
sum(abs(s-mean(s)))/length(s) 

> mad(s) 
[1] 13.3434 
> mad(s,center= mean(s)) 
[1] 14.1906 
> 
> sum(abs(s-median(s)))/length(s) 
[1] 13.71429 
> sum(abs(s-mean(s)))/length(s) 
[1] 14.08163 
+0

Grazie! Non mi sono reso conto che il matto() Ho fatto qualcosa oltre a quella che la formula media di deviazione media di base richiede. Tu e glen_b avete completamente risposto alla mia domanda –

0

Come extra, se si sta cercando di calcolare la deviazione assoluta mediana dalla mediana, tipo

mad(s,constant=1) 
+0

Mi dispiace scriverlo ma la vostra risposta mi sembra più un commento che una risposta completa. –

Problemi correlati