Từ những gì tôi có thể nói, chúng ta không thể chạy hồi quy bình phương nhỏ nhất bình thường trong R khi sử dụng dữ liệu có trọng số và survey
gói. Ở đây, chúng ta phải sử dụng svyglm()
, thay vào đó chạy một mô hình tuyến tính tổng quát (có thể là điều tương tự? Tôi mờ ở đây về những gì khác biệt).
svyglm
sẽ cung cấp cho bạn một mô hình tuyến tính nếu bạn sử dụng family = gaussian()
dường như là mặc định từ họa tiết khảo sát (trong phiên bản 3.32-1). Xem ví dụ nơi họ tìm thấy regmodel
.
Có vẻ như gói chỉ đảm bảo rằng bạn sử dụng đúng trọng lượng khi gọi glm
. Vì vậy, nếu kết quả của bạn là liên tục và bạn cho rằng nó thường được phân phối iid thì bạn nên sử dụng family = gaussian()
. Kết quả là một mô hình tuyến tính có trọng số. Câu trả lời này
Tại sao chúng ta không thể chạy OLS trong survey
gói, trong khi dường như điều này có thể thực hiện với dữ liệu có trọng số trong Stata?
bằng cách nói rằng bạn thực sự có thể làm điều đó với survey
gói. Đối với câu hỏi sau đây
Sự khác biệt trong giải thích giữa độ lệch của mô hình tuyến tính tổng quát và giá trị r bình phương là gì?
Có một công thức thẳng về phía trước để có được với như một số người đã đề cập trong các ý kiến. Thêm trọng lượng cũng không thay đổi bất cứ điều gì như tôi hiển thị bên dướiR2family = gaussian()
> set.seed(42293888)
> x <- (-4):5
> y <- 2 + x + rnorm(length(x))
> org <- data.frame(x = x, y = y, weights = 1:10)
>
> # show data and fit model. Notice the R-squared
> head(org)
x y weights
1 -4 0.4963671 1
2 -3 -0.5675720 2
3 -2 -0.3615302 3
4 -1 0.7091697 4
5 0 0.6485203 5
6 1 3.8495979 6
> summary(lm(y ~ x, org, weights = weights))
Call:
lm(formula = y ~ x, data = org, weights = weights)
Weighted Residuals:
Min 1Q Median 3Q Max
-3.1693 -0.4463 0.2017 0.9100 2.9667
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.7368 0.3514 4.942 0.00113 **
x 0.9016 0.1111 8.113 3.95e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.019 on 8 degrees of freedom
Multiple R-squared: 0.8916, Adjusted R-squared: 0.8781
F-statistic: 65.83 on 1 and 8 DF, p-value: 3.946e-05
>
> # make redundant data set with redundant rows
> idx <- unlist(mapply(rep, x = 1:nrow(org), times = org$weights))
> org_redundant <- org[idx, ]
> head(org_redundant)
x y weights
1 -4 0.4963671 1
2 -3 -0.5675720 2
2.1 -3 -0.5675720 2
3 -2 -0.3615302 3
3.1 -2 -0.3615302 3
3.2 -2 -0.3615302 3
>
> # fit model and notice the same R-squared
> summary(lm(y ~ x, org_redundant))
Call:
lm(formula = y ~ x, data = org_redundant)
Residuals:
Min 1Q Median 3Q Max
-1.19789 -0.29506 -0.05435 0.33131 2.36610
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.73680 0.13653 12.72 <2e-16 ***
x 0.90163 0.04318 20.88 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7843 on 53 degrees of freedom
Multiple R-squared: 0.8916, Adjusted R-squared: 0.8896
F-statistic: 436.1 on 1 and 53 DF, p-value: < 2.2e-16
>
> # glm gives you the same with family = gaussian()
> # just compute the R^2 from the deviances. See
> # /stats//a/46358/81865
> fit <- glm(y ~ x, family = gaussian(), org_redundant)
> fit$coefficients
(Intercept) x
1.7368017 0.9016347
> 1 - fit$deviance / fit$null.deviance
[1] 0.8916387
Độ lệch chỉ là tổng các lỗi vuông khi bạn sử dụng family = gaussian()
.
Hãy cẩn thận
Tôi giả sử rằng bạn muốn một mô hình tuyến tính từ câu hỏi của bạn. Hơn nữa, tôi chưa bao giờ sử dụng survey
gói mà nhanh chóng quét qua nó và đưa ra các giả định về những gì tôi làm trong câu trả lời của mình.