1

データセットのシミュレーションに支援が必要です。

信号検出理論タスクで考えられるすべての結果をシミュレートすることになっています(参加者には試行が提示され、特定の信号を検出したかどうかを判断する必要があります)。ここで、さまざまな試行回数のすべての可能な値のデータセットが必要です。

たとえば、6回の試行があり、5回は信号が存在し、5回は信号が存在しません。正しい検出(ヒット)と誤警報(タイプIエラー)にのみ関心があります。参加者は、1(0は必要ありません)と5の間を正しく検出し、同じ数の誤警報を出すことができます。考えられるすべての組み合わせで、それぞれ5^2のケースを持つ2つの変数を含むデータセットになります。さらに複雑にするために、試行回数も可変です。信号と非信号の両方の試行の数は1から20の間で変化する可能性がありますが、試行の総数は3未満にすることはできません(1つのS試行と2つの非S試行、またはその逆)。そして、試行の可能な組み合わせごとに、ヒットと誤警報の可能な組み合わせのグループがあります。

必要なのは、5つの変数(合計N、NのS試行、Nの非S試行、Nのヒット、およびNの誤警報)とすべての可能な値を持つデータセットです。

ここに、合計Nが4の場合のすべての可能なデータがあります。Signal+ Noise = N_totalであり、N_Hit seq(1:Signal)およびN_FA seq(1:Noise)であることに注意してください。

N_total   Signal   Noise  N_Hit  N_FA
  4         1        3      1     1
  4         1        3      1     2
  4         1        3      1     3
  4         2        2      1     1
  4         2        2      1     2
  4         2        2      2     1
  4         2        2      2     2
  4         3        1      1     1
  4         3        1      2     1
  4         3        1      3     1

私はR初心者なので、どんな助けでも大歓迎です!

説明が明確であることを願っています。

4

1 に答える 1

0

試行回数をパラメーターとして使用する関数を作成しました。

myfunc <- function(n) {

  # create a data frame of all combinations
  grid <- expand.grid(rep(list(seq_len(n - 1)), 4))

  # remove invalid combinations (keep valid ones)
  grid <- grid[grid[3] <= grid[1] &         # number of hits <= number of signals
               grid[4] <= grid[2] &         # false alarms <= noise
               (grid[1] + grid[2]) == n , ] # signal and noise sum to total n

  # remove signal and noise > 20
  grid <- grid[!rowSums(grid[1:2] > 20), ]

  # sort rows
  grid <- grid[order(grid[1], grid[3], grid[4]), ]

  # add total number of trials
  res <- cbind(n, grid)

  # remove row names, add column names and return the object
  return(setNames("rownames<-"(res, NULL),
                  c("N_total", "Signal", "Noise", "N_Hit", "N_FA"))) 


}

関数を使用します。

> myfunc(4)
   N_total Signal Noise N_Hit N_FA
1        4      1     3     1    1
2        4      1     3     1    2
3        4      1     3     1    3
4        4      2     2     1    1
5        4      2     2     1    2
6        4      2     2     2    1
7        4      2     2     2    2
8        4      3     1     1    1
9        4      3     1     2    1
10       4      3     1     3    1

この関数を値 3 ~ 40 に適用する方法:

lapply(3:40, myfunc)

これにより、データ フレームのリストが返されます。

于 2013-02-12T12:25:44.057 に答える