Việc giải thích xác suất của các biểu thức thường xuyên về khả năng, giá trị p, vvetera, cho mô hình LASSO và hồi quy từng bước, là không chính xác.
Những biểu hiện đánh giá quá cao xác suất. Ví dụ: khoảng tin cậy 95% cho một số tham số được cho là nói rằng bạn có xác suất 95% rằng phương thức sẽ dẫn đến một khoảng với biến mô hình thực bên trong khoảng đó.
Tuy nhiên, các mô hình được trang bị không xuất phát từ một giả thuyết điển hình, và thay vào đó chúng tôi chọn anh đào (chọn ra nhiều mô hình thay thế có thể) khi chúng tôi thực hiện hồi quy từng bước hoặc hồi quy LASSO.
Rất ít ý nghĩa để đánh giá tính chính xác của các tham số mô hình (đặc biệt là khi có khả năng mô hình không chính xác).
Trong ví dụ dưới đây, được giải thích sau, mô hình này được trang bị cho nhiều biến hồi quy và nó 'bị' bởi tính đa hình. Điều này làm cho có khả năng một biến hồi quy lân cận (có tương quan mạnh) được chọn trong mô hình thay vì mô hình thực sự trong mô hình. Mối tương quan mạnh mẽ làm cho các hệ số có sai số / phương sai lớn (liên quan đến ma trận ).(XTX)−1
Tuy nhiên, phương sai cao này do tính đa hướng không được nhìn thấy trong các chẩn đoán như giá trị p hoặc sai số chuẩn của các hệ số, bởi vì chúng dựa trên ma trận thiết kế nhỏ hơn với ít biến hồi quy. (và không có phương pháp đơn giản nào để tính các loại số liệu thống kê cho LASSO)X
Ví dụ: biểu đồ bên dưới hiển thị kết quả của mô hình đồ chơi cho một số tín hiệu là tổng tuyến tính của 10 đường cong Gaussian (ví dụ này có thể giống với phân tích trong hóa học trong đó tín hiệu cho phổ được coi là tổng tuyến tính của một số thành phần). Tín hiệu của 10 đường cong được gắn với một mô hình gồm 100 thành phần (đường cong Gaussian với trung bình khác nhau) sử dụng LASSO. Tín hiệu được ước tính tốt (so sánh đường cong màu đỏ và màu đen gần hợp lý). Nhưng, các hệ số cơ bản thực tế không được ước tính tốt và có thể sai hoàn toàn (so sánh các thanh màu đỏ và đen với các chấm không giống nhau). Xem thêm 10 hệ số cuối cùng:
91 91 92 93 94 95 96 97 98 99 100
true model 0 0 0 0 0 0 0 142.8 0 0 0
fitted 0 0 0 0 0 0 129.7 6.9 0 0 0
Mô hình LASSO chọn các hệ số rất gần đúng, nhưng theo quan điểm của chính các hệ số, điều đó có nghĩa là một lỗi lớn khi ước tính một hệ số khác không bằng 0 và một hệ số lân cận bằng 0 được ước tính là 0 khác không. Bất kỳ khoảng tin cậy cho các hệ số sẽ có rất ít ý nghĩa.
Lắp LASSO
Phù hợp từng bước
Để so sánh, đường cong tương tự có thể được gắn với thuật toán từng bước dẫn đến hình ảnh bên dưới. (với các vấn đề tương tự mà các hệ số gần nhau nhưng không khớp)
Ngay cả khi bạn xem xét độ chính xác của đường cong (chứ không phải là các tham số, mà ở điểm trước được làm rõ rằng nó không có ý nghĩa) thì bạn phải xử lý quá mức. Khi bạn làm một thủ tục phù hợp với Lasso sau đó bạn sử dụng đào tạo dữ liệu (để phù hợp với mô hình với các thông số khác nhau) và dữ liệu thử nghiệm / xác nhận (để điều chỉnh / tìm mà là tham số tốt nhất), nhưng bạn cũng nên sử dụng một riêng biệt ba bộ dữ liệu kiểm tra / xác nhận để tìm ra hiệu suất của dữ liệu.
Giá trị p hoặc một cái gì đó tương tự sẽ không hoạt động vì bạn đang làm việc trên một mô hình được điều chỉnh là hái anh đào và khác nhau (mức độ tự do lớn hơn nhiều) từ phương pháp khớp tuyến tính thông thường.
Có phải chịu cùng một vấn đề hồi quy từng bước không?
Bạn dường như đề cập đến các vấn đề như sai lệch trong các giá trị như , giá trị p, điểm F hoặc lỗi tiêu chuẩn. Tôi tin rằng LASSO không được sử dụng để giải quyết những vấn đề đó.R2
Tôi nghĩ rằng lý do chính để sử dụng LASSO thay cho hồi quy từng bước là LASSO cho phép lựa chọn tham số ít tham lam hơn, ít bị ảnh hưởng bởi tính đa hướng. (khác biệt hơn giữa LASSO và từng bước: Sự vượt trội của LASSO so với lựa chọn chuyển tiếp / loại bỏ lùi về mặt lỗi dự đoán xác thực chéo của mô hình )
Mã cho hình ảnh ví dụ
# settings
library(glmnet)
n <- 10^2 # number of regressors/vectors
m <- 2 # multiplier for number of datapoints
nel <- 10 # number of elements in the model
set.seed(1)
sig <- 4
t <- seq(0,n,length.out=m*n)
# vectors
X <- sapply(1:n, FUN <- function(x) dnorm(t,x,sig))
# some random function with nel elements, with Poisson noise added
par <- sample(1:n,nel)
coef <- rep(0,n)
coef[par] <- rnorm(nel,10,5)^2
Y <- rpois(n*m,X %*% coef)
# LASSO cross validation
fit <- cv.glmnet(X,Y, lower.limits=0, intercept=FALSE,
alpha=1, nfolds=5, lambda=exp(seq(-4,4,0.1)))
plot(fit$lambda, fit$cvm,log="xy")
plot(fit)
Yfit <- (X %*% coef(fit)[-1])
# non negative least squares
# (uses a stepwise algorithm or should be equivalent to stepwise)
fit2<-nnls(X,Y)
# plotting
par(mgp=c(0.3,0.0,0), mar=c(2,4.1,0.2,2.1))
layout(matrix(1:2,2),heights=c(1,0.55))
plot(t,Y,pch=21,col=rgb(0,0,0,0.3),bg=rgb(0,0,0,0.3),cex=0.7,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",bty="n")
#lines(t,Yfit,col=2,lwd=2) # fitted mean
lines(t,X %*% coef,lwd=2) # true mean
lines(t,X %*% coef(fit2), col=3,lwd=2) # 2nd fit
# add coefficients in the plot
for (i in 1:n) {
if (coef[i] > 0) {
lines(c(i,i),c(0,coef[i])*dnorm(0,0,sig))
points(i,coef[i]*dnorm(0,0,sig), pch=21, col=1,bg="white",cex=1)
}
if (coef(fit)[i+1] > 0) {
# lines(c(i,i),c(0,coef(fit)[i+1])*dnorm(0,0,sig),col=2)
# points(i,coef(fit)[i+1]*dnorm(0,0,sig), pch=21, col=2,bg="white",cex=1)
}
if (coef(fit2)[i+1] > 0) {
lines(c(i,i),c(0,coef(fit2)[i+1])*dnorm(0,0,sig),col=3)
points(i,coef(fit2)[i+1]*dnorm(0,0,sig), pch=21, col=3,bg="white",cex=1)
}
}
#Arrows(85,23,85-6,23+10,-0.2,col=1,cex=0.5,arr.length=0.1)
#Arrows(86.5,33,86.5-6,33+10,-0.2,col=2,cex=0.5,arr.length=0.1)
#text(85-6,23+10,"true coefficient", pos=2, cex=0.7,col=1)
#text(86.5-6,33+10, "fitted coefficient", pos=2, cex=0.7,col=2)
text(0,50, "signal versus position\n true mean (black), fitted with nnls (green)", cex=1,col=1,pos=4, font=2)
plot(-100,-100,pch=21,col=1,bg="white",cex=0.7,type="l",lwd=2,
xaxt = "n", yaxt = "n",
ylab="", xlab = "",
ylim=c(0,max(coef(fit)))*dnorm(0,0,sig),xlim=c(0,n),bty="n")
#lines(t,X %*% coef,lwd=2,col=2)
for (i in 1:n) {
if (coef[i] > 0) {
lines(t,X[,i]*coef[i],lty=1)
}
if (coef(fit)[i+1] > 0) {
# lines(t,X[,i]*coef(fit)[i+1],col=2,lty=1)
}
if (coef(fit2)[i+1] > 0) {
lines(t,X[,i]*coef(fit2)[i+1],col=3,lty=1)
}
}
text(0,33, "illustration of seperate components/curves", cex=1,col=1,pos=4, font=2)