0

私はRで非常に新しいです。私が取り組んでいる課題があり、多くの問題を抱えています。離散確率分布を定義しました:

s   P(s)
0   1/9
1   4/9
2   1/9
3   0/9
4   1/9
5   0/9
6   0/9
7   1/9
8   0/9
9   1/9

今、私はこの質問に取り組まなければなりません:

R で利用可能な他の分布と一致して、確率分布のサポート関数のファミリを作成します。

f  =  dsidp(d)      # pmf - the height of the curve/bar for digit d
p  =  psidp(d)      # cdf - the probability of a value being d or less
d  =  qsidp(p)      # icdf - the digit corresponding to the given 
                    # cumulative probability p
d[]  =  rsidp(n)    # generate n random digits based on your probability distribution.

誰かがこれらの関数を書き始めるのを手伝ってくれたら、大歓迎です!

4

1 に答える 1

1

まず、データを読み取ります。

dat <- read.table(text = "s   P(s)
0   1/9
1   4/9
2   1/9
3   0/9
4   1/9
5   0/9
6   0/9
7   1/9
8   0/9
9   1/9", header = TRUE, stringsAsFactors = FALSE)

names(dat) <- c("s", "P")

分数 (文字列として表される) を数値に変換します。

dat$P <- sapply(strsplit(dat$P, "/"), function(x) as.numeric(x[1]) / as.numeric(x[2]))

機能:

# pmf - the height of the curve/bar for digit d
dsidp <- function(d) {
  with(dat, P[s == d])
}

# cdf - the probability of a value being d or less
psidp <- function(d) {
  with(dat, cumsum(P)[s == d])
}    

# icdf - the digit corresponding to the given cumulative probability p
qsidp <- function(p)  {
  with(dat, s[sapply(cumsum(P), all.equal, p) == "TRUE"][1])
}   

ノート。一部の確率はゼロであるため、一部の数字は同じ累積確率を持ちます。これらの場合、最下位桁が function によって返されますqsidp

# generate n random digits based on your probability distribution.
rsidp <- function(n) {
  with(dat, sample(s, n, TRUE, P))
}
于 2013-02-16T05:36:51.890 に答える