glmnet: Làm thế nào để có ý nghĩa của tham số hóa đa cực?


11

Vấn đề sau: Tôi muốn dự đoán một biến phản ứng phân loại với một (hoặc nhiều) biến phân loại sử dụng glmnet ().

Tuy nhiên, tôi không thể hiểu ý nghĩa của glmnet đầu ra mang lại cho tôi.

Ok, trước tiên hãy tạo hai biến phân loại liên quan:

Tạo dữ liệu

p <- 2 #number variables
mu <- rep(0,p)
sigma <- matrix(rep(0,p^2), ncol=p)
sigma[1,2] <- .8 #some relationship ..
diag(sigma) <- 1
sigma <- pmax(sigma, t(sigma))
n <- 100
set.seed(1)
library(MASS)
dat <- mvrnorm(n, mu, sigma)
#discretize
k <- 3 # number of categories
d <- apply(dat, 2, function(x) {
  q <- quantile(x, probs=seq(0,1, 1/k))[-c(1, k+1)]
  out <- numeric(length(x))
  for(i in 1:(k-1))
  {  out[x<q[k-i]] <- i } 
  return(out)
})
d <- data.frame(apply(d, 2, as.factor))
d[,2] <- relevel(d[,2], ref="0")
d[,1] <- relevel(d[,1], ref="0")
colnames(d) <- c("X1", "X2")

Chúng tôi nhận được:

> table(d)
   X2
X1   0  1  2
  0 22 11  1
  1  9 14 10
  2  3  8 22

Dự đoán: multinom ()

Sau đó, hãy dự đoán X1 bằng X2 bằng cách sử dụng multinom () từ gói nnet:

library(nnet)
mod1 <- multinom(X1~X2, data=d)
mod1

cung cấp cho chúng tôi:

Call:
multinom(formula = X1 ~ X2, data = d)

Coefficients:
  (Intercept)      X21      X22
1  -0.8938246 1.134993 3.196476
2  -1.9924124 1.673949 5.083518

Kiểm tra thủ công

Bây giờ hãy kiểm tra xem liệu chúng ta có thể sao chép bằng tay không:

tb <- table(d)
log(tb[2,1] / tb[1,1]) #intercept category1
[1] -0.8938179
log(tb[3,1] / tb[1,1]) #intercept category2
[1] -1.99243
log((tb[1,1]*tb[2,2]) / (tb[1,2]*tb[2,1])) #logodds-ratio cat X1 0vs1 in X2 0vs1
[1] 1.13498
#same for the three remaining log odds ratios

Chúng tôi sản xuất cùng một số, tốt!

Dự đoán: glmnet ()

Bây giờ hãy làm tương tự với glmnet:

library(glmnet)
y <- d[,1]
X <- model.matrix(X1~X2, data=d)[,-1]
mod2 <- glmnet(X, y, family="multinomial", lambda=c(0))
coef(mod2, s=0) #meaning of coefficients unclear!
$`0`
3 x 1 sparse Matrix of class "dgCMatrix"
                     1
(Intercept)  0.9620216
X21         -1.1349130
X22         -3.1958293   

$`1`
3 x 1 sparse Matrix of class "dgCMatrix"
                     1
(Intercept) 0.06825755
X21         .         
X22         .         

$`2`
3 x 1 sparse Matrix of class "dgCMatrix"
                     1
(Intercept) -1.0302792
X21          0.5388814
X22          1.8870363

Lưu ý rằng tôi đặt s = 0, do đó không có chính quy và các tham số sẽ chứa thông tin chính xác giống như các tham số của hàm multinom ().

Tuy nhiên, chúng tôi nhận được các thông số rất khác nhau. Điều này là do tham số hóa khác nhau mà họ sử dụng trong glmnet, xem ví dụ:

http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html (tiêu đề: Các mô hình đa thức) hoặc giấy tương ứng: http://www.jstatsoft.org/v33/i01/apers (tiêu đề: 4. Thường xuyên hồi quy đa cực)

P(Y=k|X)

Xác suất có điều kiện: multinom ()

Vì vậy, trước tiên tôi tính các xác suất này từ multinom ():

p.fit <- predict(mod1, type="probs")
head(d)
head(p.fit)
ccp <- matrix(0,3,3)
ccp[,3] <- p.fit[1,]
ccp[,2] <- p.fit[2,]
ccp[,1] <- p.fit[4,]
ccp
           [,1]      [,2]       [,3]
[1,] 0.64705896 0.3333332 0.03030114
[2,] 0.26470416 0.4242450 0.30303140
[3,] 0.08823688 0.2424218 0.66666746
colSums(ccp) #sum to 1, ok; sorry for the awful code ...
[1] 1 1 1

Khi chúng ta có một mô hình bão hòa ở đây, nó sẽ giống như những gì chúng ta có thể tính toán từ dữ liệu:

emp <- table(d)/100
cemp <- apply(emp, 2, function(x) {
  x / sum(x)
})
cemp 
   X2
             0         1          2
  0 0.64705882 0.3333333 0.03030303
  1 0.26470588 0.4242424 0.30303030
  2 0.08823529 0.2424242 0.66666667

đó thực sự là trường hợp.

Xác suất có điều kiện: glmnet ()

Bây giờ giống nhau từ glmnet:

c1 <- coef(mod2, s=0)
c <-matrix(rapply(c1, function(x) { as.matrix(x)}, how="unlist"), 3,3, byrow=T)

ccp2 <- matrix(0,3,3)
config <- rbind(c(0,0), c(1,0), c(0,1))

for(l in 1:3) #loop through categories
{
  denom <- numeric(3)
  for(i in 1:3) # loop through possible predictor combinations
  { 
    x1 <- config[i, 1]
    x2 <- config[i, 2]
    denom[i] <- exp(c[l,1] + x1 * c[l,2]  + x2 * c[l,3])
  }
  ccp2[l,1] <- denom[1] / sum(denom)
  ccp2[l,2] <- denom[2] / sum(denom)
  ccp2[l,3] <- denom[3] / sum(denom)
}
ccp2
          [,1]      [,2]       [,3]
[1,] 0.7340082 0.2359470 0.03004484
[2,] 0.3333333 0.3333333 0.33333333
[3,] 0.1073668 0.1840361 0.70859708
colSums(ccp2)
[1] 1.1747083 0.7533165 1.0719753

Các xác suất có điều kiện tế bào có liên quan một chút nhưng khác nhau. Ngoài ra họ không tổng hợp thành một.

Vì vậy, chúng tôi có hai vấn đề ở đây:

a) xác suất có điều kiện không tổng bằng 1 và

b) các tham số không mô tả những gì chúng ta thấy trong dữ liệu: ví dụ trong hàng 2 có sự khác biệt giữa các cột, nhưng glmnet ước tính cả hai hệ số (không phải là chặn) là 0.

Tôi đã sử dụng một bài toán hồi quy tuyến tính và so sánh glm và glmnet với s = 0 để đảm bảo rằng s = 0 có nghĩa là không chính quy hóa (các giải pháp gần như giống hệt nhau).

Bất kỳ trợ giúp và ý tưởng sẽ được đánh giá cao!

Câu trả lời:


5

Về các tham số từ multinom và glmnet, tôi thấy câu trả lời này có lợi, tôi có thể sử dụng thuật toán glm để thực hiện hồi quy logistic đa phương thức không?

đặc biệt, "Có, với một mô hình Poisson GLM (mô hình tuyến tính log), bạn có thể phù hợp với các mô hình đa phương thức. Do đó, các mô hình Poisson logistic đa tuyến hoặc logistic là tương đương."

Vì vậy, tôi sẽ chỉ ra sự lặp lại của các hệ số glmnet thành các hệ số đa cực.

n.subj=1000
x1 <- rnorm(n.subj)
x2 <- rnorm(n.subj)
prob <- matrix(c(rep(1,n.subj), exp(3+2*x1+x2), exp(-1+x1-3*x2)), , ncol=3)
prob <- sweep(prob, 1, apply(prob, 1, sum), "/")

y = c()
for (i in 1:n.subj)
  y[i] <- sample(3, 1, replace = T, prob = prob[i,])

multinom(y~x1+x2)

x <- cbind(x1,x2); y2 <- factor(y)
fit <- glmnet(x, y2, family="multinomial", lambda=0, type.multinomial =     "grouped")
cf <- coef(fit)

cf[[2]]@x - cf[[1]]@x   # for the category 2
cf[[3]]@x - cf[[1]]@x   # for the category 3

Hi vọng điêu nay co ich. Nhưng tôi không nghĩ rằng tôi hiểu sự tương đương của Mô hình tuyến tính tổng quát (Poisson) và mô hình logistic đa phương thức trong và ngoài.

Hãy cho tôi biết nếu có nguồn tốt và dễ đọc và "dễ hiểu" ..


1
Bạn có giải thích gì thêm cho "tại sao" đây là trường hợp không? Tức là - tại sao glment tạo ra các hệ số là sự kết hợp của các hệ số đa thức điển hình hơn và các hệ số 'cơ sở'. Điều này có cho phép chúng tôi diễn giải từng bộ hệ số như một mô hình log-linear không?
samplesize1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.