我目前正在使用Matlab中的函数stepwiselm
开发时间序列模型。我正在运行Matlab R2014a。可以找到有关该功能的文档here。
数学模型简介:
它是一个标准的线性模型,包含5个变量和大约22,000个数据样本。因此,我有以下系统:
y = Ax,其中:y~dim [22,000 x 1] A~dim [22,000 x 5],x~dim [5 x 1]
通过以下调用,模型应非常简单:
mdl = stepwiselm(A,y)
现在这应该是一个非常简单的函数:f = 1 + x1 + x2 + x3 + x4 + x5 不幸的是,Matlab并非如此。
问题:
Matlab表示以下类型的函数:
y ~ 1 + x1*x2 + x1*x3 + x1*x4 + x1*x5 + x2*x3 + x2*x5 + x3*x5 + x4*x5
Matlab返回以下内容:
1. Adding x4, FStat = 3622.5909, pValue = 0
2. Adding x5, FStat = 415.9279, pValue = 1.677113e-91
3. Adding x2, FStat = 52.1139, pValue = 5.42893e-13
4. Adding x3, FStat = 60.8965, pValue = 6.31635e-15
5. Adding x3:x5, FStat = 126.9652, pValue = 2.328284e-29
6. Adding x4:x5, FStat = 161.0195, pValue = 9.456442e-37
7. Adding x2:x3, FStat = 26.6471, pValue = 2.46608e-07
8. Adding x1, FStat = 28.4298, pValue = 9.82349e-08
9. Adding x1:x5, FStat = 160.2774, pValue = 1.369563e-36
10. Adding x1:x3, FStat = 87.8781, pValue = 7.69837e-21
11. Adding x2:x5, FStat = 26.6218, pValue = 2.4985e-07
12. Adding x1:x2, FStat = 14.5758, pValue = 0.000135047
13. Adding x1:x4, FStat = 10.4336, pValue = 0.00123946
现在,对于我来说,默认情况下matlab选择了这种交互模型,这是非常不合理的。所以我试过以下来克服这个问题:
我目前的解决方案:
1)
函数stepwiselm
接收如文档中所述的modelspec输入。我试图在我的通话中包含'线性',以便呼叫变为:
mdl = stepwiselm(A,y,'linear')
然而,没有解决问题,输出与以前完全相同。
2)
我也尝试使用函数stepwisefit
。 stepwisefit
DOES 实际工作并制作线性预测模型。所以我的问题如下:
问题:
我承认stepwisefit
可能是我数学问题的解决方案,但我很想知道为什么stepwiselm
没有返回标准线性模型。
你们有没有想过为什么stepwiselm
没有返回有效的线性模型?
谢谢!
答案 0 :(得分:0)
我相信原因
mdl = stepwiselm(A,y,'linear')
不能解决的问题是它只强制起始模型是线性的,而不是结束模型。我相信你真的想要upper option,这似乎更符合你的想法:
'Upper' - 描述最大术语集的模型规范 fit'interaction'(默认)|串
描述拟合中最大术语集的模型规范, 指定为逗号分隔对,由'Upper'和一个组成 modelspec命名模型的字符串选项。
示例:'Upper','quadratic'
您对数据生成过程的直觉是否有可能是错误的?解决这个问题的一种方法是残差和拟合优度分析。当你使用stepwiselm和stepwisefit估算模型时(或两者都使用榆木但是一个线性上部而另一个没有),两个模型的残差如何比较?他们是异性的吗?两个回归中的调整后的R ^ 2是否具有可比性?您可能会惊讶地发现您不知道存在的数据中的关系。