2013-03-15 61 views
23

Tôi muốn thực hiện bài kiểm tra Kiểm tra định tính Shapiro-Wilk. Dữ liệu của tôi là định dạng csv. Nó trông giống như thế này:Thực hiện bài kiểm tra định tính Shapiro-Wilk

> heisenberg 
    HWWIchg 
1 -15.60 
2 -21.60 
3 -19.50 
4 -19.10 
5 -20.90 
6 -20.70 
7 -19.30 
8 -18.30 
9 -15.10 

Tuy nhiên, khi tôi thực hiện việc kiểm tra, tôi nhận được:

> shapiro.test(heisenberg) 
Error in `[.data.frame`(x, complete.cases(x)) : 
    undefined columns selected 

Tại sao isnt`t R chọn cột bên phải và làm thế nào để làm điều đó? Thx cho câu trả lời của bạn !!!

Trả lời

104

Shapiro.test làm gì?

shapiro.test kiểm tra các Null giả thuyết rằng "các mẫu đến từ một phân phối Normal" chống các thay thế giả thuyết "các mẫu không đến từ một bản phân phối bình thường".

Cách thực hiện shapiro.test trong R?

Trang R giúp đỡ cho ?shapiro.test cho,

x - a numeric vector of data values. Missing values are allowed, 
    but the number of non-missing values must be between 3 and 5000. 

Đó là, shapiro.test hy vọng một vector số như đầu vào, tương ứng với mẫu bạn muốn thử nghiệm và nó được yêu cầu đầu vào chỉ . Vì bạn đã là một data.frame, bạn sẽ phải vượt qua cột mong muốn làm đầu vào cho chức năng như sau:

> shapiro.test(heisenberg$HWWIchg) 
# Shapiro-Wilk normality test 

# data: heisenberg$HWWIchg 
# W = 0.9001, p-value = 0.2528 

kết quả Giải thích từ shapiro.test:

Thứ nhất, Tôi mạnh mẽ đề nghị bạn read this excellent answer từ Ian Fellows trên testing for normality.

Như được hiển thị ở trên, các shapiro.test kiểm tra giả thuyết NULL rằng các mẫu đến từ phân phối Bình thường. Điều này có nghĩa là nếu giá trị p < = 0,05, thì bạn sẽ từ chối giả thuyết NULL rằng các mẫu đến từ phân phối Bình thường. Như Ian Fellows độc đáo đặt nó, bạn đang thử nghiệm chống giả định về trạng thái bình thường". Nói cách khác (đúng cho tôi nếu tôi sai), nó sẽ là tốt hơn nhiều nếu một kiểm tra giả thuyết NULL rằng các mẫu không đến từ một phân phối bình thường. Tại sao? Bởi vì, từ chối một giả thuyết NULL là không giống nhau như chấp nhận giả thuyết thay thế.

trong trường hợp giả thuyết của shapiro.test, một giá trị p < = 0.05 sẽ từ chối giả thuyết không có nghĩa là các mẫu đến từ sự phân phối bình thường, để đặt nó một cách lỏng lẻo, có một cơ hội hiếm có rằng các mẫu đến từ một phân phối bình thường. Tác dụng phụ của thử nghiệm giả thuyết này là cơ hội hiếm hoi này xảy ra rất hiếm khi.Để minh họa, hãy lấy ví dụ:

set.seed(450) 
x <- runif(50, min=2, max=4) 
shapiro.test(x) 
# Shapiro-Wilk normality test 
# data: runif(50, min = 2, max = 4) 
# W = 0.9601, p-value = 0.08995 

Vì vậy, mẫu này (cụ thể) runif(50, min=2, max=4) xuất phát từ phân phối bình thường theo thử nghiệm này. Những gì tôi đang cố gắng nói là, có rất nhiều trường hợp theo đó các yêu cầu "cực" (p < 0,05) không thỏa mãn dẫn đến chấp nhận "giả thuyết NULL" hầu hết các lần, có thể gây hiểu nhầm.

Một vấn đề tôi muốn trích dẫn ở đây từ @PaulHiemstra từ dưới bình luận về những ảnh hưởng trên cỡ mẫu lớn:

Một vấn đề bổ sung với thử nghiệm Shapiro-Wilk là khi bạn ăn nó nhiều dữ liệu hơn , cơ hội của giả thuyết vô giá bị từ chối trở nên lớn hơn. Vì vậy, những gì xảy ra là đối với một lượng lớn dữ liệu, ngay cả những sai lệch rất nhỏ từ tính bình thường có thể được phát hiện, dẫn đến sự từ chối của sự kiện giả thuyết null mặc dù cho mục đích thực tế dữ liệu là quá đủ bình thường.

Mặc dù ông cũng chỉ ra rằng giới hạn kích thước dữ liệu R của bảo vệ này một chút:

May mắn shapiro.test bảo vệ người dùng từ mô tả ở trên tác dụng bằng cách giới hạn kích thước dữ liệu đến 5000.

Nếu giả thuyết NULL ngược lại, nghĩa là các mẫu không đến từ phân phối bình thường và bạn nhận được p-value < 0,05, t bạn kết luận rằng nó là rất hiếm rằng những mẫu này không đến từ một phân phối bình thường (từ chối giả thuyết NULL). Đó là dịch lỏng lẻo: Rất có khả năng là các mẫu thường được phân phối (mặc dù một số thống kê có thể không thích cách diễn dịch này). Tôi tin rằng đây là những gì Ian Fellows cũng đã cố gắng để giải thích trong bài viết của mình. Xin vui lòng sửa tôi nếu tôi đã nhận được một cái gì đó sai!

@PaulHiemstra cũng bình luận về những tình huống thực tế (ví dụ hồi quy) khi một đi qua vấn đề này thử nghiệm các đặc tính phân:

Trong thực tế, nếu một phân tích giả bình thường, ví dụ lm, tôi sẽ không làm bài kiểm tra của Shapiro-Wilk này, nhưng hãy phân tích và xem xét các ô chẩn đoán của kết quả phân tích để đánh giá liệu có bất kỳ giả định nào của phân tích mà vi phạm quá nhiều hay không. Đối với hồi quy tuyến tính bằng cách sử dụng lm, điều này được thực hiện bằng cách xem xét một số ô chẩn đoán bạn nhận được bằng cách sử dụng lô (lm()). Thống kê không phải là một loạt các bước mà ho lên một vài con số (hey p < 0,05!) Nhưng đòi hỏi rất nhiều kinh nghiệm và kỹ năng trong việc đánh giá làm thế nào để phân tích dữ liệu của bạn một cách chính xác.

Ở đây, tôi tìm thấy câu trả lời từ Ian Fellows để bình luận Ben Bolker dưới cùng một câu hỏi đã được liên kết trên không kém (nếu không muốn nói nhiều hơn nữa) thông tin:

Đối với hồi quy tuyến tính,

  1. Đừng lo lắng nhiều về tính bình thường. CLT tiếp quản nhanh chóng và nếu bạn có tất cả, nhưng kích cỡ mẫu nhỏ nhất và biểu đồ tìm kiếm thậm chí còn hợp lý từ xa bạn vẫn ổn.

  2. Lo lắng về sự chênh lệch bất bình đẳng (tính không đồng nhất). Tôi lo lắng về điều này đến thời điểm (gần như) sử dụng các thử nghiệm HCCM theo mặc định. Một âm mưu vị trí quy mô sẽ cho một số ý tưởng về việc liệu điều này có bị hỏng hay không, nhưng không phải lúc nào cũng vậy. Ngoài ra, không có lý do ưu tiên nào để giả định chênh lệch bằng nhau trong hầu hết các trường hợp.

  3. Outliers. Một khoảng cách nấu ăn> 1 là nguyên nhân hợp lý cho mối quan tâm.

Đó là suy nghĩ của tôi (FWIW).

Hy vọng điều này sẽ xóa mọi thứ một chút.

+1

Do đó, bộ dữ liệu này không được phân phối normaliy, tôi đoán ... – maximus

+1

1 .. tốt giải thích –

+2

Một vấn đề khác với các thử nghiệm Shapiro-Wilks là khi bạn ăn nó nhiều dữ liệu hơn , cơ hội của giả thuyết vô giá bị từ chối trở nên lớn hơn. Vì vậy, những gì xảy ra là đối với một lượng lớn dữ liệu, ngay cả sự khác biệt nhỏ so với mức độ bình thường có thể được phát hiện, dẫn đến việc từ chối các giả thuyết không có giả thuyết cho mục đích thực tế, dữ liệu là quá đủ bình thường. –

5

Bạn đang áp dụng shapiro.test() vào khung dữ liệu thay vì cột. Hãy thử các cách sau:

shapiro.test(heisenberg$HWWIchg) 
0

Bạn không chỉ định chính xác cột (dữ liệu) để kiểm tra tính bình thường. Sử dụng này để thay thế

shapiro.test(heisenberg$HWWIchg) 
Các vấn đề liên quan