필터 지우기
필터 지우기

Two way Repeated Measures ANOVA two different ways

조회 수: 13 (최근 30일)
Mark Robinson
Mark Robinson 2018년 11월 22일
답변: Scott MacKenzie 2022년 2월 25일
I'm working on a dataset for a stats course and I am curious to know about ways of conducting a two way repeated measures ANOVA
A researcher wants to compare the body temperatures of participants when performing exercise under conditions of euhydration and dehydration. The researcher records their body temperatures at the start (0 minutes), midpoint (30 minutes) and end of exercise (60 minutes). The dataset is below.
% This code produces the appropraite ANOVA output
% first enter the temperature data
temp = [37.1 37.2 37.3 37.5 37 37.4 38.2 38.4 38.3 38.1 38 37.9...
39.2 39 38.7 38.9 38.6 38.7 37.3 37.1 37.2 37.5 37.2 37.7...
38.5 38.7 38.4 38.3 38.3 38.2 39.6 39.5 39.3 39.4 38.5 39.2]';
% time condition 1=time0, 2=time30, 3 = time60
time = cat(1, ones(6,1), ones(6,1)*2, ones(6,1)*3, ones(6,1), ones(6,1)*2, ones(6,1)*3);
% hydration condition 1=euhydration, 2=dehydration
hydrat = cat(1, ones(18,1), ones(18,1)*2); % hydration
% subjects
subj = [1 2 3 4 5 6]';
subj = cat(1,subj,subj,subj,subj,subj,subj);
% ANOVA using anovan
[p,tbl,stats,terms] = anovan(temp,{time,hydrat,subj},'model',2,'random',3,'varnames',{'Time','Hydration','Subj'});
I was also interested to know if I could use the "fitrm" and "ranova" functions but this does not produce the same output, but I'm struggling to understand why
% first enter the temperature data
euh_0 = [37.1 37.2 37.3 37.5 37 37.4]';
euh_30 = [38.2 38.4 38.3 38.1 38 37.9]';
euh_60 = [39.2 39 38.7 38.9 38.6 38.7]';
deh_0 = [37.3 37.1 37.2 37.5 37.2 37.7]';
deh_30 = [38.5 38.7 38.4 38.3 38.3 38.2]';
deh_60 = [39.6 39.5 39.3 39.4 38.5 39.2]';
temp = table(euh_0, euh_30, euh_60, deh_0, deh_30, deh_60) % create table
within = table([1 1 1 2 2 2]',[1 2 3 1 2 3]','VariableNames',{'Hyd' 'Time'}) % within model
% fit rm model
temp_rm = fitrm(temp,'euh_0-deh_60~1','WithinDesign',within,'WithinModel','Hyd*Time')
[ranovatbl,A,C,D] = ranova(temp_rm,'WithinModel','Hyd*Time')

채택된 답변

Scott MacKenzie
Scott MacKenzie 2022년 2월 25일
@Mark Robinson The reason anovan and ranova give different results is that the within table in your solution using ranova is not setup properly. In your code, the data in the columns are of type double. They need to be of type categorical:
within = table([1 1 1 2 2 2]',[1 2 3 1 2 3]','VariableNames',{'Hyd' 'Time'}) % within model
within.Hyd = categorical(within.Hyd);
within.Time = categorical(within.Time);
With the above change, the results are the same using anovan or ranova.

추가 답변 (1개)

François-Xavier Michon
François-Xavier Michon 2019년 10월 25일
Hello ,
first I m not a stastistic expert so I could be wrong
In the first function, you use anovan is a simple multiple way anova (you consider all your data independant, not taking in account it come from same subjects) . It's normal to get a different output than with ranova because ranova is the matlab function to be use on repeated mesure design.
For me your data set is a repeated mesure design because you repeat a mesure on the same subject at different time point. using ranova I found the same result than in a stat software using a repeated measure 2way anova.
but before using anova you need to check the normality and homogeneity of the data set . If it fails you need to use an non parametric test like krustal wallis
late response but still a response :).
  댓글 수: 1
Kanupriya Gupta
Kanupriya Gupta 2022년 2월 25일
Actually, they did take the repeated measures into account when using anovan. They included a 'subj' variable in their script and assigned it as a 'random' variable.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Analysis of Variance and Covariance에 대해 자세히 알아보기

제품


릴리스

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by