如何在主题设计

时间:2018-02-10 18:27:11

标签: matlab statistics correlation

我有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表示参与者患有紊乱或吸烟者。它们是两个不同的价值观。每行代表一个参与者。

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一样运行计算。

如果要正确执行此分析,则必须将操作拆分为两个不同的操作。在第一个中,您计算​​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和不健康的潜意识之间的相关系数与{{1}之间的相关系数的方向相反。和健康的潜艇。因此,您可能还希望仅计算其中一个并反转符号以获取另一个。