-1

Rも一般統計も私の強みではありません。そのため、クライアント向けのビルドの一環として、いくつかのグラフに二項データをプロットするように要求し、期待する結果を得るために使用するいくつかの式を提供してくれました。

CentOS VPSを使用しているため、これらの式はExcelにあります.Rをインストールして実行しましたが、使用する正しい関数を見つけることができませんでした.

現在、最新の R ラボと Binom パッケージがインストールされています。Rscript を使用して計算を行い、PHP と Pchart を使用して実際のグラフを生成しています。

プロットされるデータは 4 つの二項曲線で、アルファはそれぞれ 0.9995、0.0005、0.995、0.005 で、n は X 軸上の位置です。

この場合 (読みやすくするためにセル番号を sudo 変数に置き換えます):

start = 1
xaxis = 0 (increments)
p = 0.01
alpha = 0.005
B = 1.7

エクセル式:

n = start+ROUNDDOWN(xaxis*EXP(1)^B,0)
critB = CRITBINOM(n,p,alpha)
Low-adj = critB-(BINOMDIST(critB,n,p,TRUE)-alpha)/(BINOMDIST(critB,n,p,TRUE)-BINOMDIST(critB-1,n,p,TRUE))
Low Alert = IF(ISERROR(100*Low-adj/n)=TRUE,"",Low-adj/n)

上記は何も返さず、xaxis = 14 になるまで継続する必要があります。期待される結果は次のとおりです。 Low Alert = 0.000156

これを処理するためにRscriptを書くのを手伝ってくれる人はいますか? 私は binom.confinit() を使用していましたが、クライアントが上記に戻ってきたので、binom.confinit をこれを実現するスクリプトに置き換える必要があります。

これはウェブサイトの一部であり、1 回限りではなく、したがって php / pchart であり、gnumeric ではないことに注意してください。

4

1 に答える 1

1

OPが式から報告している答えを正確に得ていないので、代わりにExcelの同等の一連の直接置換関数を作成し、それらをRで使用する方法のサンプルを作成しました。これは最も効率的な方法ではありませんR用ですが、OPが実装に向けて動く最も便利な方法かもしれません。

CRITBINOM : これは基本的にカウント関数です。二項試行のサイズ、成功の確率、およびアルファ値が必要です。累積確率が指定されたアルファ値よりも大きい最小のサンプル サイズを返します。

CRITBINOM <- function(.trials, .probability_s, .alpha){
    i <- 0
    while(sum(dbinom(0:i, .trials, .probability_s)) < .alpha){
        i <- i + 1
        print(i)
    }
    return(i)
}

BINOMDIST : Excel では、これは実際にはブール スイッチを持つ 2 つの関数です。スイッチが TRUE の場合、関数は、指定された試行サイズと成功確率に基づいて、指定された数の二項成功の左側累積分布値を返します。スイッチが false の場合、関数は、同じ情報が与えられた確率質量関数 (正確な数の成功の確率) を返します。

BINOMDIST <- function(.number_s, .trials, .probability_s, .cumulative){
    if(.cumulative){
        return(sum(dbinom(0:.number_s, .trials, .probability_s)))
    }else{
        return(choose(.trials,.number_s)*.probability_s^.number_s*(1-.probability_s)^(.trials-.number_s))
    }
}

ISERROR : この場合、関数は実際には、関数の結果が無限 (未定義) であるかどうかを確認するだけです。このような特定の用途のために Excel のすべての機能を複製するつもりはありません。

ISERROR <- function(.value){
    return(is.infinite(.value))
}

ROUNDDOWN : これは、奇妙な小さな Excel 関数の 1 つです。丸めますが、切り捨てるだけです。この場合、10^ 桁を掛けて余りを取り除き、10^ 桁で割ることによって数値を切り捨てているほど、実際には四捨五入していません。

ROUNDDOWN <- function(.number, .num_digits){
    num_digits <- as.integer(.num_digits)
    return(as.integer(.number*10^num_digits)/(10^num_digits))
}

R コードの例: このすべてを使用して、OP の Excel タスクを複製する方法を示します。まず、ベクトル化された関数を定義して、'n' 値を一度に計算します。

n <- function(.start, .increments, .B){
    return(.start + ROUNDDOWN(.increments * exp(1)^.B, 0))
}

次に、単一の低アラート値を決定する関数を作成します。これは、OP の作業のほとんどが組み込まれている場所です。関数はほぼ同じに見えるはずです。

generate_Low_Alert <- function(.n, .probability_s, .alpha){
    critB <- CRITBINOM(.n, .probability_s, .alpha)
    Low_adj <- critB-(BINOMDIST(critB, .n, .probability_s,TRUE)-.alpha)/(BINOMDIST(critB, .n, .probability_s,TRUE)-BINOMDIST(critB-1, .n, .probability_s,TRUE))
    if(ISERROR(100 * Low_adj / .n)){
        return("")
    }else{
        return(Low_adj/.n)
    }
}

最後に、混乱全体を処理するためのラッパーを作成します。

generate_data <- function(.B, .probability_s, .alpha, .start, .increments){
    Low_Alerts <- integer(length(.increments))
    n_values <- n(.start, .increments, .B)

    for(i in 1:length(n_values)){
        Low_Alerts[i] <- generate_Low_Alert(n_values[i], .probability_s, .alpha)
    }
    return(Low_Alerts)
}

基本的には、「n」個の値のそれぞれをループして、アラート (「」または Low_adj/n の値) を生成するだけです。これらすべてが 1 つの配列に格納され、関数の結果として返されます。

すべてを使用するには、次のようにラッパー関数を呼び出します。

generate_data(1.7, 0.01, 0.005, 1, 0:100)

ここで、これは Excel のアプローチとは少し異なります。一度に 1 つずつではなく、最初に一連のステップ全体 (0:100) を定義するからです。それ以外の場合、これは私が作成した Excel バージョンを正確に複製します。

免責事項:OPと同じ結果を得ることができませんでした(14ではなくx_axis = 97でアラートを見ました)が、Excel関数とこれらの置換関数の数学は正確でなければなりません。うまくいけば、この作業を自分のニーズに適応させることができます。幸運を!

于 2013-05-24T19:27:33.613 に答える