2

私はおそらく非常に愚かなことをしていますが、関数がループしている一連のモデルからパラメーター値を抽出できません。

データ:

library(difR)
data(verbal)
TotScore=rowSums(verbal[,c(1:24)])
mydata=verbal[,c(1:24)]

その後、モデルの BIC をループで取得できます

library(BMA)
a<-rep(NA,length(1:24))
for (i in (1:24)){
  a[i]<-bic.glm(mydata[,i]~ TotScore, glm.family=binomial,data=mydata)$bic
}
a

しかし、これを関数に入れようとすると、「a」を抽出できません

myB<-function(mydata){
  a<-rep(NA,length(ncol(mydata)))
  for (i in (1:ncol(mydata))){
    a[i]<-bic.glm(mydata[,i]~ TotScore, glm.family=binomial,data=mydata)$bic
  }
  return(a)
}

myB(mydata)

というかビックは最後のモデルだけ

平均値に対して同じ関数を作成し、結果を抽出することができるので、bic 出力の構造と関係があるのではないでしょうか?

どうもありがとう

M

4

1 に答える 1

1

グローバル環境からオブジェクトを読み取るだけのようです-関数の問題は、関数内でローカルに作成されbic.glmたものを認識したことです。i次のことを試してください。

library(difR)
data(verbal)
TotScore=rowSums(verbal[,c(1:24)])
mydata=verbal[,c(1:24)]

myB<-function(mydata){
    a<-rep(NA,length(ncol(mydata)))
    for (i in (1:ncol(mydata))){
        # force this.col to be in the global environment
        this.col <<- mydata[,i]
        # Alternatively:
        # assign("this.col", mydata[,i], envir=.GlobalEnv)
        a[i]<-bic.glm(this.col ~ TotScore, glm.family=binomial,data=mydata)$bic
    }
    return(a)
}

myB(mydata)

i関数は、24 であった最初のループによって作成されたグローバルをまだ読み取っていました。

これを行うのは非常に奇妙に思えます。グーグルで簡単に検索した後、問題への参照がここここに見つかりました(完全な検索ではなく、より良い例があると確信しています)。のドキュメントには何も見つかりませんでしたbic.glm。これは少し驚くべきことです。

私が提供した最初の回答から2番目のリンクまで、式を使用してもパラメーターを指定しないと、これが発生するようですdata

于 2012-08-06T11:58:48.857 に答える