2017-10-17 4 views
1

ブートストラップを使用して、非線形モデルのいくつかのパラメータの信頼区間を推定しようとします。今、私は個々のパラメータごとに個別にブートストラップしています。したがって、私はモデルのサーバー時間をgererateする必要があります。ここでboot :: boot()を使用した複数の値のブートストラップ

は一例です:

library(boot) 

# generate some data: 
x <- rnorm(300, mean = 5, sd = 2) 
y <- xvalues^2*rnorm(300, mean = 1.5, sd = 1) + rnorm(300, mean = 3, sd = 1) 
data <- data.frame(x = x, y = y) 

# this is my model: nls(y ~ b1*x^2+b2, data = data, start = list(b1 = 1.5,b2 = 3)) 

# functions for bootstrapping: 
getParamB1 <- function(x1, idx){ 
    data <- x1 %>% 
     dplyr::slice(idx) 

    model <- nls(y ~ b1*x^2+b2, data = data, start = list(b1 = 1.5,b2 = 3)) 

    coef(model)[['b1']] 
} 

getParamB2 <- function(x1, idx){ 
    data <- x1 %>% 
     dplyr::slice(idx) 

    model <- nls(y ~ b1*x^2+b2, data = data, start = list(b1 = 1.5,b2 = 3)) 

    coef(model)[['b2']] 
} 

# Calculate bootstrap confidence intervals 
btrpB1 <- boot(data, statistic = getParamB1, R=200) 
btrpB2 <- boot(data, statistic = getParamB2, R=200) 
ciB1 <- boot.ci(btrpB1) 
ciB2 <- boot.ci(btrpB2) 

は、これは非常に素晴らしいコードもちろんではありません。一度にいくつかのパラメータ(ここではb1とb2)の信頼区間を推定する方法はありますか?

+2

「coef(model)」を使用してください。 – user20650

+0

私はブートストラップを使いたいです。上記は単なるおもちゃの例です。 – ACNB

+2

?コメントはあなたの質問に答えられないのですか?関数が複数のパラメータを返すようにします。 (psはなぜオーバーヘッドを減らすために 'data < - x1 [idx、]'を使わないのですか) – user20650

答えて

0

これはいかがですか?

library(boot) 

# generate some data: 
x <- rnorm(300, mean = 5, sd = 2) 
y <- x^2 * rnorm(300, mean = 1.5, sd = 1) + rnorm(300, mean = 3, sd = 1) 
df <- data.frame(x = x, y = y) 

m1 <- nls(y ~ b1 * x^2 + b2, data = df, start = list(b1 = 1.5, b2 = 3)) 

boot.coef <- function(mod, data, indices) { 
    assign(deparse(mod$data), data[indices, ]) 
    m <- eval(mod$call) 
    return(coef(m)) 
} 

results <- boot(data = df, statistic = boot.coef, 
       R = 1000, mod = m1) 
関連する問題