如何在主题设计之间使用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
一样运行计算。
如果要正确执行此分析,则必须将操作分成两个不同的部分。在第一个中你计算 disorder
和 healthysubs
之间的相关系数,在第二个中你计算 disorder
和 unhealthysubs
之间的相关系数:
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=] 和健康的潜艇。因此,您可能还想只计算其中一个并反转符号以获得另一个。
我有 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
一样运行计算。
如果要正确执行此分析,则必须将操作分成两个不同的部分。在第一个中你计算 disorder
和 healthysubs
之间的相关系数,在第二个中你计算 disorder
和 unhealthysubs
之间的相关系数:
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=] 和健康的潜艇。因此,您可能还想只计算其中一个并反转符号以获得另一个。