提问人:Simon Harmel 提问时间:11/16/2023 更新时间:11/16/2023 访问量:39
在 Base R 中实现代数方程
Implementing an algebraic equation in Base R
问:
我是 R 中代数方程的新手,正在尝试在 R 中实现以下方程(下图)。
然而,尽管我试图做到精确,但我希望答案是,但我得到了.0.050865
11.43653
我想知道我错过了什么,因为我真的找不到任何错误?
delta_T=0.1522
n=18
NT=324
NC=162
p=0.264
N=NT+NC
V_T2 = ((NT+NC)/(NT*NC))*(1 + ((n - 1)*p)) +
( delta_T^2 * (
(((N - 2)*(1-p)^2 ) + (n*(N - 2*n)*p^2) +
(2* (N - 2*n) * p * (1 - p)) ) /
(2* (N-2)) * ( (N-2) - (2* (n-1)*p) )
) )
V_T2
# > [1] 11.43653 BUT I expect the answer to be 0.050865
答:
1赞
Mark
11/16/2023
#1
你得到错误答案的原因是,在第二学期,你认为你在做
numerator
/
denominator
但你实际上在做的是
numerator
/
(2 * (N - 2))
*
((N - 2) - (2 * (n - 1) * p) )
所以,换句话说,你缺少分母周围的括号。
但是,一般来说,在处理复杂的方程式时,将代码分解为中间变量会很有帮助,这样更容易调试,并且可以对它们进行健全性检查:
equation <- function(NT, NC, n, p, delta_T) {
N <- NT + NC
first_term <- N / (NT * NC) * (1 + ((n - 1) * p))
numerator <- (N - 2) * (1 - p)^2 + n * (N - 2 * n) * p^2 +
2 * (N - 2 * n) * p * (1 - p)
denominator <- 2 * (N-2) * (N - 2 - 2 * (n - 1) * p)
second_term <- delta_T^2 * (numerator / denominator)
first_term + second_term
}
评论
(NT + NC) / (NT * NC)
(NT + NC) / (NT * NC)*(1 + (n -1)*p)
(N-2)*(1-p)^2 + n*(N-2*n)*p^2 + 2*(N - 2*n)*p*(1-p)
(2 * (N -2))*((N-2)- 2*(n-1)*p)
delta_T^2*(1001.592/459823.2)
(NT + NC) / (NT * NC)*(1 + (n -1)*p) + delta_T^2*(1001.592/459823.2)
NT + NC / NT * NC