Jak przeprowadzasz testy hipotez z użyciem dużych zbiorów danych? Napisałem następujący skrypt MATLAB, aby podkreślić moje zamieszanie. Wystarczy wygenerować dwie losowe serie i przeprowadzić prostą regresję liniową jednej zmiennej na drugiej. Wykonuje tę regresję kilka razy, używając różnych wartości losowych i zgłasza średnie. Co się dzieje, gdy zwiększam rozmiar próbki, wartości p średnio stają się bardzo małe.
Wiem, że ponieważ moc testu wzrasta wraz z rozmiarem próbki, biorąc pod uwagę wystarczająco dużą próbkę, wartości p staną się wystarczająco małe, nawet przy losowych danych, aby odrzucić dowolny test hipotez. Zapytałem, a niektórzy powiedzieli, że w przypadku „Big Data” ważniejsze jest przyjrzenie się wielkości efektu, tj. czy test jest znaczący ORAZ ma wystarczająco duży wpływ, aby nas obchodzić. Wynika to z tego, że w dużych próbkach wartości p wychwycą bardzo małe różnice, tak jak to wyjaśniono tutaj .
Jednak wielkość efektu można określić przez skalowanie danych. Poniżej skaluję zmienną objaśniającą do wystarczająco małej wielkości, która biorąc pod uwagę wystarczająco dużą wielkość próby, ma duży znaczący wpływ na zmienną zależną.
Zastanawiam się więc, w jaki sposób możemy uzyskać wgląd w Big Data, jeśli te problemy występują?
%make average
%decide from how many values to make average
obs_inside_average = 100;
%make average counter
average_count = 1;
for average_i = 1:obs_inside_average,
%do regression loop
%number of observations
n = 1000;
%first independent variable (constant term)
x(1:10,1) = 1;
%create dependent variable and the one regressor
for i = 1:10,
y(i,1) = 100 + 100*rand();
x(i,2) = 0.1*rand();
end
%calculate coefficients
beta = (x'*x)\x'*y;
%calculate residuals
u = y - x*beta;
%calcuatate sum of squares residuals
s_2 = (n-2)\u'*u;
%calculate t-statistics
design = s_2*inv(x'*x);
%calculate standard errors
stn_err = [sqrt(design(1,1));sqrt(design(2,2))];
%calculate t-statistics
t_stat(1,1) = sqrt(design(1,1))\(beta(1,1) - 0);
t_stat(2,1) = sqrt(design(2,2))\(beta(2,1) - 0);
%calculate p-statistics
p_val(1,1) = 2*(1 - tcdf(abs(t_stat(1,1)), n-2));
p_val(2,1) = 2*(1 - tcdf(abs(t_stat(2,1)), n-2));
%save first beta to data column 1
data(average_i,1) = beta(1,1);
%save second beta to data column 2
data(average_i,2) = beta(2,1);
%save first s.e. to data column 3
data(average_i,3) = stn_err(1,1);
%save second s.e. to data column 4
data(average_i,4) = stn_err(2,1);
%save first t-stat to data column 5
data(average_i,5) = t_stat(1,1);
%save second t-stat to data column 6
data(average_i,6) = t_stat(2,1);
%save first p-val to data column 7
data(average_i,7) = p_val(1,1);
%save second p-val to data column 8
data(average_i,8) = p_val(2,1);
end
%calculate first and second beta average
b1_average = mean(data(:,1));
b2_average = mean(data(:,2));
beta = [b1_average;b2_average];
%calculate first and second s.e. average
se1_average = mean(data(:,3));
se2_average = mean(data(:,4));
stn_err = [se1_average;se2_average];
%calculate first and second t-stat average
t1_average = mean(data(:,5));
t2_average = mean(data(:,6));
t_stat = [t1_average;t2_average];
%calculate first and second p-val average
p1_average = mean(data(:,7));
p2_average = mean(data(:,8));
p_val = [p1_average;p2_average];
beta
stn_err
t_stat
p_val