大数据假设检验

机器算法验证 假设检验 大数据
2022-03-21 02:12:38

您如何使用大数据进行假设检验?我编写了以下 MATLAB 脚本来强调我的困惑。它所做的只是生成两个随机序列,并对另一个变量进行简单的线性回归。它使用不同的随机值多次执行此回归并报告平均值。往往会发生的情况是,当我增加样本量时,p 值平均变得非常小。

我知道,因为检验的能力随着样本量的增加而增加,给定足够大的样本,p 值将变得足够小,即使是随机数据,也可以拒绝任何假设检验。我四处打听,有人说“大数据”更重要的是看效果大小,即。测试是否显着以及是否具有足够大的影响让我们关心。这是因为在大样本量中,p 值会发现非常小的差异,就像这里解释的那样。

但是,效果大小可以通过数据的缩放来确定。下面我将解释变量缩放到足够小的量级,即给定足够大的样本量,它对因变量有很大的显着影响。

所以我想知道,如果存在这些问题,我们如何从大数据中获得任何洞察力?

%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
4个回答

正如彼得建议的那样,我认为在“大数据”时代,重要的事情之一就是更少地强调 p 值,而更多地关注效应大小的估计。

我自己的一些工作以我认为比大数据更隐蔽的方式来解决这个问题——对于随机计算模型,你的能力完全取决于耐心和计算资源。这是一种人工构造。

所以回到效果估计。即使它很重要,在现实世界中增加 0.0001% 是否重要?

我也一直在尝试扭转报告学习能力背后的一些想法。与其报告您的研究必须检测到观察到的效应的功效,不如报告该研究能够找到的最小效应量。这样,读者就可以知道重要性是否得到了基本保证。

您想要的洞察力将来自置信区间,而不是来自 p 值。如果您的统计假设是正确的,那么对于非常大的样本量,您将获得非常精确的置信区间。

无论数据是大还是小,查看效果大小都很重要。

使用纯随机数据,您应该在 5% 的时间内获得显着的结果。这就是 p 值的含义。无论样本大小如何,这也是正确的。随样本量的不同而变化的是,必须发现效应量有多小才能显着;但是,对于大量纯噪声样本,可能只有很小的差异;对于小样本,更大的差异会更频繁地发生。想想抛硬币 10 次:得到 8、9 甚至 10 个正面都不会是荒谬的。但是,如果你抛硬币 1000 次,得到 800 个正面就真的很奇怪,更不用说 900 或 1000 个(确切的数字可以计算出来,但这不是重点。但是,抛 1000 次,即使是很小的偏差从 500 起将是显着的。

例如带有随机数据的 t 检验,2 个长度为 10 的向量

set.seed(102811)
samp.size <- 10
t10 <- vector("numeric", 100)
for (i in 1:100){
x <- rnorm(samp.size)
y <- rnorm(samp.size)
t <- t.test(x,y)
t10[i] <- t$p.value
sum(t10 < .05)/100

我得到了 0.07

有两个大小为 1000 的向量

set.seed(10291)
samp.size <- 1000
t1000 <- vector("numeric", 100)
for (i in 1:100){
  x <- rnorm(samp.size)
  y <- rnorm(samp.size)
  t <- t.test(x,y)
  t1000[i] <- t$p.value
}  
sum(t1000 < 0.05)/100

我得到了 0.05。

如前所述,在假设检验中,您实际上是在调查原假设,通常是希望您可以拒绝它。除了其他答案之外,我还想提出一种不同的方法。

一般来说,如果您对数据中可能发生的情况有某种理论,您可以进行验证性分析(例如验证性因素分析只是一个例子)。为此,您需要一个模型。然后,您可以看到您的模型与数据的拟合程度。这种方法还允许针对彼此测试不同的模型。大数据的好处在于它允许您实际进行这些模型测试。相比之下,在心理学等领域,通常不可能真正做到这一点,因为对于这些方法而言,样本量往往太小。

我意识到,对于大数据,通常会使用探索性方法,因为还没有理论。另外,由于我不知道您到底对什么感兴趣,因此这可能不是一个真正的选择。