Frage

Wenn wir eine diskrete Zufallsvariable x und die ihm zugehörigen Daten in X (n), wie in Matlab können wir die Wahrscheinlichkeit Massenfunktion pmf (X) bestimmen?

War es hilfreich?

Lösung

Sie können dies tun, in mindestens acht verschiedenen Arten (einige von ihnen wurden bereits in den anderen Lösungen erwähnt).

sagen, wir haben eine Probe aus einer diskreten Zufallsvariablen:

X = randi([-9 9], [100 1]);

Beachten Sie auch diese gleichwertige Lösungen (beachten Sie, dass ich nicht davon ausgehen, etwas über den Bereich der möglichen Werte, nur, dass sie ganze Zahlen sind):

[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);      %#'

Beachten Sie, dass GRP2IDX verwendet Indizes beginnend bei 1 zu den Einträgen von pmf entsprechend zu erhalten (die Abbildung von labels gegeben ist). Das Ergebnis der oben ist:

>> [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

Andere Tipps

Der folgende Auszug aus der MATLAB Dokumentation zeigt, wie zum Plotten eines Histogramm. Für eine diskrete Wahrscheinlichkeitsfunktion, die Häufigkeitsverteilung könnte mit dem Histogramm identisch sein.

x = -4:0.1:4;
y = randn(10000,1);
n = hist(y,x);
pmf = n/sum(n);
plot(pmf,'o');

Berechnen Sie die Summe aller Elemente in jedem Fach. Teilen Sie alle Behälter durch die Summe Ihrer pdf zu erhalten. Testen Sie Ihre pdf alle Elemente durch Addition. Das Ergebnis muss sein.

Hope Ich habe recht mit meinen Aussagen. Es ist lange her, ...

Wie über diese Funktion?

function Y = pmf(X)
A=tabulate(X)
A(:,3)=A(:,3)/100
Y=A(:,3)'

Ist das richtig Ihrer Meinung nach?

Vielleicht versuchen Sie einfach eine Funktion Griff machen, so dass Sie nicht brauchen, um ein weiteres Array zu speichern:

pmf = @(x) arrayfun(@(y) nnz(DATA==y)/length(DATA),x);

So fügen Sie noch eine weitere Option (da es eine Reihe von Funktionen zur Verfügung zu tun, was Sie wollen), könnte man leicht die pmf berechnen die Funktion mit ACCUMARRAY wenn Ihre diskrete Werte sind ganze Zahlen größer als 0:

pmf = accumarray(X(:),1)./numel(X);

Hier ist ein Beispiel:

>> 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

Wenn ich das richtig verstanden, was Sie tun müssen, ist die pdf zu schätzen, außer es nicht kontinuierlich, sondern diskrete Werte ist.

berechnen die Vorkommen der verschiedenen Werte in X (n) und Teilung durch n. Um zu zeigen, was ich sage, gestatten Sie mir ein Beispiel zu geben. Angenommen, Sie 10 Beobachtungen haben:

X = [1 1 2 3 1 9 12 3 1 2]

dann pmf würde wie folgt aussehen:

pmf(X) = [0.4 0.2 0.2 0 0 0 0 0 0.1 0 0 0.1]

Bearbeiten dieses im Prinzip ist ein Frequenz Histogramm, wie @zellus auch darauf hin, hat darauf

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top