MatLab中的fitcdiscr函数

时间:2015-03-19 23:08:39

标签: matlab sas

我试图使用fitcdiscr类来重现SAS结果,但我显然没有正确使用该功能。我已经反复通过MatLab关于这个主题的文档,但似乎无法弄清楚我指定的内容不正确。我首先发布数据,然后是指定正确线性判别函数的SAS代码,然后是我正在努力解决的MatLab代码。任何帮助将不胜感激。

数据:

a 191 131 53
a 185 134 50
a 200 137 52
a 173 127 50
a 171 128 49
a 160 118 47
a 188 134 54
a 186 129 51
a 174 131 52
a 163 115 47
b 186 107 49
b 211 122 49
b 201 144 47
b 242 131 54
b 184 108 43
b 211 118 51
b 217 122 49
b 223 127 51
b 208 125 50
b 199 124 46

SAS:

options ls=78;
title "Discrimant Analysis - Insect Data";
data insect;
infile "C:\Users\Zach\Documents\Classes\Penn State\STAT 505\Data\insect.txt";
input species $ joint1 joint2 aedeagus;
run;
data test;
input joint1 joint2 aedeagus;
cards;
194 124 49
;
proc discrim data=insect pool=test crossvalidate testdata=test testout=a;
class species;
var joint1 joint2 aedeagus;
run;
proc print;
run;

MatLab的:

path = 'C:\Users\Zach\Documents\Classes\Penn State\STAT 505\Data';
file = 'insect.txt';

fid = fopen(fullfile(path,file));
X = textscan(fid, '%s%f%f%f','Delimiter');
fclose(fid); clear fid

data = cell2mat(X(:,2:4));%data
grps = X{:,1};%group a or b
prednames = {'joint 1', 'joint 2', 'aedeagus'};

M = fitcdiscr(data,grps,'PredictorNames',prednames,...
    'Prior','uniform','DiscrimType','linear');

使用

的变体指定线性函数
M.Coeffs(1,2).Linear  and  M.Coeffs(1,2).Const

我期待的两个功能是:

da = -247 -1.4x1 + 1.5x2 10.9x3

db = -193 - .74x1 + 1.1x2 + 8.3x3

感谢您的帮助。

编辑:

使用"应用多变量统计分析,第6版"作者:Johnson和Wichern,第11.3节,我已经生成了以下代码,它给出了SAS结果:

xbar = M.Mu;
S = M.Sigma;
Sinv = inv(S);
for ii = 1:2
    d0(ii,:) = -1/2*xbar(ii,:)*Sinv*xbar(ii,:)';
    d(ii,:) = xbar(ii,:)*Sinv;
end

我仍然想知道fitcdiscr正在做什么。

0 个答案:

没有答案