Como encontrar / estimar a função densidade de probabilidade a partir da função densidade em R

17

Suponha que eu tenha uma variável como Xcom distribuição desconhecida. No Mathematica, usando a SmoothKernelDensityfunção, podemos ter uma função de densidade estimada. Essa função de densidade estimada pode ser usada juntamente com a PDFfunção para calcular a função de densidade de probabilidade de um valor como Xna forma de PDF[density,X]assumir que "densidade" é o resultado de SmoothKernelDensity. Seria bom se houvesse esse recurso no R.É assim que funciona no Mathematica

http://reference.wolfram.com/mathematica/ref/SmoothKernelDistribution.html

Como um exemplo (baseado nas funções do Mathematica):

data = RandomVariate[NormalDistribution[], 100]; #generates 100 values from N(0,1)

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Aqui você pode encontrar mais informações sobre PDF:

http://reference.wolfram.com/mathematica/ref/PDF.html

Eu sei que posso plotar sua função de densidade usando density(X)em R e usando ecdf(X)posso obter sua função de distribuição cumulativa empírica. É possível fazer a mesma coisa em R com base no que descrevi sobre o Mathematica?

Qualquer ajuda e idéia são apreciadas.

Amin
fonte
density(x)fornece uma estimativa do pdf, como você já notou, mas sua adequação depende da finalidade para a qual você deseja ter a densidade. Observe, por exemplo, que a variação é tendenciosa (na execução da convolução, você adiciona a variação do kernel à variação dos dados, ela própria uma estimativa imparcial) - essas trocas de variação de variação são onipresentes. Existem outras alternativas, como a estimativa da densidade do log-spline, por exemplo - mas, novamente, sua adequação depende em parte do que você deseja fazer com ela.
Glen_b -Reinstala Monica
@Glen_b Eu quero usar a densidade estimada para encontrar a probabilidade de outros valores na distribuição. Por exemplo, eu tenho um vetor de dados que varia de 0 a 10. Esse conjunto de dados contém apenas 70 valores exclusivos entre 0 e 10. Posso plotar a densidade. Agora, suponha que eu esteja interessado em encontrar a probabilidade de ter X = 7,5, que não está nos dados observados, em uma amostra aleatória. Como posso obtê-lo? Eu sei que isso ecdf(X)me dá o percentil equivalente a 7,5, mas não é o que estou procurando.
Amin
" encontrando a probabilidade de ter X = 7,5 " - aí está o seu problema! Você tem uma distribuição contínua (nesse caso, a resposta real é "0") ou não (nesse caso, não deve usar estimativa de densidade, porque não possui densidade).
Glen_b -Reinstala Monica
1
ecdf(b)-ecdf(a)P(uma<Xb)<X P(X=7,5)
1
Desculpe, isso foi um erro. Quero dizer a proporção da amostra de valores que são 7,5; meu filho me distraiu enquanto eu digitava as últimas palavras. Sua estimativa amostral da probabilidade de um evento não observado é zero. Deseja aplicar uma prévia? Deseja um intervalo de confiança para a proporção em vez de uma estimativa pontual? Seu problema real ainda não é um problema R, mas explica corretamente o que você realmente deseja. Você provavelmente deve editar sua pergunta ou postar uma nova.
Glen_b -Reinstala Monica

Respostas:

35

?densitysalienta que já approxfaz interpolação linear; ?approxsalienta que approxfungera uma função adequada:

x <- log(rgamma(150,5))
df <- approxfun(density(x))
plot(density(x))
xnew <- c(0.45,1.84,2.3)
points(xnew,df(xnew),col=2)

insira a descrição da imagem aqui

Ao usar a integratepartir de uma distância apropriada abaixo do mínimo na amostra (um múltiplo - digamos 4 ou 5, talvez - da largura de banda usada dfgeralmente faria para uma distância apropriada), é possível obter uma boa aproximação do cdf correspondente a df.

Glen_b -Reinstate Monica
fonte
isto é interessante. Parece que df(2.3)fornece o valor da função de densidade estimada, x=2.3mas o que PDFfaz no Mathematica está fornecendo a área sob a curva acima x=2.3. Eu não tenho muita certeza disso. Isso é apenas o meu palpite. Você pode reproduzir o que eu fiz no Mathematica?
Amin
Minha função acima mostra demonstrativamente uma estimativa baseada em kernel de uma "função de densidade de probabilidade" ... "avaliada em x". Você quer isso ou não. Se você não fizer isso, você tem que explicar o que você não quer - em termos estatísticos, e não apenas como 'reproduzir este comportamento'.
Glen_b -Reinstala Monica 6/12
Penso que, por engano e sem querer, promovi que a densidade é uma probabilidade que não é. Não pretendia ser enganador. Se você acha que, PDFno Mathematica, faz o que descreveu em sua resposta (ou seja, encontrar o valor da função de densidade para um determinado valor X), acho que recebi minha resposta. Apenas há muita confusão no uso de palavras!
Amin
2
Pelo que a PDFpágina diz que faz, ela retorna o mesmo tipo de coisa que eu faço, mas os métodos que ela usa em seu cálculo nesse caso provavelmente são um pouco mais precisos (para esse propósito, a precisão adicional tem pouco valor, no entanto). Para alguma discussão sobre a distinção probabilidade / densidade, veja aqui e aqui .
Glen_b -Reinstate Monica