UPDATE(後評論):
基本clm
模型的定義如下(見clm tutorial瞭解詳細信息):
![](https://i.stack.imgur.com/Su7qc.png)
生成數據:
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
和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
有四種類型可供clm
模型預測的。我們對type=linear.prediction
感興趣,它返回一個包含兩個矩陣的列表:eta1
和eta2
。它們包含每個觀察線性預測在new.data
:
lp.clm <- predict(fm.clm, new.data, type="linear.predictor")
lp.clm
注1:eta1
和eta2
字面上相等。其次是索引中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
嘿,謝謝你的回答。然而這不是我想要的。問題是:predict.clm(object,newdata,「linear.predictor」)的結果中的eta1和eta2是什麼。 – chameau13
@ chameau13:最初,我沒有從你的問題中得到主要觀點。請參閱最新的答案。 – redmode
嘿,謝謝你真正廣泛的解釋!用文字解釋就足夠了;-)。但我想現在我明白了:它給出了Xb超過某個閾值的數字,對吧?這是困惑的,因爲polr給你,當你使用$ lp時,只有一列,我猜這是關於所選類別的線性預測器。留言Merci! – chameau13