2

ordinalパッケージについて、Rまたは特に機能について質問がありpredict.clm()ます。見積もりの​​計算linear predictorをしたいと思います。ordered probitMASS パッケージの polr 関数を使用すると、線形予測子に object$lp でアクセスできます。それは各行の値を示しており、線形予測子が X_i'beta であると私が理解していることと一致しています。ただしpredict.clm(object, newdata,"linear.predictor")、clm() を使用して順序付きプロビット推定を使用すると、要素 eta1 と eta2 を含むリストが得られます。

  1. newdata に従属変数が含まれている場合は、それぞれ 1 列
  2. newdata に従属変数が含まれていない場合、各要素には従属変数のレベルと同じ数の列が含まれます。

残念ながら、それが何を意味するのかはわかりません。また、著者のドキュメントや論文にも、それに関する情報はありません。どなたか教えていただけませんか?これは素晴らしいことです。

乾杯、

AK

4

1 に答える 1

3

更新(コメント後):

基本clmモデルは次のように定義されます (詳細については、 clm チュートリアルを参照してください)。

データの生成:

library(ordinal)
set.seed(1)
test.data = data.frame(y=gl(4,5),
                       x=matrix(c(sample(1:4,20,T)+rnorm(20), rnorm(20)), ncol=2))
head(test.data) # two independent variables 
test.data$y     # four levels in y

モデルの構築:

fm.polr <- polr(y ~ x) # using polr
fm.clm  <- clm(y ~ x)  # using clm

thetasこれでandにアクセスできますbetas(上記の式を参照):

# Thetas
fm.polr$zeta # using polr
fm.clm$alpha # using clm
# Betas
fm.polr$coefficients # using polr
fm.clm$beta          # using clm

線形予測子の取得 (theta式の右辺にない部分のみ):

fm.polr$lp                                                 # using polr
apply(test.data[,2:3], 1, function(x) sum(fm.clm$beta*x))  # using clm

新しいデータ生成:

# Contains only independent variables
new.data <- data.frame(x=matrix(c(rnorm(10)+sample(1:4,10,T), rnorm(10)), ncol=2))
new.data[1,] <- c(0,0)  # intentionally for demonstration purpose
new.data

モデルで使用できる予測には 4 つのタイプがありますclm。に関心がtype=linear.predictionあります。これは、 と の 2 つの行列を含むリストを返しeta1ますeta2。これらには、 の各観測値の線形予測子が含まれていますnew.data

lp.clm <- predict(fm.clm, new.data, type="linear.predictor")
lp.clm

注 1: eta1eta2は文字通り等しいです。2 番目は、インデックスeta1を 1ずつ回転させるだけです。jしたがって、それらは線形予測子スケールの左側と右側をそれぞれ開いたままにします。

all.equal(lp.clm$eta1[,1:3], lp.clm$eta2[,2:4], check.attributes=FALSE)
# [1] TRUE

注 2:の最初の行の予測は(この行をゼロに設定する限り) にnew.data等しくなります。thetas

all.equal(lp.clm$eta1[1,1:3], fm.clm$alpha, check.attributes=FALSE)
# [1] TRUE

注 3:このような予測は手動で作成できます。たとえば、 の 2 行目の予測new.data:

second.line <- fm.clm$alpha - sum(fm.clm$beta*new.data[2,])
all.equal(lp.clm$eta1[2,1:3], second.line, check.attributes=FALSE)
# [1] TRUE

注 4:new.dataに応答変数が含まれている場合はpredict、指定されたレベルの線形予測子のみが返されますy。繰り返しますが、手動で確認できます。

new.data$y <- gl(4,3,length=10)
lp.clm.y <- predict(fm.clm, new.data, type="linear.predictor")
lp.clm.y

lp.manual <- sapply(1:10, function(i) lp.clm$eta1[i,new.data$y[i]])
all.equal(lp.clm.y$eta1, lp.manual)
# [1] TRUE
于 2013-01-24T13:03:52.060 に答える