4108. 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/30 (月) 15:11
├4110. Re: 二次元正規分布関数をExcelのVBAで計算 青木繁伸 2004/08/30 (月) 17:09
│└4114. Re^2: 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/30 (月) 18:12
│ └4120. Re^4: 二次元正規分布関数をExcelのVBAで計算 青木繁伸 2004/08/30 (月) 22:15
│ └4121. Re^5: 二次元正規分布関数をExcelのVBAで計算 青木繁伸 2004/08/30 (月) 22:16
│ └4125. Re^6: 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/31 (火) 12:25
└4109. Re: 二次元正規分布関数をExcelのVBAで計算 ひの 2004/08/30 (月) 15:56
└4111. Re^2: 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/30 (月) 17:17
4108. 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/30 (月) 15:11代用特性で工程を管理するときのαとβを計算するため二次元分布関数を計算する方法が必要になりました。インターネットで検索す ると近似値を計算するC++のソースがあったので,VBAの関数に置き換えようとしたのですがうまくいきませんでした。(値が大きくなると1.0を越えて しまう) |
4110. Re: 二次元正規分布関数をExcelのVBAで計算 青木繁伸 2004/08/30 (月) 17:09> 代用特性で工程を管理するときのαとβを計算するため二次元分布関数を計算する方法が必要になりました。 |
4114. Re^2: 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/30 (月) 18:12> 値が小さいところではちゃんと計算できるのでしょうか。 |
4120. Re^4: 二次元正規分布関数をExcelのVBAで計算 青木繁伸 2004/08/30 (月) 22:15ちょっと,移植の際に間違いが。。N <- function (a, b, rho) { if (a <= 0 && b <= 0 && rho <= 0) { f <- function (x, y, aprime, bprime, rho) { exp(aprime*(2*x-aprime) + bprime*(2*y-bprime) + 2 * rho * (x-aprime) * (y-bprime)) } aprime <- a/sqrt(2*(1-rho*rho)) bprime <- b/sqrt(2*(1-rho*rho)) A <- c(0.3253030, 0.4211071, 0.1334425, 0.006374323) B <- c(0.1337764, 0.6243247, 1.3425378, 2.2626645) return(sum(outer(1:4, 1:4, function(i, j) A[i]*A[j]*f(B[i], B[j], aprime, bprime, rho))) * ( sqrt(1-rho*rho)/pi)) } else if (a*b*rho <= 0) { if (a <= 0 && b >= 0 && rho >= 0) { return(pnorm(a)-N(a, -b, -rho)) } else if (a >= 0 && b <= 0 && rho >= 0) { return(pnorm(b)-N(-a, b, -rho)) } else if (a >= 0 && b >= 0 && rho <= 0) { return(pnorm(a)+pnorm(b)-1+N(-a, -b, rho)) } } else if (a*b*rho >= 0) { denum <- sqrt(a^2-2*rho*a*b+b^2) return(N(a, 0, ((rho*a-b)*sign(a))/denum)+N(b,0,((rho*b-a)*sign(b))/denum)-(1-sign(a)*sign(b))/4) } return(-99.9) # should never get here } res <- numeric(49) count <- 0 for (a in -3:3) { for (b in -3:3) { count <- count+1 res[count] <- N(a, b, 0.844) } } ans <- matrix(res, 7,7) data.list(ans) |
4121. Re^5: 二次元正規分布関数をExcelのVBAで計算 青木繁伸 2004/08/30 (月) 22:16答え |
4125. Re^6: 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/31 (火) 12:25ありがとうございました。 |
4109. Re: 二次元正規分布関数をExcelのVBAで計算 ひの 2004/08/30 (月) 15:56C++のソースがあるなら,それで書いてDLLにしておいてExcelから呼び出せばよいでしょう。 |
4111. Re^2: 二次元正規分布関数をExcelのVBAで計算 BPS 2004/08/30 (月) 17:17> C++のソースがあるなら,それで書いてDLLにしておいてExcelから呼び出せばよいでしょう。 |
● 「統計学関連なんでもあり」の過去ログ--- 030 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る