2013-01-17 14 views
2

我有一個關於ordinal包在R或具體關於predict.clm()函數的問題。我想計算一個ordered probit估計的linear predictor。利用MASS軟件包的polr功能,可以通過$ lp對象訪問線性預測器。它給了我每條線的價值,並符合我所瞭解的線性預測指標即X_i'beta。如果我然而,在一個有序的概率估計與CLM使用predict.clm(object, newdata,"linear.predictor")()我得到的元素ETA1和ETA2列表,線性預測器 - 有序probit(序數,clm)

  1. 每一個欄,如果newdata包含因變量
  2. ,其中每個元素如果新數據不包含因變量,則包含與等級變量相同數量的列

不幸的是,我不知道這意味着什麼。在作者的文件和論文中,我也沒有找到任何有關它的信息。你們中的一個人能夠很好地啓發我嗎?這會很好。

乾杯,

AK

回答

2

UPDATE(後評論):

基本clm模型的定義如下(見clm tutorial瞭解詳細信息):

生成數據:

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 

現在我們可以訪問thetasbetas(見上述公式):

# 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 

有四種類型可供clm模型預測的。我們對type=linear.prediction感興趣,它返回一個包含兩個矩陣的列表:eta1eta2。它們包含每個觀察線性預測在new.data

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

注1:eta1eta2字面上相等。其次是索引中eta1的旋轉1。因此,它們分別打開線性預測標尺的左側和右側。

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

注2:new.data預測第一行是等於thetas(據我們設置該線路到零)。

​​

注3:我們可以手動構建這樣的預測。例如,預測第二線在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 
+0

嘿,謝謝你的回答。然而這不是我想要的。問題是:predict.clm(object,newdata,「linear.predictor」)的結果中的eta1和eta2是什麼。 – chameau13

+0

@ chameau13:最初,我沒有從你的問題中得到主要觀點。請參閱最新的答案。 – redmode

+0

嘿,謝謝你真正廣泛的解釋!用文字解釋就足夠了;-)。但我想現在我明白了:它給出了Xb超過某個閾值的數字,對吧?這是困惑的,因爲polr給你,當你使用$ lp時,只有一列,我猜這是關於所選類別的線性預測器。留言Merci! – chameau13