Domanda

C'è una funzione in R che monta una curva di un istogramma?

Diciamo che ha avuto il seguente istogramma

hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))

Sembra normale, ma è inclinata.Voglio montare un normale curva è inclinata per avvolgere intorno a questo istogramma.

Questa domanda è piuttosto semplice, ma non riesco a trovare la risposta per R su internet.

È stato utile?

Soluzione

Se ho capito bene la tua domanda, allora probabilmente vuole una stima della densità con l'istogramma:

X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))
hist(X, prob=TRUE)            # prob=TRUE for probabilities not counts
lines(density(X))             # add a density estimate with defaults
lines(density(X, adjust=2), lty="dotted")   # add another "smoother" density

Modifica molto tempo dopo:

Ecco una versione leggermente più a vestito:

X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))
hist(X, prob=TRUE, col="grey")# prob=TRUE for probabilities not counts
lines(density(X), col="blue", lwd=2) # add a density estimate with defaults
lines(density(X, adjust=2), lty="dotted", col="darkgreen", lwd=2) 

insieme con il grafico produce:

entrare descrizione dell'immagine qui

Altri suggerimenti

cosa del genere è facile con il ggplot2

library(ggplot2)
dataset <- data.frame(X = c(rep(65, times=5), rep(25, times=5), 
                            rep(35, times=10), rep(45, times=4)))
ggplot(dataset, aes(x = X)) + 
  geom_histogram(aes(y = ..density..)) + 
  geom_density()

o per simulare il risultato dalla soluzione di Dirk

ggplot(dataset, aes(x = X)) + 
  geom_histogram(aes(y = ..density..), binwidth = 5) + 
  geom_density()

Ecco il mio modo di farlo:

foo <- rnorm(100, mean=1, sd=2)
hist(foo, prob=TRUE)
curve(dnorm(x, mean=mean(foo), sd=sd(foo)), add=TRUE)

Un esercizio bonus è di farlo con il pacchetto ggplot2 ...

Dirk ha spiegato come tracciare la funzione di densità sopra l'istogramma. Ma a volte si potrebbe desiderare di andare con il più forte assunzione di una distribuzione normale asimmetrica e la trama che invece di densità. È possibile stimare i parametri della distribuzione e tracciare utilizzando il sn pacchetto :

> sn.mle(y=c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
$call
sn.mle(y = c(rep(65, times = 5), rep(25, times = 5), rep(35, 
    times = 10), rep(45, times = 4)))

$cp
    mean     s.d. skewness 
41.46228 12.47892  0.99527 

Skew-normale trama di dati distribuiti

Questo probabilmente funziona meglio sui dati che è più skew-normale:

Un altro complotto skew-normal

Ho avuto lo stesso problema, ma Dirk soluzione non sembra funzionare.Mi è stato sempre questo avviso messege ogni volta

"prob" is not a graphical parameter

Ho letto ?hist e trovato circa freq: a logical vector set TRUE by default.

il codice che ha funzionato per me è

hist(x,freq=FALSE)
lines(density(x),na.rm=TRUE)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top