如何在 Matlab 中为结构数组中的结构构建多元回归

How to build multiple regression for structures within array of structures in Matlab

我正在尝试使用 regress 函数:

b = regress(y,X);

但是,我无法让它与结构一起工作。我想我需要将两个结构(独立变量)放入 X 才能工作。有办法吗?也许我走错路了?

这是我的结构的样子:

s(1).s1 = -0.169
s(2).s1 = 0.125
s(3).s1 = -0.188
s(4).s1 = 0.188
s(5).s1 = 0.012

s(1).s2 = 0.572
s(2).s2 = 0.300
s(3).s2 = 0.018
s(4).s2 = 0.147
s(5).s2 = 1.080

s(1).s3 = 0.076
s(2).s3 = -0.490
s(3).s3 = -0.144
s(4).s3 = -0.134
s(5).s3 = -0.183

s1s2 是我的自变量,s3 是因变量。

我无法理解您将值作为结构数组中的字段的原因....但是使用它,提取字段并将它们放入矩阵(用于自变量)和向量中(对于因变量)。

将每个结​​构的每个字段提取到逗号分隔的列表中,然后使用 regress:

X = [[s.s1].' [s.s2].'];
y = [s.s3].';

b = regress(y, X);

这是假设第一列由 s1 组成,第二列由 s2 组成 "independent" 矩阵。此外,s3 是因变量。简而言之,X 矩阵将由两列组成。第一列是从结构数组中提取的所有 s1 值,第二列是提取的所有 s2 值。相关向量由所有 s3 值组成。这种语法 [s.s1](或 [s.s2][s.s3])可能看起来有点奇怪,但它在 MATLAB 中很常见。例如,执行 s.s1 会生成一个逗号分隔的列表,该列表从结构数组中获取每个字段并像这样表示它们:

s(1).s1, s(2).s1, s(3).s1, s(4).s1, s(5).s1

[] 包装它实际上创建了一个数组,但这创建了一个 向量。我们需要将其设为列向量,这就是需要转置 (.') 运算符的原因。对于 regress,每一列都是一个变量,而每一行都是 X 矩阵的样本。我们对 s2 字段和 s3.

的相关向量重复此操作

在 运行 这段代码之后,我得到:

>> format long g;
>> b

b =

        -0.687194475280996
         -0.21086419010155

format long g;用于显示答案的更多精度。