【问题标题】:How to build multiple regression for structures within array of structures in Matlab如何在Matlab中为结构数组中的结构建立多元回归
【发布时间】:2016-02-21 04:00:21
【问题描述】:

我正在尝试使用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 适用于矩阵和向量。我不明白你想如何将它与结构一起使用。这些结构包含什么?你不能只访问正确的字段并使用regress吗?
  • 我刚刚编辑了问题并添加了带有结构的代码。我在使用回归访问这些结构方面不是很成功。我需要以某种方式将这些结构转换为矩阵和向量吗?

标签: matlab regression


【解决方案1】:

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

将每个结构的每个字段提取成一个逗号分隔的列表,然后使用regress

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

b = regress(y, X);

这是假设第一列由s1 组成,第二列由s2 组成,用于“独立”矩阵。此外,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

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

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

>> format long g;
>> b

b =

        -0.687194475280996
         -0.21086419010155

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

【讨论】:

  • 完美!谢谢!这只是我用来测试模型的数据集的摘录。稍后我将用大约 60,000 个数据点填充它,因此我认为将它们全部放入结构数组中是个好主意。
  • @ArthurTarasov 啊哈,我明白了。您究竟是如何加载 MATLAB 中的数据点的?将它们直接存储为矩阵而不是结构数组是否明智?我的意思不是侮辱或批评,但这种额外的表现形式似乎是多余的。
  • @ArthurTarasov 我已经添加了一些关于为什么需要逗号分隔的列表以及我用来解决问题的语法的更多解释。祝你好运!
  • 很好,非常感谢!是的,现在我需要考虑将所有数据存储为矩阵。数据是一个很大的异类,所以我担心我会把它们混在一起,没有结构名称,我打算用它作为标签。
  • @ArthurTarasov 啊,我明白了。在这种情况下,考虑创建一个table,然后在调用regress 之前,通过table2arraytable 转换为矩阵。这样的事情会起作用:T = table(s1, s2); 假设您的自变量存储在向量s1s2 中。然后,您只需在命令提示符中输入 T 并按 ENTER 即可显示该表。您还可以查看每个变量的标签信息......然后到时候,X = table2array(T);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多