Come si eseguono test di ipotesi con big data? Ho scritto il seguente script MATLAB per sottolineare la mia confusione. Tutto ciò che fa è generare due serie casuali ed eseguire una semplice regressione lineare di una variabile sull'altra. Esegue questa regressione più volte utilizzando valori casuali diversi e riporta le medie. Ciò che tende ad accadere è quando aumento le dimensioni del campione, i valori p in media diventano molto piccoli.
So che poiché la potenza di un test aumenta con la dimensione del campione, dato un campione abbastanza grande, i valori p diventeranno abbastanza piccoli, anche con dati casuali, da rifiutare qualsiasi test di ipotesi. Ho chiesto in giro e alcune persone hanno detto che con "Big Data" è più importante guardare la dimensione dell'effetto, cioè. se il test è significativo E ha un effetto abbastanza grande per noi da preoccuparci. Questo perché in campioni di grandi dimensioni i valori p rilevano differenze molto piccole, come è spiegato qui .
Tuttavia, la dimensione dell'effetto può essere determinata ridimensionando i dati. Di seguito ridimensiono la variabile esplicativa a una grandezza abbastanza piccola che, data una dimensione del campione abbastanza grande, ha un effetto significativo sulla variabile dipendente.
Quindi mi chiedo, come possiamo ottenere informazioni dai Big Data se esistono questi problemi?
%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