Hồi quy tuyến tính không phù hợp


9

Tôi thực hiện hồi quy tuyến tính bằng hàm R lm:

x = log(errors)
plot(x,y)
lm.result = lm(formula = y ~ x)
abline(lm.result, col="blue") # showing the "fit" in blue

nhập mô tả hình ảnh ở đây

nhưng nó không phù hợp Thật không may, tôi không thể hiểu ý nghĩa của hướng dẫn.

Ai đó có thể chỉ cho tôi đi đúng hướng để phù hợp với điều này tốt hơn?

Bằng cách phù hợp tôi có nghĩa là tôi muốn giảm thiểu Lỗi bình phương gốc (RMSE).


Chỉnh sửa : Tôi đã đăng một câu hỏi liên quan (đó là cùng một vấn đề) ở đây: Tôi có thể giảm thêm RMSE dựa trên tính năng này không?

và dữ liệu thô ở đây:

http://tny.cz/c320180d

ngoại trừ trên liên kết x đó là những gì được gọi là lỗi trên trang hiện tại ở đây và có ít mẫu hơn (1000 so với 3000 trong lô trang hiện tại). Tôi muốn làm cho mọi thứ đơn giản hơn trong câu hỏi khác.


4
R lm hoạt động như mong đợi, vấn đề là với dữ liệu của bạn, tức là mối quan hệ tuyến tính không phù hợp trong trường hợp này.
mpiktas

2
Bạn có thể vẽ dòng nào bạn nghĩ bạn nên nhận và tại sao bạn nghĩ dòng của bạn có MSE nhỏ hơn? Tôi lưu ý rằng lời nói dối của bạn nằm trong khoảng từ 0 đến 1, vì vậy có vẻ như hồi quy tuyến tính sẽ không phù hợp với những dữ liệu này. Các giá trị là gì?
Glen_b -Reinstate Monica

2
Nếu các giá trị y là xác suất, bạn hoàn toàn không muốn hồi quy OLS.
Peter Flom

3
(xin lỗi có thể đăng bài này trước đây) Những gì bạn thấy "phù hợp hơn" bên dưới là (xấp xỉ) tối thiểu hóa các tổng bình phương của khoảng cách trực giao, chứ không phải khoảng cách theo chiều dọc 'trực giác của bạn bị nhầm lẫn. Bạn có thể kiểm tra MSE gần đúng đủ dễ dàng! Nếu các giá trị y là xác suất, bạn sẽ được phục vụ tốt hơn bởi một số mô hình không nằm ngoài phạm vi 0 đến 1.
Glen_b -Reinstate Monica

2
Nó có thể là hồi quy này chịu sự hiện diện của một vài ngoại lệ. Có thể là một trường hợp cho hồi quy mạnh mẽ. vi.wikipedia.org/wiki/Robust_regression
Yves Daoust

Câu trả lời:


18

Một trong những giải pháp đơn giản nhất nhận ra rằng những thay đổi giữa các xác suất nhỏ (như 0,1) hoặc có phần bổ sung nhỏ (như 0,9) thường có ý nghĩa hơn và đáng được cân nhắc hơn so với thay đổi giữa các xác suất trung bình (như 0,5).

Chẳng hạn, thay đổi từ 0,1 đến 0,2 (a) nhân đôi xác suất trong khi (b) thay đổi xác suất bổ sung chỉ bằng 1/9 (giảm từ 1,1,1 = 0,9 xuống 0,2 đến 0,8), trong khi đó thay đổi từ 0,5 đến 0,6 (a) tăng xác suất chỉ 20% trong khi (b) giảm xác suất bổ sung chỉ 20%. Trong nhiều ứng dụng, sự thay đổi đầu tiên là, hoặc ít nhất là phải được coi là lớn gấp đôi so với lần thứ hai.

Trong bất kỳ tình huống nào sẽ có ý nghĩa như nhau khi sử dụng xác suất (của một cái gì đó xảy ra) hoặc bổ sung của nó (nghĩa là xác suất của một cái gì đó không xảy ra), chúng ta nên tôn trọng sự đối xứng này.

Hai ý tưởng này - về việc tôn trọng sự đối xứng giữa xác suất và phần bổ sung của chúng và biểu thị các thay đổi tương đối chứ không phải hoàn toàn - đề nghị rằng khi so sánh hai xác suất chúng ta nên theo dõi cả hai tỷ lệ và các tỷ lệ bổ sung của chúng . Khi theo dõi tỷ lệ, đơn giản hơn là sử dụng logarit, giúp chuyển đổi tỷ lệ thành khác biệt. Ergo, một cách hay để thể hiện xác suất cho mục đích này là sử dụng được gọi là tỷ lệ cược log hoặc logit1 - p p p p / p ( 1 - p ) / ( 1 - p ) p z = log p - log ( 1 - p ) , p z p = exp ( z ) / ( 1 + exp ( z ) ) .p1pppp/p(1p)/(1p)p

z=logplog(1p),
của . Tỷ lệ cược log được trang bị luôn có thể được chuyển đổi thành xác suất bằng cách đảo ngược logit; Dòng cuối cùng của mã dưới đây cho thấy cách thức này được thực hiện.pz
p=exp(z)/(1+exp(z)).

Lý do này khá chung chung: nó dẫn đến một quy trình ban đầu mặc định tốt để khám phá bất kỳ tập hợp dữ liệu nào liên quan đến xác suất. (Có nhiều phương pháp tốt hơn, chẳng hạn như hồi quy Poisson, khi xác suất dựa trên việc quan sát tỷ lệ "thành công" với số lượng "thử nghiệm", bởi vì xác suất dựa trên nhiều thử nghiệm đã được đo lường đáng tin cậy hơn. Điều đó dường như không phải là trường hợp ở đây, nơi xác suất dựa trên thông tin được gợi ra. Người ta có thể tính gần đúng phương pháp hồi quy Poisson bằng cách sử dụng bình phương tối thiểu có trọng số trong ví dụ dưới đây để cho phép dữ liệu có độ tin cậy cao hơn hoặc ít hơn.)

Hãy xem xét một ví dụ.

Số liệu

Scatterplot bên trái hiển thị một tập dữ liệu (tương tự như trong câu hỏi) được vẽ theo tỷ lệ cược log. Đường màu đỏ là bình phương nhỏ nhất bình thường phù hợp. Nó có thấp , biểu thị rất nhiều sự phân tán và "hồi quy trung bình" mạnh: đường hồi quy có độ dốc nhỏ hơn trục chính của đám mây điểm elip này. Đây là một thiết lập quen thuộc; nó rất dễ dàng để giải thích và phân tích sử dụng của chức năng hoặc tương đương.R2Rlm

Scatterplot bên phải thể hiện dữ liệu theo xác suất, như ban đầu chúng được ghi lại. Sự phù hợp tương tự được vẽ: bây giờ nó trông cong do cách phi tuyến trong đó tỷ lệ cược log được chuyển đổi thành xác suất.

Theo nghĩa của lỗi bình phương gốc về tỷ lệ cược log, đường cong này là phù hợp nhất .

Ngẫu nhiên, hình dạng gần như hình elip của đám mây ở bên trái và cách nó theo dõi đường bình phương nhỏ nhất cho thấy mô hình hồi quy bình phương nhỏ nhất là hợp lý: dữ liệu có thể được mô tả đầy đủ bằng mối quan hệ tuyến tính-- sử dụng tỷ lệ cược log được cung cấp-- và biến thể dọc xung quanh đường thẳng có kích thước gần như nhau bất kể vị trí ngang (homoscedasticity). (Có một số giá trị thấp bất thường ở giữa có thể đáng được xem xét kỹ hơn.) Đánh giá điều này chi tiết hơn bằng cách làm theo mã dưới đây với lệnh plot(fit)để xem một số chẩn đoán chuẩn. Điều này một mình là một lý do mạnh mẽ để sử dụng tỷ lệ cược đăng nhập để phân tích các dữ liệu này thay vì xác suất.


#
# Read the data from a table of (X,Y) = (X, probability) pairs.
#
x <- read.table("F:/temp/data.csv", sep=",", col.names=c("X", "Y"))
#
# Define functions to convert between probabilities `p` and log odds `z`.
# (When some probabilities actually equal 0 or 1, a tiny adjustment--given by a positive
# value of `e`--needs to be applied to avoid infinite log odds.)
#
logit <- function(p, e=0) {x <- (p-1/2)*(1-e) + 1/2; log(x) - log(1-x)}
logistic <- function(z, e=0) {y <- exp(z)/(1 + exp(z)); (y-1/2)/(1-e) + 1/2}
#
# Fit the log odds using least squares.
#
b <- coef(fit <- lm(logit(x$Y) ~ x$X))
#
# Plot the results in two ways.
#
par(mfrow=c(1,2))
plot(x$X, logit(x$Y), cex=0.5, col="Gray",
     main="Least Squares Fit", xlab="X", ylab="Log odds")
abline(b, col="Red", lwd=2)

plot(x$X, x$Y, cex=0.5, col="Gray",
     main="LS Fit Re-expressed", xlab="X", ylab="Probability")
curve(logistic(b[1] + b[2]*x), col="Red", lwd=2, add=TRUE)

Cảm ơn bạn rất nhiều cho câu trả lời. Tôi sẽ cần một chút thời gian để thử điều đó.
Timothée HENRY

Tôi gặp lỗi khi thử mã của bạn với dữ liệu của mình, khi cố gắng khớp với tỷ lệ cược nhật ký: "Lỗi trong lm.fit (x, y, offset = offset, singular.ok = singular.ok, ...): NA / NaN / Inf trong chức năng gọi nước ngoài (arg 4) ".
Timothée HENRY

Xin vui lòng đọc các ý kiến ​​trong mã: họ giải thích vấn đề là gì và phải làm gì về nó.
whuber

6

Với độ lệch trong dữ liệu với x, điều đầu tiên rõ ràng cần làm là sử dụng hồi quy logisitic ( liên kết wiki ). Vì vậy, tôi với whuber về điều này. Tôi sẽ nói rằng tự nó sẽ cho thấy ý nghĩa mạnh mẽ nhưng không giải thích được phần lớn sự sai lệch (tương đương với tổng số bình phương trong một OLS). Vì vậy, người ta có thể đề xuất rằng có một đồng biến khác ngoài hỗ trợ khả năng giải thích (ví dụ: những người thực hiện phân loại hoặc phương pháp được sử dụng), mặc dù dữ liệu của bạn đã [0,1]: bạn có biết họ đại diện cho xác suất hoặc sự xuất hiện không tỷ lệ? Nếu vậy, bạn nên thử hồi quy logistic bằng cách sử dụng không biến đổi của bạn (trước khi chúng là tỷ lệ / xác suất).xxxyyy

Quan sát của Peter Flom chỉ có ý nghĩa nếu y của bạn không phải là xác suất. Kiểm tra plot(density(y));rug(y)các nhóm khác nhau của và xem bạn có thấy bản phân phối Beta thay đổi hay chỉ đơn giản là chạy . Lưu ý rằng phân phối beta cũng là phân phối gia đình theo cấp số nhân và do đó, có thể mô hình hóa nó với R.xbetaregglm

Để cho bạn biết ý của tôi về hồi quy logistic:

# the 'real' relationship where y is interpreted as the probability of success
y = runif(400)
x = -2*(log(y/(1-y)) - 2) + rnorm(400,sd=2) 
glm.logit=glm(y~x,family=binomial); summary(glm.logit) 
plot(y ~ x); require(faraway); grid()
points(x,ilogit(coef(glm.logit) %*% rbind(1.0,x)),col="red")
tt=runif(400)  # an example of your untransformed regression
newy = ifelse(tt < y, 1, 0)
glm.logit=glm(newy~x,family=binomial); summary(glm.logit) 

# if there is not a good match in your tail probabilities try different link function or oversampling with correction (will be worse here, but perhaps not in your data)
glm.probit=glm(y~x,family=binomial(link=probit)); summary(glm.probit)
glm.cloglog=glm(y~x,family=binomial(link=cloglog)); summary(glm.cloglog)

Hồi quy logistic trong đó mô hình thực là $ log (\ frac {p} {1-p}) = 2-0.5x

EDIT: sau khi đọc các bình luận:

Cho rằng "Các giá trị y là xác suất của một lớp nhất định, thu được từ việc phân loại trung bình được thực hiện thủ công bởi mọi người", tôi thực sự khuyên bạn nên thực hiện hồi quy logistic trên dữ liệu cơ sở của bạn. Đây là một ví dụ:

Giả sử bạn đang xem xét xác suất ai đó đồng ý với đề xuất ( đồng ý, không đồng ý) được khuyến khích từ 0 đến 10 (có thể được chuyển đổi nhật ký, ví dụ như tiền công). Có hai người đề xuất đề nghị cho các ứng cử viên ("Jill và Jack"). Mô hình thực tế là các ứng cử viên có tỷ lệ chấp nhận cơ sở và điều đó tăng lên khi mức độ khuyến khích tăng lên. Nhưng nó cũng phụ thuộc vào người đang đề xuất lời đề nghị (trong trường hợp này chúng tôi nói rằng Jill có cơ hội tốt hơn Jack). Giả sử rằng kết hợp họ yêu cầu 1000 ứng cử viên và thu thập dữ liệu chấp nhận (1) hoặc từ chối (0) của họ.y = 0 xy=1y=0x

require(faraway)
people = c("Jill","Jack")
proposer = sample(people,1000,replace=T)
incentive = runif(1000, min = 0, max =10)
noise = rnorm(1000,sd=2)
# base probability of agreeing is about 12% (ilogit(-2))
agrees = ilogit(-2 + 1*incentive + ifelse(proposer == "Jill", 0 , -0.75) + noise) 
tt = runif(1000)
observedAgrees = ifelse(tt < agrees,1,0)
glm.logit=glm(observedAgrees~incentive+proposer,family=binomial); summary(glm.logit) 

Từ tóm tắt bạn có thể thấy rằng mô hình phù hợp khá tốt. Độ lệch là (std của là ). Điều này phù hợp và nó đánh bại một mô hình với xác suất cố định (sự khác biệt về độ lệch là vài trăm với ). Khó hơn một chút để rút ra khi có hai đồng biến ở đây nhưng bạn có ý tưởng. χ 2 χn32χ2 χ 2 22.dfχ22

xs = coef(glm.logit) %*% rbind(1,incentive,as.factor(proposer))
ys = as.vector(unlist(ilogit(xs)))
plot(ys~ incentive, type="n"); require(faraway); grid()
points(incentive[proposer == "Jill"],ys[proposer == "Jill"],col="red")
points(incentive[proposer == "Jack"],ys[proposer == "Jack"],col="blue")

Jill trong Red Jack màu xanh

Như bạn có thể thấy Jill có thời gian dễ dàng nhận được tỷ lệ trúng tốt hơn Jack nhưng điều đó sẽ biến mất khi sự khích lệ tăng lên.

Về cơ bản, bạn nên áp dụng loại mô hình này cho dữ liệu gốc của mình. Nếu đầu ra của bạn là nhị phân, giữ nguyên 1/0 nếu nó là đa thức bạn cần một hồi quy logistic đa thức. Nếu bạn nghĩ rằng nguồn phương sai bổ sung không phải là bộ thu thập dữ liệu, hãy thêm một yếu tố khác (hoặc biến liên tục) bất cứ điều gì bạn nghĩ có ý nghĩa cho dữ liệu của bạn. Dữ liệu đến trước, thứ hai và thứ ba, chỉ sau đó mô hình mới đi vào hoạt động.


Một nhận xét của OP, "Các giá trị y là xác suất của một loại nhất định, thu được từ các phân loại trung bình được thực hiện thủ công bởi mọi người", cho thấy hồi quy logistic sẽ không phù hợp với những dữ liệu này - mặc dù nó có thể là một giải pháp tuyệt vời cho dữ liệu thô (như được đề xuất trong đoạn đầu tiên của bạn), tùy thuộc vào "phân loại" là gì và cách "tính trung bình" xảy ra. Khi áp dụng cho dữ liệu được hiển thị trong câu hỏi, glmtạo ra một dòng không được bảo đảm tương đối phẳng trông giống như dòng được hiển thị trong câu hỏi.
whuber

Cảm ơn bạn. Và vâng, y là một xác suất. Tôi cũng đã đăng dữ liệu thô trong một câu hỏi có liên quan: stats.stackexchange.com/questions/83576/ , mặc dù tôi đã gọi x những gì tôi gọi là log (x) trong câu hỏi khác ...
Timothée HENRY

Tôi ước tôi đã biết rằng trước khi tôi có được một mẫu từ hình ảnh của bạn, LOL!
whuber

5

Mô hình hồi quy tuyến tính không phù hợp với dữ liệu. Người ta có thể mong đợi để có được một cái gì đó như sau trong hồi quy:

nhập mô tả hình ảnh ở đây

nhưng bằng cách nhận ra những gì OLS làm, rõ ràng đây không phải là những gì bạn sẽ nhận được. Một cách giải thích đồ họa của bình phương tối thiểu thông thường là nó thu nhỏ khoảng cách bình phương dọc giữa đường thẳng (siêu phẳng) và dữ liệu của bạn. Rõ ràng là đường màu tím mà tôi xếp chồng có một số dư lớn từ và một lần nữa ở phía bên kia của 3. Đây là lý do tại sao đường màu xanh phù hợp hơn màu tím.x(7,4.5)


@pkofod Vâng, tôi hiểu rồi. Vì vậy, tôi đã xóa bình luận của mình (tôi biết bạn biết nó bình phương; nhưng những người đọc khác có thể không).
Peter Flom

1
Hồi quy bị kiểm duyệt khác với hồi quy với biến phụ thuộc được giới hạn trong phạm vi đã biết cố định. Những dữ liệu này không được kiểm duyệt và hồi quy kiểm duyệt sẽ không làm gì khác với chúng so với hồi quy thông thường.
whuber

Vâng, xấu của tôi. Đã xóa phần đó.
pkofod

4

Vì Y được giới hạn bởi 0 và 1, hồi quy bình phương nhỏ nhất không phù hợp. Bạn có thể thử hồi quy beta. Trong Rđó có betareggói.

Hãy thử một cái gì đó như thế này

install.packages("betareg")
library(betareg)
betamod1 <- betareg(y~x, data = DATASETNAME)

thêm thông tin

EDIT: Nếu bạn muốn có một tài khoản đầy đủ về hồi quy beta, ưu điểm và nhược điểm của nó, hãy xem Công cụ vắt chanh tốt hơn: Hồi quy khả năng tối đa với các biến phụ thuộc phân phối beta của Smithson và Verkuilen


4
Mô hình nào đang betaregthực sự triển khai? Giả định của nó là gì và tại sao lại hợp lý khi cho rằng chúng áp dụng cho những dữ liệu này?
whuber

2
@whuber Đó là một câu hỏi hay! Mô hình được xác định trên trang 3 và 4 của họa tiết này . Nó dựa trên mật độ beta được xác định lại theo các tham số trung bình và độ chính xác (cả hai đều có thể được mô hình hóa, mỗi cái có chức năng liên kết riêng) và một bộ các hàm liên kết giống như các mô hình được sử dụng cho các mô hình nhị thức (và một nữa). Nó được trang bị bởi ML và hoạt động rất giống với việc lắp GLM.
Glen_b -Reinstate Monica

2
@whuber Các mô hình beta có điều kiện là phổ biến cho dữ liệu thành phần và tỷ lệ hoặc xác suất loại liên tục khác. Tôi không biết liệu các giả định cho các mô hình như vậy có phù hợp với các dữ liệu này hay không (tôi không biết dữ liệu đó là gì, đó sẽ là mối quan tâm đầu tiên của tôi trước khi tự đề xuất một mô hình), nhưng ngay cả từ cốt truyện, tôi tưởng tượng rằng chúng phù hợp cũng như các mô hình được đề xuất khác ở đây. Có một số mô hình trong các câu trả lời ở đây dường như không hợp lý hơn đề xuất của Peter, một số với các giả định (không phải luôn luôn nêu) có vẻ khó biện minh hơn.
Glen_b -Reinstate Monica

1
Cảm ơn bạn, @Glen_b. Tôi không thách thức đề xuất của Peter - chỉ cố gắng hiểu nó, bởi vì tôi chưa sử dụng hồi quy beta trước đây và tôi tưởng tượng nhiều độc giả tương lai sẽ gặp tình huống tương tự. (Tôi đủ quen thuộc với các mô hình khác được đề cập trong chủ đề này để hiểu các giả định của chúng và những thiếu sót có thể có!) Do đó, thật tuyệt khi thấy câu trả lời này bao gồm ít nhất một tài khoản ngắn về các giả định và lý do đề xuất giải pháp này.
whuber

1
À, vâng, tôi đã liên kết với bài báo đó trong một câu trả lời. Smithson (một trong những tác giả) có bài viết trên trang web của mình . Tài liệu bổ sung được liên kết ở đây .
Glen_b -Reinstate Monica

1

Trước tiên bạn có thể muốn biết chính xác những gì một mô hình tuyến tính làm. Nó cố gắng mô hình hóa một mối quan hệ của hình thức

Yi=a+bXi+ϵi

ϵi

Nếu một mô hình tuyến tính thực sự là những gì bạn đang tìm kiếm, bạn có thể thử chuyển đổi các biến của mình một chút để OLS thực sự có thể được trang bị hoặc chỉ thử hoàn toàn một mô hình khác. Bạn có thể muốn xem xét PCA hoặc CCA hoặc nếu bạn thực sự muốn sử dụng mô hình tuyến tính, hãy thử giải pháp tổng bình phương nhỏ nhất , có thể cho "mức độ phù hợp" tốt hơn, vì nó cho phép sai sót theo cả hai hướng.


Tôi nghĩ rằng lm đang tìm kiếm tối thiểu "Tổng bình phương tối thiểu" cho hàm tuyến tính (a + b * x + epsilon). Tôi bị lạc
Timothée HENRY

1
(yabx)2
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.