Mô phỏng hồi quy tuyến tính với độ không đồng nhất


9

Tôi đang cố gắng mô phỏng bộ dữ liệu khớp với dữ liệu thực nghiệm mà tôi có, nhưng không chắc chắn làm thế nào để ước tính các lỗi trong dữ liệu gốc. Dữ liệu thực nghiệm bao gồm tính không đồng nhất, nhưng tôi không quan tâm đến việc chuyển đổi nó đi, mà sử dụng mô hình tuyến tính với thuật ngữ lỗi để tái tạo mô phỏng dữ liệu thực nghiệm.

Ví dụ: giả sử tôi có một số liệu dữ liệu thực nghiệm và mô hình:

n=rep(1:100,2)
a=0
b = 1
sigma2 = n^1.3
eps = rnorm(n,mean=0,sd=sqrt(sigma2))
y=a+b*n + eps
mod <- lm(y ~ n)

sử dụng plot(n,y)chúng tôi nhận được sau đây. nhập mô tả hình ảnh ở đây

Tuy nhiên, nếu tôi cố gắng mô phỏng dữ liệu simulate(mod), tính không đồng nhất sẽ bị loại bỏ và không được mô hình thu lại.

Tôi có thể sử dụng mô hình bình phương tối thiểu tổng quát

VMat <- varFixed(~n)
mod2 = gls(y ~ n, weights = VMat)

cung cấp mô hình phù hợp hơn dựa trên AIC, nhưng tôi không biết cách mô phỏng dữ liệu bằng đầu ra.

Câu hỏi của tôi là, làm thế nào để tôi tạo một mô hình cho phép tôi mô phỏng dữ liệu để khớp với dữ liệu gốc, theo kinh nghiệm (n và y ở trên). Cụ thể, tôi cần một cách để ước tính sigma2, lỗi, sử dụng một mô hình?


1
Vì vậy, mô hình tuyến tính sẽ không nắm bắt được tính không đồng nhất có điều kiện trừ khi nó rõ ràng cố gắng làm như vậy, sử dụng một trong một vài cách tiếp cận. Các kỹ thuật kinh tế lượng chuẩn điều chỉnh các lỗi tiêu chuẩn trên các tham số để giải thích cho tính không đồng nhất, nhưng chúng không mô hình hóa rõ ràng.
generic_user

Bạn đúng. Tôi đang cố gắng sử dụng một mô hình tuyến tính để nắm bắt sự không đồng nhất. Tôi nghĩ rằng tôi nên sử dụng một mô hình bình phương tối thiểu tổng quát. Nếu có bất kỳ khuyến nghị nào khác, tôi sẽ thử chúng.
user44796

Có một
L ERI

1
Tôi không hiểu câu hỏi của bạn, bởi vì mã của bạn hoàn thành chính xác những gì bạn dường như đang yêu cầu trong tiêu đề của nó: nó mô phỏng một hồi quy tuyến tính với các lỗi không đồng nhất. Bạn đang yêu cầu các phương pháp để ước tính một số loại mô hình cho tính không đồng nhất? Nếu vậy, thì bạn cần chỉ định một mô hình!
whuber

Hy vọng tôi đã làm rõ câu hỏi của mình với các chỉnh sửa. Trong câu hỏi trên, n và y đại diện cho dữ liệu thực nghiệm. Tôi muốn điều chỉnh mô hình phù hợp với dữ liệu và sau đó sử dụng mô hình để tạo dữ liệu mô phỏng phù hợp với giá trị trung bình và dư của dữ liệu gốc.
dùng44796

Câu trả lời:


9

Để mô phỏng dữ liệu với phương sai lỗi khác nhau, bạn cần chỉ định quy trình tạo dữ liệu cho phương sai lỗi. Như đã được chỉ ra trong các ý kiến, bạn đã làm điều đó khi bạn tạo dữ liệu gốc của mình. Nếu bạn có dữ liệu thực và muốn thử điều này, bạn chỉ cần xác định hàm xác định phương sai dư phụ thuộc vào hiệp phương sai của bạn. Cách tiêu chuẩn để làm điều đó là phù hợp với mô hình của bạn, kiểm tra xem nó có hợp lý không (khác với độ không đồng nhất) và lưu phần dư. Những phần dư đó trở thành biến Y của một mô hình mới. Dưới đây tôi đã làm điều đó cho quá trình tạo dữ liệu của bạn. (Tôi không thấy nơi bạn đặt hạt giống ngẫu nhiên, vì vậy những dữ liệu này sẽ không phải là cùng một dữ liệu, nhưng sẽ giống nhau và bạn có thể sao chép chính xác hạt giống của mình bằng cách sử dụng hạt giống của tôi.)

set.seed(568)  # this makes the example exactly reproducible

n      = rep(1:100,2)
a      = 0
b      = 1
sigma2 = n^1.3
eps    = rnorm(n,mean=0,sd=sqrt(sigma2))
y      = a+b*n + eps
mod    = lm(y ~ n)
res    = residuals(mod)

windows()
  layout(matrix(1:2, nrow=2))
  plot(n,y)
  abline(coef(mod), col="red")
  plot(mod, which=3)

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

Lưu ý rằng R, cốt truyện.lm sẽ cung cấp cho bạn một âm mưu (xem, ở đây ) căn bậc hai của các giá trị tuyệt đối của phần dư, được phủ một cách hữu ích với sự phù hợp thấp, đó là thứ bạn cần. (Nếu bạn có nhiều hiệp phương sai, bạn có thể muốn đánh giá điều này với từng hiệp phương riêng biệt.) Có một gợi ý nhỏ nhất về đường cong, nhưng có vẻ như một đường thẳng thực hiện tốt việc khớp dữ liệu. Vì vậy, hãy phù hợp rõ ràng với mô hình đó:

res.mod = lm(sqrt(abs(res))~fitted(mod))
summary(res.mod)
# Call:
# lm(formula = sqrt(abs(res)) ~ fitted(mod))
# 
# Residuals:
#     Min      1Q  Median      3Q     Max 
# -3.3912 -0.7640  0.0794  0.8764  3.2726 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept) 1.669571   0.181361   9.206  < 2e-16 ***
# fitted(mod) 0.023558   0.003157   7.461 2.64e-12 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 1.285 on 198 degrees of freedom
# Multiple R-squared:  0.2195,  Adjusted R-squared:  0.2155 
# F-statistic: 55.67 on 1 and 198 DF,  p-value: 2.641e-12
windows()
  layout(matrix(1:4, nrow=2, ncol=2, byrow=TRUE))
  plot(res.mod, which=1)
  plot(res.mod, which=2)
  plot(res.mod, which=3)
  plot(res.mod, which=5)

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

Chúng ta không cần phải lo lắng rằng sự chênh lệch còn lại dường như đang gia tăng trong âm mưu vị trí tỷ lệ cho mô hình này cũng như điều mà về cơ bản phải xảy ra. Lại có một gợi ý nhỏ nhất về đường cong, vì vậy chúng ta có thể thử điều chỉnh một thuật ngữ bình phương và xem điều đó có giúp ích gì không (nhưng nó không):

res.mod2 = lm(sqrt(abs(res))~poly(fitted(mod), 2))
summary(res.mod2)
# output omitted
anova(res.mod, res.mod2)
# Analysis of Variance Table
# 
# Model 1: sqrt(abs(res)) ~ fitted(mod)
# Model 2: sqrt(abs(res)) ~ poly(fitted(mod), 2)
#   Res.Df    RSS Df Sum of Sq     F Pr(>F)
# 1    198 326.87                          
# 2    197 326.85  1  0.011564 0.007 0.9336

Nếu chúng tôi hài lòng với điều này, giờ đây chúng tôi có thể sử dụng quy trình này như một tiện ích bổ sung để mô phỏng dữ liệu.

set.seed(4396)  # this makes the example exactly reproducible
x = n
expected.y = coef(mod)[1] + coef(mod)[2]*x
sim.errors = rnorm(length(x), mean=0,
                   sd=(coef(res.mod)[1] + coef(res.mod)[2]*expected.y)^2)
observed.y = expected.y + sim.errors

Lưu ý rằng quy trình này không được đảm bảo để tìm quá trình tạo dữ liệu thực sự hơn bất kỳ phương pháp thống kê nào khác. Bạn đã sử dụng hàm phi tuyến tính để tạo các SD lỗi và chúng tôi đã tính gần đúng với hàm tuyến tính. Nếu bạn thực sự biết quy trình tạo dữ liệu thực sự a-prori (như trong trường hợp này, vì bạn đã mô phỏng dữ liệu gốc), bạn cũng có thể sử dụng nó. Bạn có thể quyết định nếu xấp xỉ ở đây là đủ tốt cho mục đích của bạn. Tuy nhiên, chúng tôi thường không biết quy trình tạo dữ liệu thực sự và dựa trên dao cạo của Occam, với chức năng đơn giản nhất phù hợp với dữ liệu chúng tôi đã cung cấp cho lượng thông tin có sẵn. Bạn cũng có thể thử phương pháp splines hoặc fancier nếu bạn thích. Các bản phân phối bivariate trông tương tự như tôi,

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


Đây thực sự là một kết luận mà tôi đã bắt đầu đi đến, nhưng sẽ không bao giờ đi đến một câu trả lời tao nhã như vậy.
dùng44796

5

Bạn cần phải mô hình hóa sự không đồng nhất. Một cách tiếp cận là thông qua gói R (CRAN) dglm, mô hình tuyến tính tổng quát phân tán. Đây là một phần mở rộng của glm, ngoài thông thường glm, phù hợp với glm thứ hai để phân tán từ phần dư từ glm thứ nhất. Tôi không có kinh nghiệm với các mô hình như vậy, nhưng chúng có vẻ đầy hứa hẹn ... Đây là một số mã:

n <- rep(1:100,2)
a <- 0
b <- 1
sigma2 <- n^1.3
eps <- rnorm(n,mean=0,sd=sqrt(sigma2))
y <- a+b*n + eps
mod <- lm(y ~ n)

library(dglm)  ### double glm's

mod2   <-  dglm(y ~ n, ~ n, gaussian,ykeep=TRUE,xkeep=TRUE,zkeep=TRUE)
### This uses log link for the dispersion part, should also try identity link ..

y2 <-  simulate(mod2)

plot(n, y2$sim_1)

mod3  <-  dglm(y ~ n, ~ n, gaussian, dlink="identity", ykeep=TRUE,xkeep=TRUE,zkeep=TRUE)  ### This do not work because it leads to negative weights!

Cốt truyện mô phỏng được hiển thị dưới đây:

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

Cốt truyện trông giống như mô phỏng đã sử dụng phương sai ước tính, nhưng tôi không chắc, vì hàm mô phỏng () không có phương thức cho ...

(Một khả năng khác để xem xét, là sử dụng Rgói gamlss, sử dụng một cách tiếp cận khác để mô hình hóa phương sai như là một hàm của biến số.)


1
mô hình tuyến tính tổng quát kép xuất hiện để mô hình hóa dữ liệu gốc đầy đủ. Tôi không rõ làm thế nào các lỗi còn lại được mô hình hóa bằng dự đoán (). Tôi sẽ phải nhìn vào đó.
user44796
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.