Cách kiểm tra xem phương sai của hai bản phân phối có khác nhau không nếu bản phân phối không bình thường


8

Tôi đang nghiên cứu hai quần thể bị cô lập về mặt địa lý của cùng một loài. Kiểm tra các bản phân phối, tôi thấy rằng cả hai đều là lưỡng tính (có một số tính thời vụ đối với sự xuất hiện của chúng), nhưng các đỉnh trong một quần thể cao hơn và hẹp hơn nhiều (nghĩa là phương sai của các đỉnh địa phương nhỏ hơn).

Loại kiểm tra thống kê nào sẽ phù hợp để xác định xem những khác biệt này có ý nghĩa không?

Để làm rõ, trục y của tôi là số lượng cá thể được xác định trong một cái bẫy vào một ngày cụ thể và trục x là ngày Julian.


Bạn có thể thử làm một số phát hiện ngoại lệ. vi.wikipedia.org/wiki/Outlier .

Bạn có thể viết ra một mô hình thống kê? Ngoài ra, có nhiều cách khác nhau để chỉ định "phương sai không bằng nhau" và "phương sai bằng nhau" và kết luận của bạn có thể phụ thuộc vào lựa chọn cụ thể nào bạn đưa ra, đặc biệt nếu đó là sự khác biệt tinh tế. Vì vậy, tốt hơn là sử dụng một mô hình do bạn chọn, thay vì một mô hình được chọn bởi một người không có ngữ cảnh.
xác suất

1
Đó là cả hai! Bạn có một chuỗi thời gian đếm.
whuber

1
Nó sẽ giúp ích rất nhiều để có một mô hình, hoặc ít nhất là một lý thuyết gợi ý, cố gắng giải thích tại sao một số đỉnh sẽ hẹp hơn và các đỉnh khác rộng hơn. Bởi vì bạn quan tâm đến độ rộng của các đỉnh này, nên bạn phải có ít nhất một mô hình khái niệm , nếu không phải là mô hình định lượng. Những cơ chế nào bạn cho rằng tạo ra các đỉnh như vậy và chi phối độ rộng của chúng? Bạn có thông tin độc lập gợi ý khi nào các đỉnh phải xảy ra không? (Điều này làm giảm sự không chắc chắn trong xác định đỉnh.) Các đỉnh có xảy ra đồng thời hoặc tại các thời điểm khác nhau không?
whuber

2
@whuber, đỉnh của hai quần thể gần như cùng thời. Một là ở vĩ độ ôn đới, và một ở vĩ độ nhiệt đới. Giả thuyết của chúng tôi là dân số nhiệt đới có một khu vực sinh thái hẹp hơn so với dân số ôn đới (nghĩa là một loạt các động vật ăn thịt và mầm bệnh gây áp lực cho dân số trong một thời gian phát sinh hẹp). cái đó có giúp ích không?
Atticus29

Câu trả lời:


3

Là những phân phối của một cái gì đó theo thời gian? Đếm, có lẽ? (Nếu vậy thì bạn có thể cần một cái gì đó khá khác biệt so với các cuộc thảo luận ở đây cho đến nay)

Những gì bạn mô tả không có vẻ như nó sẽ được chọn rất tốt vì sự khác biệt về phương sai của các bản phân phối.

Nghe có vẻ như bạn đang mô tả một cái gì đó mơ hồ như thế này (bỏ qua các con số trên các trục, nó chỉ để cho một cảm giác về kiểu mẫu chung mà bạn dường như đang mô tả):

đỉnh lưỡng kim

Nếu điều đó đúng, thì hãy xem xét:

Mặc dù chiều rộng của mỗi đỉnh về các trung tâm địa phương hẹp hơn đối với đường cong màu xanh lam, nhưng phương sai của các phân phối màu đỏ và màu xanh lam nói chung hầu như không khác nhau.

Nếu bạn xác định các chế độ và antimode trước đó, thì bạn có thể đo lường mức độ biến đổi cục bộ.


đây chính xác là câu hỏi của tôi Cảm ơn! Vì vậy, việc giới hạn phạm vi trục x của tôi sẽ bao gồm, chỉ là đỉnh đầu tiên, và sau đó tiến hành ... một thử nghiệm F ?? ... có phải là cách tiếp cận tốt nhất?
Atticus29

Bạn có thể không muốn thực hiện một thử nghiệm F cụ thể cho các phương sai, tôi nghĩ, vì một số lý do (Nếu bạn thực hiện kiểm tra phương sai theo cách đó, @fileunderwater đã đề cập đến một số lựa chọn thay thế cho thử nghiệm F). Nhưng trước khi chúng ta đi xa đến thế, bạn có thể giải quyết hai câu hỏi ở đầu bài viết của tôi không? Là sự phân phối số lượng theo thời gian?
Glen_b -Reinstate Monica

chúng là (xem các chỉnh sửa cho câu hỏi).
Atticus29

với thông tin mới và theo nhận xét của tôi để trả lời fileunderwater ở trên, bạn có gợi ý nào không?
Atticus29

1
Dường như có sự nhầm lẫn đáng kể trong câu hỏi và những nhận xét về "phương sai" là gì. Trong các ví dụ của Glen_b, dữ liệu màu xanh có phương sai lớn hơn dữ liệu màu đỏ xung quanh hai đỉnh rõ ràng (gần x = 10 và x = 17), vì dữ liệu màu xanh dao động nhiều hơn giữa các giá trị thấpcao (được vẽ trên trục dọc, không phải là chiều ngang, mà rõ ràng đại diện cho thời gian ).
whuber

3

Trước hết, tôi nghĩ rằng bạn nên xem xét các phân phối theo mùa một cách riêng biệt, vì phân phối lưỡng kim có thể là kết quả của hai quá trình khá riêng biệt. Hai phân phối có thể được kiểm soát bởi các cơ chế khác nhau, do đó, ví dụ phân phối mùa đông có thể nhạy cảm hơn với khí hậu hàng năm. Nếu bạn muốn xem xét sự khác biệt về dân số và lý do cho những điều này, tôi nghĩ rằng sẽ hữu ích hơn khi nghiên cứu các phân phối theo mùa một cách riêng biệt.

Đối với một bài kiểm tra, bạn có thể thử bài kiểm tra của Levine (về cơ bản là bài kiểm tra tính đồng nhất), được sử dụng để so sánh phương sai giữa các nhóm. Thử nghiệm của Bartlett là một giải pháp thay thế, nhưng thử nghiệm của Levene được cho là mạnh mẽ hơn đối với tính phi quy tắc (đặc biệt là khi sử dụng trung bình để thử nghiệm). Trong các bài kiểm tra của Levene và Bartlett được tìm thấy trong library(car).


Tôi đang xem xét bài kiểm tra của Levene ở R (Tôi tìm thấy nó trong thư viện "xe hơi"). Có vẻ như nó chỉ lấy một đối tượng mô hình tuyến tính làm đối số. Điều này không thực sự có ý nghĩa trong trường hợp của tôi, bởi vì tôi chỉ muốn so sánh phương sai của hai phân phối (không phân tích chúng với các mô hình tuyến tính và xác nhận các giả định đó). Có lời khuyên nào không?
Atticus29

1
@ Atticus29 Vâng, nó ở trong xe - lỗi của tôi. Tuy nhiên, nó không dựa trên một mô hình tuyến tính nghiêm ngặt - bạn có thể sử dụng leveneTest(y ~ as.factor(group), data= datafile)để kiểm tra sự khác biệt về phương sai giữa các nhóm và nếu bạn sử dụng tùy chọn `centre =" median "thì nó sẽ mạnh hơn đối với tính phi quy tắc. Nghiêm túc, tôi nghĩ rằng nó được gọi là thử nghiệm Brownsy Forsythe nếu dựa trên trung vị.
fileunderwater

Ok, vì vậy, câu hỏi ngớ ngẩn, nhưng tôi có hai cột dữ liệu là số lượng cá thể từ một loài cụ thể bị mắc bẫy. Hai cột này đại diện cho số lượng của cùng một loài trong cùng một ngày từ các địa điểm khác nhau. Tôi không chắc chắn làm thế nào để nhóm chúng bằng cách sử dụng vị trí mà không mất thông tin ngày bằng định dạng trên, nếu điều đó có ý nghĩa ....
Atticus29

@ Atticus Bạn có thể bao gồm một số dữ liệu mẫu cho câu hỏi của bạn (bao gồm tất cả các cột và biến phân loại) không? Điều này sẽ giúp làm rõ một số nhầm lẫn về chính xác loại dữ liệu bạn có (xem ví dụ: bình luận của @whuber). Cảm giác của tôi là bạn đã tổng hợp tất cả các hồ sơ loài từ hai mùa, nhưng bây giờ khi tôi đọc lại Q của bạn thì điều này dường như không phải vậy và tôi không chắc rằng giải pháp của mình là phù hợp. Bạn chỉ có bẫy ở hai địa điểm và có số lượng hàng ngày (?) Trong những thời gian này (trong một năm)?
fileunderwater

[cnd] ... Bạn nghĩ gì về đỉnh cao cuối mùa là do; một thế hệ thứ hai trong cùng một năm (bạn đang học loại taxi nào?) hoặc hai kiểu hình khác nhau? @ Atticus29
fileunderwater

2

Tôi đồng ý với những gì người khác đã nói - cụ thể là "phương sai" có thể là từ sai để sử dụng (xem như chức năng bạn đang xem xét không phải là phân phối xác suất mà là chuỗi thời gian).

Tôi nghĩ rằng bạn có thể muốn tiếp cận vấn đề này từ một góc nhìn khác - chỉ cần phù hợp với hai chuỗi thời gian với các đường cong THẤP. Bạn có thể tính toán khoảng tin cậy 95% và nhận xét định tính về hình dạng của chúng. Tôi không chắc bạn cần phải làm bất cứ điều gì lạ mắt hơn thế này.

Tôi đã viết một số mã MATLAB dưới đây để minh họa những gì tôi đang nói. Tôi đang hơi vội vàng nhưng có thể cung cấp làm rõ sớm. Phần lớn những gì tôi đã làm có thể được lấy trực tiếp từ đây: http://bloss.mathworks.com/loren/2011/01/13/data-driven-fits/

%% Generate Example data
npts = 200;
x = linspace(1,100,npts)';
y1 = (1e3*exp(-(x-25).^2/20) + 5e2*exp(-(x-65).^2/40));
y1_noisy = 50*randn(npts,1) + y1;
y2 = (1e3*exp(-(x-25).^2/60) + 5e2*exp(-(x-65).^2/100));
y2_noisy = 50*randn(npts,1) + y2;

figure; hold on
plot(x,y1_noisy,'ob')
plot(x,y2_noisy,'or')
title('raw data'); ylabel('count'); xlabel('time')
legend('y1','y2')

Bạn có thể muốn bình thường hóa hai chuỗi thời gian để so sánh các xu hướng tương đối của chúng hơn là mức tuyệt đối của chúng.

%% Normalize data sets
figure; hold on
Y1 = y1_noisy./norm(y1_noisy);
Y2 = y2_noisy./norm(y2_noisy);
plot(x,Y1,'ob')
plot(x,Y2,'or')
title('normalized data'); ylabel('normalized count'); xlabel('time')
legend('Y1','Y2')

Bây giờ làm cho THẤP phù hợp ...

%% Make figure with lowess fits
figure; hold on
plot(x,Y1,'o','Color',[0.5 0.5 1])
plot(x,Y2,'o','Color',[1 0.5 0.5])
plot(x,mylowess([x,Y1],x,0.15),'-b','LineWidth',2)
plot(x,mylowess([x,Y2],x,0.15),'-r','LineWidth',2)
title('fit data'); ylabel('normalized count'); xlabel('time')

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

Cuối cùng, bạn có thể tạo các dải tin cậy 95% như sau:

%% Use Bootstrapping to determine 95% confidence bands
figure; hold on
plot(x,Y1,'o','Color',[0.75 0.75 1])
plot(x,Y2,'o','Color',[1 0.75 0.75])

f = @(xy) mylowess(xy,x,0.15);
yboot_1 = bootstrp(1000,f,[x,Y1])';
yboot_2 = bootstrp(1000,f,[x,Y2])';
meanloess(:,1) = mean(yboot_1,2);
meanloess(:,2) = mean(yboot_2,2);
upper(:,1) = quantile(yboot_1,0.975,2);
upper(:,2) = quantile(yboot_2,0.975,2);
lower(:,1) = quantile(yboot_1,0.025,2);
lower(:,2) = quantile(yboot_2,0.025,2);

plot(x,meanloess(:,1),'-b','LineWidth',2);
plot(x,meanloess(:,2),'-r','LineWidth',2);
plot(x,upper(:,1),':b');
plot(x,upper(:,2),':r');
plot(x,lower(:,1),':b');
plot(x,lower(:,2),':r');
title('fit data -- with confidence bands'); ylabel('normalized count'); xlabel('time')

Bây giờ bạn có thể diễn giải con số cuối cùng như bạn muốn, và bạn có THẤP phù hợp để sao lưu giả thuyết của bạn rằng các đỉnh trong đường cong màu đỏ thực sự rộng hơn đường cong màu xanh. Nếu bạn có một ý tưởng tốt hơn về chức năng là gì, bạn có thể thực hiện hồi quy phi tuyến tính thay thế.

Chỉnh sửa: Dựa trên một số nhận xét hữu ích bên dưới, tôi sẽ thêm một số chi tiết khác về việc ước tính độ rộng cực đại một cách rõ ràng. Trước tiên, bạn cần đưa ra một số định nghĩa cho những gì bạn đang xem là "đỉnh" ở vị trí đầu tiên. Có lẽ bất kỳ vết sưng nào tăng quá ngưỡng (khoảng 0,05 trong các ô tôi đã thực hiện ở trên). Nguyên tắc cơ bản là bạn nên tìm cách tách các đỉnh "thực" hoặc "đáng chú ý" khỏi nhiễu.

Sau đó, với mỗi đỉnh, bạn có thể đo chiều rộng của nó theo một vài cách. Như tôi đã đề cập trong các bình luận bên dưới, tôi nghĩ thật hợp lý khi xem xét "nửa chiều rộng tối đa" nhưng bạn cũng có thể nhìn vào tổng thời gian đỉnh vượt quá ngưỡng của bạn. Tốt nhất, bạn nên sử dụng một số biện pháp khác nhau về chiều rộng cực đại và báo cáo mức độ phù hợp của kết quả của bạn đối với các lựa chọn này.

Bất kể số liệu nào bạn chọn, bạn có thể sử dụng bootstrapping để tính khoảng tin cậy cho mỗi đỉnh trong mỗi dấu vết.

f = @(xy) mylowess(xy,x,0.15);
N_boot = 1000;
yboot_1 = bootstrp(N_boot,f,[x,Y1])';
yboot_2 = bootstrp(N_boot,f,[x,Y2])';

Mã này tạo ra 1000 bootstrapping phù hợp cho các dấu vết màu xanh và đỏ trong các ô ở trên. Một chi tiết mà tôi sẽ đề cập đến là sự lựa chọn hệ số làm mịn 0.15 - bạn có thể chọn tham số này để nó giảm thiểu lỗi xác thực chéo (xem liên kết tôi đã đăng). Bây giờ tất cả những gì bạn phải làm là viết một hàm cô lập các đỉnh và ước tính độ rộng của chúng:

function [t_peaks,heights,widths] = getPeaks(t,Y)
%% Computes a list of times, heights, and widths, for each peak in a time series Y
%% (column vector) with associated time points t (column vector).

% The implementation of this function will be problem-specific...

Sau đó, bạn chạy mã này trên 1000 đường cong cho mỗi tập dữ liệu và tính phần trăm thứ 2,5 và 97,5 cho chiều rộng của mỗi đỉnh. Tôi sẽ minh họa điều này trên chuỗi thời gian Y1 - bạn sẽ làm tương tự cho chuỗi thời gian Y2 hoặc bất kỳ tập hợp dữ liệu quan tâm nào khác.

N_peaks = 2;  % two peaks in example data
t_peaks = nan(N_boot,N_peaks);
heights = nan(N_boot,N_peaks);
widths = nan(N_boot,N_peaks);
for aa = 1:N_boot
  [t_peaks(aa,:),heights(aa,:),widths(aa,:)] = getPeaks(x,yboot_1(:,aa));
end

quantile(widths(:,1),[0.025 0.975]) % confidence interval for the width of first peak
quantile(widths(:,2),[0.025 0.975]) % same for second peak width

Nếu bạn mong muốn, bạn có thể thực hiện các bài kiểm tra giả thuyết thay vì tính khoảng tin cậy. Lưu ý rằng mã ở trên là đơn giản - nó giả sử mỗi đường cong thấp được khởi động sẽ có 2 đỉnh. Giả định này có thể không luôn luôn giữ, vì vậy hãy cẩn thận. Tôi chỉ đang cố gắng minh họa cách tiếp cận mà tôi sẽ thực hiện.

Lưu ý: chức năng "mylowess" được đưa ra trong liên kết tôi đã đăng ở trên. Đây là những gì nó trông giống như ...

function ys=mylowess(xy,xs,span)
%MYLOWESS Lowess smoothing, preserving x values
%   YS=MYLOWESS(XY,XS) returns the smoothed version of the x/y data in the
%   two-column matrix XY, but evaluates the smooth at XS and returns the
%   smoothed values in YS.  Any values outside the range of XY are taken to
%   be equal to the closest values.

if nargin<3 || isempty(span)
  span = .3;
end

% Sort and get smoothed version of xy data
xy = sortrows(xy);
x1 = xy(:,1);
y1 = xy(:,2);
ys1 = smooth(x1,y1,span,'loess');

% Remove repeats so we can interpolate
t = diff(x1)==0;
x1(t)=[]; ys1(t) = [];

% Interpolate to evaluate this at the xs values
ys = interp1(x1,ys1,xs,'linear',NaN);

% Some of the original points may have x values outside the range of the
% resampled data.  Those are now NaN because we could not interpolate them.
% Replace NaN by the closest smoothed value.  This amounts to extending the
% smooth curve using a horizontal line.
if any(isnan(ys))
  ys(xs<x1(1)) = ys1(1);
  ys(xs>x1(end)) = ys1(end);
end

Chào mừng bạn đến trang web của chúng tôi và cảm ơn bạn đã đăng một câu trả lời rõ ràng, minh họa. Đây có vẻ là một cách tiếp cận tốt và một kỹ thuật đầy hứa hẹn. Tuy nhiên, dường như không trả lời được câu hỏi: làm thế nào bạn sẽ đi về (a) xác định "đỉnh" và (b) chính thức kiểm tra độ rộng của chúng?
whuber

Xu hướng của tôi sẽ là hiển thị các ô trên và đưa ra giải thích: "Mỗi quần thể màu đỏ và màu xanh lam cho thấy hai đỉnh xung quanh t = 25 và t = 65. Tuy nhiên, dân số đỏ tiếp cận các đỉnh này với tốc độ chậm hơn (ví dụ: đầu tiên cực đại, bắt đầu khoảng t = 10 so với t = 15 đối với dân số màu xanh) ... "Dải tin cậy 95% mang đến cho người đọc cảm giác những gì uốn cong trong các đường cong là tiếng ồn so với hiệu ứng thực. Tôi nghĩ rằng điều này là đủ để giải thích tập dữ liệu gốc được mô tả cho xuất bản (nếu đó là mục tiêu cuối cùng).
Alex Williams

Nhiều người đánh giá ngang hàng sẽ chỉ ra rằng (a) các TCTD này không phải là các TCTD cho độ rộng cực đại và (b) ngay cả khi đó, so sánh trực tiếp các TCTD không phải là một quy trình thống kê hợp pháp với tỷ lệ lỗi Loại I và Loại II đã biết. Khi câu hỏi ban đầu: làm thế nào để chính thức kiểm tra sự khác biệt rõ ràng trực quan?
whuber

Nếu bạn thực sự muốn thực hiện một số tính toán "chính thức" ... Tôi cho rằng bạn có thể tìm thấy tất cả min / max cục bộ ở mức thấp phù hợp (điểm mà đạo hàm đầu tiên bằng 0), sau đó tính biên độ cho mỗi đỉnh (bạn có thể phải bỏ qua các đỉnh có biên độ nhỏ) và cuối cùng tính "nửa chiều rộng tối đa" của mỗi đỉnh (thời gian giữa khi đường cong nằm ở giữa cho đến khi đường cong đi xuống một nửa). Sau đó, bạn có thể thực hiện một quy trình bootstrapping tương tự như được mô tả trong câu trả lời của tôi ở trên để xem liệu "nửa chiều rộng tối đa" màu đỏ có lớn hơn không. Tôi có thể cung cấp thêm chi tiết nếu có lãi.
Alex Williams

Bootstrapping hấp dẫn, nhưng không rõ ràng về cách thức tiến hành, vì không có mô hình thống kê cụ thể nào được đề xuất trong câu hỏi. Một số loại mô hình phù hợp với dữ liệu là điều cần thiết bởi vì (tối thiểu) các chuỗi thời gian này có thể sẽ thể hiện mối tương quan nối tiếp mạnh mẽ. Các chi tiết khác hầu như rất quan trọng: làm thế nào để xác định đỉnh nào là "nhỏ" và đỉnh nào không? Nên đo chiều rộng cực đại ở nửa chiều cao hoặc tại một số điểm khác? Mức độ làm mịn nào nên được sử dụng cho phù hợp với lowess? (Có ít nhất một tham số tùy ý để đặt.)
whuber
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.