我有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)
我需要为所有受试者绘制相关表格'和健康的科目'。这就是为什么我需要为所有主题创建变量的原因。我用以下一行做了这个。
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表示参与者患有紊乱或吸烟者。它们是两个不同的价值观。每行代表一个参与者。
答案 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
函数返回0
,与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
和不健康的潜意识之间的相关系数与{{1}之间的相关系数的方向相反。和健康的潜艇。因此,您可能还希望仅计算其中一个并反转符号以获取另一个。