Si tenemos una variable aleatoria discreta xy los datos correspondientes a ella en X (n), ¿cómo en matlab podemos determinar la función de masa de probabilidad pmf (X)?Determinar la probabilidad de la función de masa de la variable aleatoria
Respuesta
Puede hacer esto en al menos ocho formas diferentes (algunas de ellas ya se mencionaron en las otras soluciones).
Digamos que tenemos una muestra de una variable aleatoria discreta:
X = randi([-9 9], [100 1]);
Considere estas soluciones equivalentes (nótese que no compromete nada sobre el rango de valores posibles, sólo que son números enteros):
[V,~,labels] = grp2idx(X);
mx = max(V);
%# TABULATE (internally uses HIST)
t = tabulate(V);
pmf1 = t(:, 3) ./ 100;
%# HIST (internally uses HISTC)
pmf2 = hist(V, mx)' ./ numel(V); %#'
%# HISTC
pmf3 = histc(V, 1:mx) ./ numel(V);
%# ACCUMARRAY
pmf4 = accumarray(V, 1) ./ numel(V);
%# SORT/FIND/DIFF
pmf5 = diff(find([diff([0;sort(V)]) ; 1])) ./ numel(V);
%# SORT/UNIQUE/DIFF
[~,idx] = unique(sort(V));
pmf6 = diff([0;idx]) ./ numel(V);
%# ARRAYFUN
pmf7 = arrayfun(@(x) sum(V==x), 1:mx)' ./ numel(V); %#'
%# BSXFUN
pmf8 = sum(bsxfun(@eq, V, 1:mx))' ./ numel(V); %#'
nota que GRP2IDX se utilizó para obtener los índices a partir de 1 correspondientes a las entradas de pmf
(el mapeo está dada por labels
).El resultado de lo anterior es:
>> [labels pmf]
ans =
-9 0.03
-8 0.07
-7 0.04
-6 0.07
-5 0.03
-4 0.06
-3 0.05
-2 0.05
-1 0.06
0 0.05
1 0.04
2 0.07
3 0.03
4 0.09
5 0.08
6 0.02
7 0.03
8 0.08
9 0.05
relacionado: http://stackoverflow.com/a/2885175/ 97160 – Amro
El siguiente extracto de MATLAB documentation muestra cómo trazar un histograma. Para una función de probabilidad discreta, la distribución de frecuencia podría ser idéntica a la del histograma.
x = -4:0.1:4;
y = randn(10000,1);
n = hist(y,x);
pmf = n/sum(n);
plot(pmf,'o');
Calcular la suma de todos los elementos en cada contenedor. Divida todos los contenedores por la suma para obtener su pdf. Pruebe su pdf agregando todos los elementos. El resultado debe ser uno.
Espero estoy de acuerdo con mis declaraciones. Es un largo tiempo desde ...
Si entendí correctamente lo que debe hacer es estimar el pdf, excepto que no es un valor continuo sino discreto.
Calcule las ocurrencias de diferentes valores en X (n) y divida por n. Para ilustrar lo que estoy diciendo, permítanme dar un ejemplo. Suponga que tiene 10 observaciones:
X = [1 1 2 3 1 9 12 3 1 2]
entonces su PMF se vería así:
pmf(X) = [0.4 0.2 0.2 0 0 0 0 0 0.1 0 0 0.1]
edición: esto es, en principio, un histograma de frecuencias, como @zellus también ha señalado
¿Qué tal esta función?
function Y = pmf(X)
A=tabulate(X)
A(:,3)=A(:,3)/100
Y=A(:,3)'
¿Es esto correcto en tu opinión?
Tal vez trate de hacer sólo un identificador de función de modo que no es necesario almacenar otra matriz:
pmf = @(x) arrayfun(@(y) nnz(DATA==y)/length(DATA),x);
Para añadir otra opción (ya que hay un número de funciones disponibles para hacer lo que quiere), usted puede fácilmente calcular el PMF usando la función ACCUMARRAY si sus valores discretos son números enteros mayores que 0:
pmf = accumarray(X(:),1)./numel(X);
He aquí un ejemplo:
>> X = [1 1 1 1 2 2 2 3 3 4]; %# A sample distribution of values
>> pmf = accumarray(X(:),1)./numel(X) %# Compute the probability mass function
pmf =
0.4000 %# 1 occurs 40% of the time
0.3000 %# 2 occurs 30% of the time
0.2000 %# 3 occurs 20% of the time
0.1000 %# 4 occurs 10% of the time
En su lugar usaría: 'pmf = accumarray (X (:), 1); pmf = pmf./sum (pmf); '(numéricamente más estable: una división en lugar de agregar múltiples fracciones) – Amro
@Amro: Muy cierto. Eso reduciría la acumulación de posibles errores de coma flotante. La respuesta ha sido actualizada. – gnovice
también debe tener en cuenta que si el rango de valores posibles no comienza en '1', obtendrá muchos ceros adicionales al principio. Intente ejecutar lo anterior con 'X = X + 100;' (una llamada a GRP2IDX puede resolver este problema) Lo mismo aplica para la solución TABULATE de @SkypeMeSM .. – Amro
- 1. Visualize 2 variable función de masa de probabilidad conjunta en R
- 2. Elija la variable de lista dada la probabilidad de cada variable
- 3. Densidad de probabilidad de trazado/función de masa del conjunto de datos en R
- 4. Dada una variable aleatoria con función de densidad de probabilidad f (x), ¿cómo calcular el valor esperado de esta variable aleatoria en R?
- 5. ¿Cómo determinar si la variable es una función en Python?
- 6. sintaxis para llamar a la función aleatoria de una lista
- 7. Calculando probabilidad de una variable aleatoria en una distribución en Python
- 8. Seleccionar una fila aleatoria de MySQL (con probabilidad)
- 9. Variable aleatoria dinámica de Jmeter
- 10. Asignar a la variable de la función madre: "La variable local referenciado antes de la asignación"
- 11. ¿La función aleatoria de Java puede ser cero?
- 12. ¿Variable de Javascript fuera de la función?
- 13. Declarar la variable en la función de valores de tabla
- 14. Determinar el nombre original de la variable después de pasarla a una función
- 15. Alcance variable fuera de la función jQuery
- 16. llamada de función python con la variable
- 17. variable de la función Javascript preestablecer
- 18. determinar el comportamiento de la función del tipo de la función
- 19. Fila aleatoria de Oracle de la tabla
- 20. jQuery - use la variable como nombre de la función
- 21. Haciéndose eco de una variable aleatoria
- 22. ¿Cuál es la función más aleatoria en C++?
- 23. ¿Cómo funciona la masa máxima de despegue + ejemplo de código
- 24. dirigiendo una masa de enemigos a la vez
- 25. función aleatoria en DrRacket
- 26. ¿Cómo diseñar la función de probabilidad de aceptación para el recocido simulado con múltiples costos distintos?
- 27. Implementar la función de distribución de probabilidad en el problema Java
- 28. generación aleatoria en la lista FSharp
- 29. determinar la longitud de la cadena de texto de DB2
- 30. ¿Cómo calculo la probabilidad de un cuantil determinado en R?
¿Qué es el "pmf" del conjunto de datos (matemáticamente)? – rubenvb
http://en.wikipedia.org/wiki/Probability_mass_function – zellus
¿debería pmf (X) ser la distribución de frecuencia normalizada de X? En caso afirmativo, ¿tenemos alguna función en Matlab para calcularla? – SkypeMeSM