2011-11-08 18 views
37

Tôi đang cố gắng sử dụng toán tử dấu ngã và các hàm liên quan . Câu hỏi đầu tiên của tôi là tại sao I() cần được sử dụng để chỉ định toán tử số học? Ví dụ, những 2 lô tạo ra kết quả khác nhau (trước đây có một đường thẳng, và sau này đường cong dự kiến)Trong công thức R, tại sao tôi phải sử dụng hàm I() trên các thuật ngữ nguồn, như y ~ I (x^3)

x <- c(1:100) 
y <- seq(0.1,10,0.1) 

plot(y~x^3) 
plot(y~I(x^3)) 

hơn nữa, cả hai lô sau đây cũng tạo ra kết quả mong đợi

plot(x^3, y) 
plot(I(x^3), y) 

Câu hỏi thứ hai của tôi là, có lẽ các ví dụ tôi đã sử dụng quá đơn giản, nhưng tôi không hiểu nơi nào thực sự nên sử dụng ~.

+8

Bất kỳ câu trả lời tuyệt vời nào cho câu hỏi này sẽ dựa nhiều vào những gì được chứa trong '? Formula'. – joran

+0

Trùng lặp; chúng ta nên đóng một trong những điều này và làm cho kinh điển khác: [chữ cái viết hoa "I" trong công thức hồi quy tuyến tính R có nghĩa là gì?] (http://stackoverflow.com/questions/24192428/capital-letter-i-in- r-linear-regression) – smci

Trả lời

38

Vấn đề ở đây là cách thức công thức được diễn giải. Trong một công thức dấu ngã phân cách phía bên tay trái từ phía bên tay phải. Trong các công thức toán tử ^ dành cho việc xây dựng các tương tác sao cho x = x^2 = x^3 chứ không phải là công suất toán học có thể mong đợi. Nếu bạn đã nhập (x+y)^2 trình thông dịch R sẽ tạo ra (để sử dụng nội bộ tốt của chính nó), không phải là toán học: x^2 +2xy +y^2, mà là một biểu tượng: x + y +x:y trong đó x:y là một cụm từ tương tác.

?formula 

Chức năng I() hoạt động để chuyển đổi đối số thành "as.is", tức là những gì bạn mong đợi. Vì vậy, tôi (x^2) sẽ trả về một vectơ các giá trị được nâng lên lũy thừa thứ hai.

~ nên được cho là đã nói "được phân phối dưới dạng" hoặc "phụ thuộc vào" khi được nhìn thấy trong các hàm hồi quy. Nó ngụ ý một thuật ngữ lỗi trong mô tả mô hình thường sẽ được dán nhãn "(Intercept)" và bối cảnh hàm và đối số cũng có thể xác định thêm một hàm liên kết như log() hoặc logit().

Trong cốt truyện() - chức năng ting nó cơ bản đảo ngược thứ tự thông thường (x, y) của các đối số mà chức năng lô thường mất. Có một phương thức plot.formula được viết để các công thức có thể được sử dụng như một chế độ "toán học" giao tiếp với R. Trong các hàm graphics::plot.formula, curve và 'mạng' và 'ggplot', nó điều chỉnh số lượng các yếu tố hoặc vectơ số được hiển thị và "facetted".

Tôi đã học được sau đó ~ thực sự là một hàm nguyên thủy (hoặc tiền tố) có sẵn để tạo ra một cuộc gọi R 'có thể được truy cập với các toán tử khai thác danh sách. Tất cả điều đó được ẩn khỏi người dùng thông thường, nhưng nó có thể là một cơ sở được sử dụng bởi các tác giả hàm nâng cao hơn.

Sự quá tải của toán tử "+" được thảo luận trong phần bình luận bên dưới và cũng được thực hiện trong các gói vẽ: ggplot2 và gridExtra, ở đâu nó tách các hàm phân phối kết quả đối tượng, toán tử phân lớp. Các hàm tổng hợp có phương thức công thức sử dụng "+" làm toán tử sắp xếp và nhóm.

+0

Tôi đã đọc '? formula' (mặc dù điều đó không rõ ràng từ câu hỏi của tôi); điều làm tôi bối rối là khái niệm về toán tử trong xây dựng mô hình.Ví dụ, tôi hoàn toàn bị mất như thế nào '+' biểu tượng có thể có nghĩa là một cái gì đó khác hơn để thêm hai giá trị với nhau – ChrisW

+2

Trong một công thức trong một hàm hồi quy bạn đang ngầm yêu cầu trả về một tập hợp (ước tính) hệ số liên kết với (thường được nhân với) mỗi cụm từ được kết nối bằng dấu "+". –

+3

@ChrisW Toán tử '+' bị quá tải trong ngữ cảnh của một công thức. Nó được thực hiện để cung cấp cho một cảm giác trực quan hơn để thông số kỹ thuật công thức. Nếu không, các cuộc gọi hồi quy sẽ giống như 'lm (công thức = công thức (y.var, x.var1, x.var2))', điều này ít dễ hiểu hơn. –

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