2013-08-22 4 views
0

Предположим, у меня есть два разных вектора параметров, используемые в качестве входов в функции. Кроме того, предположим, что два вектора параметров имеют разную длину. Есть ли способ вывести все возможные значения этой функции? Я знаю, что если я использую два вектора параметров различной длины, то короткий вектор параметра просто повторяется, так что это не работает. Я могу решить это «вручную», как вы можете видеть ниже. Но я бы хотел найти более эффективный способ расчета всех возможных комбинаций. Ниже приведен пример:Использование векторов параметров различной длины в R

Предположим, что я использую функцию dbinom(), которая имеет в качестве входных данных x (число «успехов» из образца), n (количество наблюдений в выборке) и p (вероятность «успех» для каждого x). n остается постоянным при 20; однако мой x изменяется от 7,8,9, ..., 20 («x7» ниже) или 0,1 («x1» ниже). Кроме того, я хочу оценить dbinom() при разных значениях p, а именно от 0 до 1 дюймов .1 приращений («p» ниже). Как вы можете видеть, три вектора параметров x7, x1 и p имеют разные длины 14, 2 и 11 соответственно.

> p<-seq(from=0,to=1,by=.1) 
> x7<-seq.int(7,20) 
> x1<-c(0,1) 
> n<-20 

можно оценить каждую комбинацию с помощью одного из векторов (х7/x2 или р) в dbinom(), а затем выбрав значение для оставшихся параметра. Как вы можете видеть ниже, я использовал вектор x7 или x2, а затем «вручную» изменил p на равные 0, .1, .2, ..., 1.

> sum(dbinom(x7,n,.1)) 
[1] 0.002386089 
> sum(dbinom(x7,n,.1))+sum(dbinom(x1,n,.1)) 
[1] 0.3941331 
> sum(dbinom(x7,n,.2))+sum(dbinom(x1,n,.2)) 
[1] 0.1558678 
> sum(dbinom(x7,n,.3))+sum(dbinom(x1,n,.3)) 
[1] 0.3996274 
> sum(dbinom(x7,n,.4))+sum(dbinom(x1,n,.4)) 
[1] 0.7505134 
> sum(dbinom(x7,n,.5))+sum(dbinom(x1,n,.5)) 
[1] 0.9423609 
> sum(dbinom(x7,n,.6))+sum(dbinom(x1,n,.6)) 
[1] 0.9935345 
> sum(dbinom(x7,n,.7))+sum(dbinom(x1,n,.7)) 
[1] 0.999739 
> sum(dbinom(x7,n,.8))+sum(dbinom(x1,n,.8)) 
[1] 0.9999982 
> sum(dbinom(x7,n,.9))+sum(dbinom(x1,n,.9)) 
[1] 1 
> sum(dbinom(x7,n,1))+sum(dbinom(x1,n,1)) 
[1] 1 

В принципе, я хочу знать, если есть способ, чтобы получить R печатать все суммы выше от 0.3941331,0.1558678, ..., 1, с одной строкой ввода или каким-либо другим более эффективным способом изменяя параметр p без простого копирования и изменения p на каждой строке.

* Я новичок в Stackoverflow, поэтому заранее извиняюсь, если не сформулировал свой вопрос традиционно.

+1

Что вы пытаетесь достичь с помощью 'суммы (dbinom (....))', конечно, вы хотите 'pbinom '? – mnel

ответ

1

Вы используете dbinom с диапазоном значений x, а затем суммируете. Вместо этого используется pbinom, который вычисляет тогда вероятность P(x <=q) (или P(x >q), если lower.tail = FALSE).

Таким образом, вы можете вычислить P(x >6) + P(q <= 1) (что вы, кажется, хотите вычислить)

pbinom(q = 6, p = p ,size = n, lower.tail = FALSE) + pbinom(q = 1, p = p, size = n) 
Смежные вопросы