2015-12-31 34 views
9

Tôi đang lắp glm mô hình trong R và có thể nhận giá trị được dự đoán ở mức phản hồi sử dụng predict.glm(object=fm1, type="response") trong đó fm1 là kiểu máy được trang bị. Tôi tự hỏi làm cách nào để có được các giá trị được dự đoán ở quy mô phản hồi bằng cách sử dụng chức năng augment từ gói broom. Ví dụ làm việc tối thiểu của tôi được đưa ra dưới đây. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơnNhận giá trị được dự đoán ở thang đo phản hồi bằng chổi :: chức năng tăng thêm

Dilution <- c(1/128, 1/64, 1/32, 1/16, 1/8, 1/4, 1/2, 1, 2, 4) 
NoofPlates <- rep(x=5, times=10) 
NoPositive <- c(0, 0, 2, 2, 3, 4, 5, 5, 5, 5) 
Data <- data.frame(Dilution, NoofPlates, NoPositive) 


fm1 <- glm(formula=NoPositive/NoofPlates~log(Dilution), 
      family=binomial("logit"), data=Data, weights=NoofPlates) 
predict.glm(object=fm1, type="response") 
# 1   2   3   4   5   6   7   8   9   10 
# 0.02415120 0.07081045 0.19005716 0.41946465 0.68990944 0.87262421 0.95474066 0.98483820 0.99502511 0.99837891 

library(broom) 
broom::augment(x=fm1) 

# NoPositive.NoofPlates log.Dilution. X.weights. .fitted .se.fit  .resid  .hat .sigma 
# 1     0.0 -4.8520303   5 -3.6989736 1.1629494 -0.4944454 0.15937234 0.6483053 
# 2     0.0 -4.1588831   5 -2.5743062 0.8837030 -0.8569861 0.25691194 0.5662637 
# 3     0.4 -3.4657359   5 -1.4496388 0.6404560 1.0845988 0.31570923 0.4650405 
# 4     0.4 -2.7725887   5 -0.3249714 0.4901128 -0.0884021 0.29247321 0.6784308 
# 5     0.6 -2.0794415   5 0.7996960 0.5205868 -0.4249900 0.28989252 0.6523116 
# 6     0.8 -1.3862944   5 1.9243633 0.7089318 -0.4551979 0.27931425 0.6486704 
# 7     1.0 -0.6931472   5 3.0490307 0.9669186 0.6805552 0.20199632 0.6155754 
# 8     1.0  0.0000000   5 4.1736981 1.2522190 0.3908698 0.11707018 0.6611557 
# 9     1.0  0.6931472   5 5.2983655 1.5498215 0.2233227 0.05944982 0.6739965 
# 10     1.0  1.3862944   5 6.4230329 1.8538108 0.1273738 0.02781019 0.6778365 
# .cooksd .std.resid 
# 1 0.0139540988 -0.5392827 
# 2 0.0886414317 -0.9941540 
# 3 0.4826245827 1.3111391 
# 4 0.0022725303 -0.1050972 
# 5 0.0543073747 -0.5043322 
# 6 0.0637954916 -0.5362006 
# 7 0.0375920888 0.7618349 
# 8 0.0057798939 0.4159767 
# 9 0.0008399932 0.2302724 
# 10 0.0001194412 0.1291827 
+0

Còn 'broom :: augment (x = fm1, newdata = Data)' thì sao? –

+0

@ RomanLuštrik, 'broom :: augment (x = fm1, newdata = Data)' cung cấp các giá trị được trang bị giống như 'broom :: augment (x = fm1)'. Bất kỳ suy nghĩ nào. – MYaseen208

+1

Bạn nói đúng. Tôi đoán tôi đang thua lỗ và tôi không chắc chắn ý bạn là gì bởi "giá trị dự đoán ở thang điểm phản hồi". Tôi sẽ có một swing tại đây. Còn về 'broom :: augment (x = fm1, newdata = Data, type.predict =" response ")'? –

Trả lời

13

Đối với mô hình tuyến tính tổng quát, để tính toán, mô hình cần được chuyển đổi bằng cách sử dụng link function. Đối với mô hình Gaussian, đây là hàm nhận dạng, nhưng đối với hồi quy logistic, chúng ta sử dụng một hàm logit (cũng có thể là probit, nó có đổ chuông không?). Điều này có nghĩa là bạn có thể nhận được các giá trị được dự đoán "thô" hoặc được chuyển đổi. Đây là lý do tại sao ?predict.glm cung cấp đối số type, được dịch thành type.predict trong augment.

broom::augment(x=fm1, newdata = Data, type.predict = "response") 
+0

Có ý nghĩa nhưng làm sao bạn biết được đối số 'type.predict =" response "'. Nó không được đề cập ở đâu trong tài liệu của 'broom :: augment'. – MYaseen208

+4

nó trong '? Augment.lm' (có lẽ nên có một bí danh để'? Augment.glm' cũng đưa nó lên ...) –

+0

Cảm ơn @BenBolker vì nhận xét hữu ích. – MYaseen208

Các vấn đề liên quan