2017-05-12 9 views
0

ブート機能を使用して統計情報に引数を渡す際に問題が発生しています。ここでは一例です:evalの中ブートパッケージで加重回帰(lm)を使用しているときの問題R

rm(list=ls()) 
library(faraway) 
library(boot) 
data(strongx) 
g3 <- lm(crossx ~ energy, strongx, weights=rep(1, nrow(strongx))) 

bootReg <- function(formulatostat, data, ind, weitostat) { 
    weig <- weitostat[ind] 
    fit <- lm(formula=formulatostat, data = data[ind, ], weights = weig) 
    return(coef(fit)) 
} 
wei <- rep(1, nrow(strongx)) 

bootResults <- 
    boot(
    data = strongx, 
    statistic = bootReg, 
    R = 2000, 
    formulatostat = crossx ~ energy, 
    weitostat = wei) 

エラー(exprの、ENVIR、enclos):オブジェクトのweigは、「もちろん

を見つけていない、私の重みは1であり、その加重部分が不要です。しかし、実際の重量を使用している間も問題は残ります。これは私が別のデータを持っている問題の実証です。ブート機能は次のように述べています。 "それ以上の引数は、引数を介して統計に渡すことができます。" FormRatostatはbootRegに渡されていますが、重みビットは渡されていません。ウェイトなしで比較する:

bootReg <- function(formulatostat, data, ind) { 
    fit <- lm(formula=formulatostat, data = data[ind, ]) 
    return(coef(fit)) 
} 
wei <- rep(1, nrow(strongx)) 

bootResults <- 
    boot(
    data = strongx, 
    statistic = bootReg, 
    R = 2000, 
    formulatostat = crossx ~ energy) 

これは機能します。体重をどのように組み込むべきかアドバイスをいただければ幸いです。

+0

これは、このサイトのトピックオフになっています。 –

+0

crossvalidatedへようこそ。ブート・マニュアルを参照してください: "渡された最初の引数は常に元のデータです.2番目の引数は、ブートストラップ・サンプルを定義するインデックス、頻度、またはウェイトのベクトルになります。 >>関数の "data"と "ind"引数を1位と2位に切り替えてみてください。 btw:これは質問をデバッグするための適切なフォーラムではありません(統計的な問題ですので、このqはまもなく削除されると思います)+実行中のコード(サンプルデータを含む)を提供すれば、将来的に良い答えを得るチャンスを増やすことができます。歓声 – mzunhammer

+0

お詫び申し上げます。私はstats.stackexchangeに投稿しました。これはどのように話題ですか?私の無知に申し訳ありませんが、これは私が初めてここに投稿したものです。 –

答えて

0

data引数に指定されたオブジェクトにweigという名前のオブジェクトを探し、そして式(crossx ~ energy)が定義されている親環境にある(lm関数内で呼び出される)stats::model.frame関数のように思えます。

dataに与えられたdata.frame内にweigという名前の列がありません。また、式crossx ~ energybootReg関数の外に定義したため、lm関数はweigオブジェクトを見つけることに失敗しています。

data引数に指定されたオブジェクトに重みを追加するか、lm関数を呼び出すのと同じ環境で数式オブジェクトを作成して、エラーを修正できます。

解決方法1:

rm(list=ls()) 
library(faraway) 
library(boot) 
data(strongx) 
g3 <- lm(crossx ~ energy, strongx, weights=rep(1, nrow(strongx))) 

bootReg <- function(formulatostat, data, ind, weitostat) { 
    input_to_lm <- data[ind, ] 
    input_to_lm$weig <- weitostat[ind] 
    fit <- lm(formula=formulatostat, data = input_to_lm, weights = weig) 
    return(coef(fit)) 
} 
wei <- rep(1, nrow(strongx)) 

bootResults <- 
    boot(
    data = strongx, 
    statistic = bootReg, 
    R = 2000, 
    formulatostat = crossx ~ energy, 
    weitostat = wei) 

解決策2:

rm(list=ls()) 
library(faraway) 
library(boot) 
data(strongx) 
g3 <- lm(crossx ~ energy, strongx, weights=rep(1, nrow(strongx))) 

bootReg <- function(formulatostat, data, ind, weitostat) { 
    weig <- weitostat[ind] 
    fit <- lm(formula=as.formula(formulatostat), data = data[ind, ], weights = weig) 
    return(coef(fit)) 
} 
wei <- rep(1, nrow(strongx)) 

bootResults <- 
    boot(
    data = strongx, 
    statistic = bootReg, 
    R = 2000, 
    formulatostat = 'crossx ~ energy', 
    weitostat = wei) 
関連する問題