簡體   English   中英

uniroot()是否會混淆R中的輸入值?

[英]Is uniroot() confusing the input values in R?

我在下面想知道,為什么當我直接提供q的值( 請參閱 f2 )時,當我將q作為其他輸入值的函數uniroot()的函數( 請參閱 f1 )失敗時, uniroot()可以很好地進行BUT操作嗎?

在代碼中,所有帶有...1后綴(例如f1 )的內容都與我間接提供q 后綴...2所有內容(例如f2 )都與我直接提供q

我的目標是解決df2 ,使y = .15 (正確答案是~ 336.3956 )。 請只運行下面的完整代碼 。)

alpha = c(.025, .975); df1 = 3; q = 48.05649 ; peta = .3 # input values

f1 <- function(alpha, q, df1, df2, ncp){    # Objective function (`q` indirectly)
  alpha - suppressWarnings(pf(q = (peta / df1) / ((1 - peta)/df2), df1, df2, 
  ncp, lower.tail = FALSE))
}

f2 <- function(alpha, q, df1, df2, ncp){    # Objective function (`q` directly)
  alpha - suppressWarnings(pf(q = q, df1, df2, ncp, lower.tail = FALSE))
}

ncp1 <- function(df2){                    # root finding
 b <- sapply(c(alpha[1], alpha[2]),     
          function(x) uniroot(f1, c(0, 1e7), alpha = x, q = peta, df1 = df1, df2 = df2)[[1]])

  b / (b + (df2 + 4))
}

ncp2 <- function(df2){                    # root finding
  b <- sapply(c(alpha[1], alpha[2]),     
          function(x) uniroot(f2, c(0, 1e7), alpha = x, q = q, df1 = df1, df2 = df2)[[1]])

 b / (b + (df2 + 4))
}


m1 <- function(df2, y){              # A Utility function
  abs(abs(diff(ncp1(df2))) - y)
}

m2 <- function(df2, y){              # A Utility function
 abs(abs(diff(ncp2(df2))) - y)
}

optimize(m1, c(1, 1e7), y = .15)[[1]] # Incorrect answer: 1e+07

optimize(m2, c(1, 1e7), y = .15)[[1]] # Correct answer: 336.3956

ncp1

你有q = peta ,然后將其傳遞給f1但實際上並沒有被使用,因為pfq當作(peta / df1) / ((1 - peta)/df2)

ncp2

您有q = peta ,然后將其傳遞給f2 ,然后傳遞給pf

因此,最重要的是您要對pf q使用不同的值。 如果重新激活警告,您將看到f1作為ncp1一部分無法達到收斂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM