我有一个12列和20000行的单元格类型变量。我称之为Atotal:
Atotal= [ATY1;ATY2;ATY3;ATY4;ATY5;ATY6;ATY7;ATY8;ATY9;ATY10;ATY11;ATY12;ATY13;ATY14;ATY15;ATY16;ATY17];
Atotal={ 972 1 0 0 0 0 0 21 60 118 60110 2001
973 0 0 1 0 0 0 15 46 1496 60110 2001
980 0 0 0 0 1 0 4 68 142 40502 2001
994 1 0 0 0 0 0 13 33 86 81101 2001
995 0 0 0 1 0 0 9 55 183 31201 2001
1024 1 0 0 0 0 0 10 26 3 80803 2001}
我从那里得到我的依赖和自变量:
Y1=cell2mat(Atotal(:,2));
X1=cell2mat(Atotal(:,3));
然后我倒退了。考虑到我的因变量Y1是二进制而我的自变量X1 也是分类变量,我使用下面的代码,仍然不确定是否这是正确的。
mdl1 = fitlm(X1,Y1,'CategoricalVars',logical([1]));
然后我添加更多的假人并尝试相同的代码:
X2=cell2mat(Atotal(:,4));
X3=cell2mat(Atotal(:,5));
X4=cell2mat(Atotal(:,6));
X5=cell2mat(Atotal(:,7));
mdl2 = fitlm(X1,X2,X3,X4,X5,Y1,'CategoricalVars',logical([1,2,3,4,5]));
但现在它给了我一些错误:
Error using internal.stats.parseArgs (line 42)
Parameter name must be text.
Error in LinearModel.fit (line 849)
[intercept,predictorVars,responseVar,weights,exclude, ...
Error in fitlm (line 117)
model = LinearModel.fit(X,varargin{:});
有人可以帮助我吗?谢谢
答案 0 :(得分:1)
我认为您的代码存在两个问题。
第一个问题是fitlm需要以下参数:
mdl = fitlm(X,y,modelspec)
这基本上意味着您必须将预测变量收集到一个矩阵中,并将其用作第一个参数。所以你应该做到以下几点:
X = [X1, X2, X3, X4, X5];
fitlm(X, Y1, ...)
第二个问题是,CategoricalVars
参数fitlm
需要一个逻辑向量(一个向量,其中变量是分类的,而在连续的情况下为零)或数字索引向量。所以正确的用法是:
X = [X1, X2, X3, X4, X5];
fitlm(X, Y1, 'CategoricalVars',logical([1,1,1,1,1]))
或
X = [X1, X2, X3, X4, X5];
fitlm(X, Y1, 'CategoricalVars', [1,2,3,4,5])
以上代码段应该可以正常运行。
但是,您可以考虑将分类变量声明为分类变量(如果您使用Matlab R2013b或更高版本)。在这种情况下,您将执行以下操作:
X1 = categorical(cell2mat(Atotal(:,3)));
X2 = categorical(cell2mat(Atotal(:,4)));
X3 = categorical(cell2mat(Atotal(:,5)));
X4 = categorical(cell2mat(Atotal(:,6)));
X5 = categorical(cell2mat(Atotal(:,7)));
X = [X1, X2, X3, X4, X5];
fitlm(X, Y1)
这种方法的优点是Matlab知道您的Xi
变量是分类的,并且它们将被相应地处理,因此您不必每次要运行时都指定CategoricalVars
参数回归。
最后,fitlm
函数的Matlab documentation非常适用于很多示例,所以请检查一下。
注意:正如其他人在评论中提到的那样,您还应该考虑运行logit回归,因为您的响应变量是二进制的。在这种情况下,您可以通过以下方式估算模型:
X = [X1, X2, X3, X4, X5];
fitglm(X, Y1, 'Distribution', 'binomial', 'Link', 'logit')
但是,如果你这样做,一定要了解逻辑模型是什么,它的假设是什么以及它的系数解释是什么。