WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

mit einer bestimmten Wahrscheinlichkeit randomisieren

 

Theda

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 18:06     Titel: mit einer bestimmten Wahrscheinlichkeit randomisieren
  Antworten mit Zitat      
Hallo,

ich bin gerade dabei, einen Versuch zu designen. Er hat insgesamt 270 Durchgaenge (trials) und es gibt 6 verschiedene Bedingungen (also 45 trials pro Bedingung). Da der einzelne trial relativ lange braucht und meine Versuchspersonen bestimmt mal ne Pause machen wollen, hatte ich mir ueberlegt, diese 270 trials auf 3 verschiedene "sessions" a 90 Durchgaengen aufzuteilen. Gibt es irgendwie die Moeglichkeit, Matlab zu sagen, dass pro session alle Bedingungen in etwa gleichviel auftauchen sollen? Ich habe es bislang mit der randperm-Funktion nur hinbekommen, dass pro session 2 Bedingungen randomisiert praesentiert werden, der Rest allerdings gar nicht. Ich bin mir nicht sicher, aber das koennte meine Ergebnisse natuerlich extrem verfaelschen, wenn in session 1 nur Bedingungen 1 und 2 praesentiert werden, in session 2 nur 3 und 4 und so weiter. Ich habe auf der mathworks-Seite noch die Funktion randp gefunden (ich haenge sie hier an), aber entweder kann ich nicht richtig mit ihr umgehen oder sie macht einfach nicht das, was ich will. Ich hoffe, mein Geschreibsel war einigermassen verstaendlich und mir kann jemand helfen!

Danke,
Theda

Das ist der Code, so wie ich ihn von dem Mathworks Fileshare bekommen habe:

Code:
function X = randp(P,varargin) ;
% RANDP - pick random values with relative probability
%
%     R = RANDP(PROB,..) returns integers in the range from 1 to
%     NUMEL(PROB) with a relative probability, so that the value X is
%     present approximately (PROB(X)./sum(PROB)) times in the matrix R.
%
%     All values of PROB should be equal to or larger than 0.
%
%     RANDP(PROB,N) is an N-by-N matrix, RANDP(PROB,M,N) and
%     RANDP(PROB,[M,N]) are M-by-N matrices. RANDP(PROB, M1,M2,M3,...) or
%     RANDP(PROB,[M1,M2,M3,...]) generate random arrays.
%     RANDP(PROB,SIZE(A)) is the same size as A.
%
%     Example:
%       R = randp([1 3 2],1,10000)
%       % return a row vector with 10000 values with about 16650% 2
%       histc(R,1:3) ./ numel(R)
%
%       R = randp([1 1 0 0 1],10,1)
%       % 10 samples evenly drawn from [1 2 5]
%      
%
%     Also see RAND, RANDPERM
%              RANDPERMBREAK, RANDINTERVAL, RANDSWAP (MatLab File Exchange)

% Created for Matlab R13+
% version 2.0 (feb 2009)
% (c) Jos van der Geest
% email: jos@jasen.nl
%
% File history:
% 1.0 (nov 2005) - created
% 1.1 (nov 2005) - modified slightly to check input arguments to RAND first
% 1.2 (aug 2006) - fixed bug when called with scalar argument P
% 2.0 (feb 2009) - use HISTC for creating the integers (faster and simplier than
%                  previous algorithm)

error(nargchk(2,Inf,nargin)) ;

try
    X = rand(varargin{:}) ;    
catch
    E = lasterror ;
    E.message = strrep(E.message,'rand','randp') ;
    rethrow(E) ;
end

P = P(:) ;

if any(P<0),
    error('All probabilities should be 0 or larger.') ;
end

if isempty(P) || sum(P)==0
    warning([mfilename ':ZeroProbabilities'],'All zero probabilities') ;
    X(:) = 0 ;
else
    [junk,X] = histc(X,[0 ; cumsum(P(:))] ./ sum(P)) ;
end

% Method used before version 2
%     X = rand(varargin{:}) ;
%     sz = size(X) ;
%     P = reshape(P,1,[]) ; % row vector
%     P = cumsum(P) ./ sum(P) ;
%     X = repmat(X(:),1,numel(P)) < repmat(P,numel(X),1) ;
%     X = numel(P) - sum(X,2) + 1 ;
%     X = reshape(X,sz) ;
 


Theda

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 18:09     Titel:
  Antworten mit Zitat      
Ich habe es zwar geschafft, mit randp eine Matrix zu erstellen, aber es werden nicht alle Zahlen von 1 bis 270 randomisiert und einige kommen auch mehrmals vor...

Beispiel:

Code:

>> h=randp([1:270],3,90)

h =

  Columns 1 through 26

    85   120   126   227   125   227   110   112    74   268   106   236   224   247   148   162   176    42   219   183   236    88   125   113   256   106
   102   152   136   202    75   202   213   137   224   172   167   252   147   209   182   202   177   146   265   133   233   223    85   109   194   264
   111   152   256   116   259   151   269   170   172   213   109   160   197   157   176   233    96   152   262   236   233   184   245   221   227   199

  Columns 27 through 52

   223   234   154   174    39   261   241   137    69   229   169   244   192   180   215   128   168   176   165   204   139   165   115   159   214   242
    52    94   200   115   260   109   206   235   237   217   244   240   216    66   161   218   102   116   248   114   260    80    57   220    40   234
   243   196   171   137   219   260   179   129   222   175   152   250   264   252   270   210    43   230   232   265   128   216   230   168   258   244

  Columns 53 through 78

   167   197   182   269    80    70   224   255   100    55   262   268   269   220   223   210   201    78   161   255   126   230    27   238   227   140
   213   142   129    47   242   262   239   256   126    88   161   263   237   134   197   234   207   229   267   182    96   239   248    56   231   222
   205   135   243   198   269    36   198   214   115   212   173   223   157   147   174   207   194   270   159   174   150   225   260   166   128   187

  Columns 79 through 90

   214   246    89   189    85   238   157   258   169   178   189   169
   132   237   115   119    57   151   124   215    63   270   256   260
   114   261    85   256   202   114   193    86   192   244   100   259
 
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 02.12.2010, 15:11     Titel:
  Antworten mit Zitat      
Hallo

meinst du so:

Code:

A = randperm(270)
B = reshape(A,90,3)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.12.2010, 15:56     Titel: Re: mit einer bestimmten Wahrscheinlichkeit randomisieren
  Antworten mit Zitat      
Hallo Theda,

Ich habe Schwierigkeiten die Frage zu verstehen. "Trials" und "Bedingungen" sind zwar gängige Begriffe, aber Du sprichst hier über ein Matlab-Programm. Dann ist es einfacher, wenn Du die entsprechenden Matlab-Objekte benennst. Ob diese Objekte, z.B. Zahlen, dann "Bedingungen" oder "Erbsen" sind, spielt ja keine Rolle.

Ich habe ungefähr dies verstanden:
Du hast einen Vektor mit 270 Elementen, die die Werte 1 bis 6 annehmen, jeweils 45 Elemente pro Zahl.
Daraus möchtest Du 3 Gruppen a 90 Elemente erzeugen, wobei die Zahlen zwar gemischt, aber ungefähr gleichverteilt sein sollen.
Wenn das Dein Problem wiedergibt, könnte man das so lösen:
Code:
x = repmat(1:6, 1, 45);
x = x(randperm(length(x)));
x = reshape(x, 90, 3);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.