如何在主题设计之间使用corrcoef函数

How to use corrcoef function for between subject design

我有 150 名参与者,我需要根据健康与不健康来划分他们。健康受试者是指不吸烟并且没有任何诊断出的精神障碍。我有两个不同的数据来判断他们是否健康。

%B.disorder 0= does not have any disoroder  1= have at least one disorder
%B.smoke 0= non-smoker 1= smoker

healthypart= sum(Info.mentalhealth,2)+sum(Info.smoking,2);

healthysubs(healthysubs~=0)= 5;
healthysubs(healthysubs==0)= 1;      % 1 = healthy
healthysubs(healthysubs==5)= 0; % unhealthy subjects(smoker, diagnosed w md)

我需要为 'all subjects' 和 'healthy subjects' 绘制相关表。这就是为什么我需要为所有主题创建变量。我用以下行做到了这一点。

allsubs=ones(150,1);

我在这些行中使用了 corrcoef;

X = [cell2mat(Info.reactionTimes), healthysubs,allsubs];

[R, P] = corrcoef(X, 'rows', 'pairwise');

这是我的结果;

R =

   1.0000   -0.0142       NaN
   -0.0142    1.0000       NaN
    NaN       NaN       NaN


P =

1.0000    0.8883       NaN
0.8883    1.0000       NaN
   NaN       NaN       NaN

我认为这是由于我的健康受试者变量引起的。当我放置另一个变量而不是它时,我没有得到任何 NaN 值。那么我怎样才能对我的健康受试者和所有受试者都使用 corrcoef 呢?有没有办法创建一个所有主题都可用?

Info.mentalhealth=            

 1                      
 1               
 0
 1                
...               
 1                
 1                 
 0                    
 1                   
 0                 
 0
 0                    
 0                     
 0                        


  Info.smoking=  

 0
 0
 1
 1
 1
 0
 1
...
 1
 0
 0
 1
 1
 1
 1
 0

这些是我关于吸烟者和疾病的数据,1 表示参与者患有疾病或吸烟者。它们是两个不同的值。每行代表一个参与者。

问题是您在分析中引入的 allsubs 逻辑从统计角度看没有意义。您正在尝试计算变量与样本总体之间的相关系数。但是 allsubs 的值是没有意义的,因为它是一个具有零方差和单位均值的向量。

这是corrcoef内部调用的函数,负责计算系数:

function [r,n] = correl(x)
%CORREL Compute correlation matrix without error checking.

[n,m] = size(x);
r = cov(x);
d = sqrt(diag(r)); % sqrt first to avoid under/overflow
r = r ./ d ./ d'; % r = r ./ d*d';
% Fix up possible round-off problems, while preserving NaN: put exact 1 on the
% diagonal, and limit off-diag to [-1,1].
r = (r+r')/2;
t = find(abs(r) > 1); r(t) = r(t)./abs(r(t));
r(1:m+1:end) = sign(diag(r));

从技术角度看,cov函数returns0对应allsubs相关的行列值。因此,将 0 除以 0 得到 NaN。使用 pairwise 计算并不能解决问题,因为如果矩阵不包含 NaN 值,则回退检查会像使用 all 一样运行计算。

如果要正确执行此分析,则必须将操作分成两个不同的部分。在第一个中你计算 disorderhealthysubs 之间的相关系数,在第二个中你计算 disorderunhealthysubs 之间的相关系数:

disorder = [1 1 0 1 1 1 0 1 0 0 0 0 0 1 1].';
smoke = [0 0 1 1 1 0 1 1 0 0 1 1 1 1 0].';

healthysubs = (sum(disorder,2) + sum(smoke,2)) == 0;
unhealthysubs = ~healthysubs;

[R_healthy,P_healthy] = corr(disorder,healthysubs)
[R_unhealthy,P_unhealthy] = corr(disorder,unhealthysubs)

结果是:

R_healthy = -0.419313934688767
P_healthy = 0.119747441953059

R_unhealthy = 0.419313934688767
P_unhealthy = 0.119747441953059

当然,正如您所注意到的,虽然 p 值始终显示相同的显着性......disorder 和不健康潜艇之间的相关系数与 [= 之间的相关系数方向相反25=] 和健康的潜艇。因此,您可能还想只计算其中一个并反转符号以获得另一个。