拟合线和截距列公式,帮忙解决一个错误JMP18.1.1
我正在处理测量数据,我想使用相邻的数据点计算特定数据点的拟合线。然后获取 y=0 的 x 轴截距。
环顾四周并尝试自己解决这个问题,似乎我可以使用 JMP 中的“线性回归”或“最小二乘求解”函数来解决这个问题。
我已经在列公式中完成了此操作(使用 if 语句来识别要评估的数据点):
x = J( 2, 1, 0 );
y = J( 2, 1, 0 );
x[1, 1] = Lag( :y_column, 1 );
x[2, 1] = Lag( :y_column, -1 );
y[1, 1] = Lag( :x_column, 1 );
y[2, 1] = Lag( :x_column, -1 );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
此代码产生正确的输出,但在运行时会引发错误:
“无法估计参数估计的方差,因为 X 的秩等于 X 的行数”
我不太明白这里的问题是什么。反正我只想要拦截。有没有简单的方法可以解决这个问题?或者关闭警告?
我可以尝试使用最小二乘函数采用类似的方法,但会出现相同的错误。
我制作了一个示例表来显示该问题。重新运行该表上的公式以查看错误。
谢谢
基础数据分析与建模回复:拟合线和截距列公式,帮助解决错误我似乎已经通过将回归中的数据点数量增加到 3(包括当前数据点)来立即自行解决了这个问题。
x = J( 3, 1, 0 );
y = J( 3, 1, 0 );
x[1, 1] = Lag( :y_column, 1 );
x[2, 1] = :y_column;
x[3, 1] = Lag( :y_column, -1 );
y[1, 1] = Lag( :x_column, 1 );
y[2, 1] = :x_column;
y[3, 1] = Lag( :x_column, -1 );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
这样可以避免错误出现,目前可能还好。不过,我还是希望将来可以仅从 2 个点计算截距。所以我的问题仍然存在。
谢谢
回复:拟合线和截距列公式,帮助解决错误您可以包括进行计算的点(因此是 3 个点而不是 2 个)
If(Row() > 1 & Row() < Col Number(:y_column),
Linear Regression(:y_column[Index(Row() - 1, Row() + 1)]`, :x_column[Index(Row() - 1, Row() + 1)]`)[1][1];
,
.
);
回复:拟合线和截距列公式,帮助解决错误我现在遇到一个问题,返回的拦截值不正确......
我必须展示真实数据的摘录来证明这一点。文件已附加。
我正在评估另一列达到最大值的行处的截距。
该脚本从相邻行正确获取值,我可以在日志输出中看到它正确地形成了矩阵。
它给出截距的输出值为“-1053478758”。但如果我手动将这些 x/y 值放入单独的表中并对它们进行双变量线拟合,它会给出截距“-1.22”,这是正确的。
代码:
If( :"dlogIds/dVgs"n == Col Maximum( :"dlogIds/dVgs"n ),
x = J( 3, 1, 0 );
y = J( 3, 1, 0 );
x[1, 1] = Lag( :I_Drain Abs, 1 );
x[2, 1] = :I_Drain Abs;
x[3, 1] = Lag( :I_Drain Abs, -1 );
y[1, 1] = Lag( :V_GATE, 1 );
y[2, 1] = :V_GATE;
y[3, 1] = Lag( :V_GATE, -1 );
Show( x );
Show( y );
Coeffs = Linear Regression( y, x )[1];
Coeffs[1];
)
完全不明白为什么这不对……
回复:拟合线和截距列公式,帮助解决错误可能是某些准确性问题/疏忽/错误。您可以联系 JMP 支持@mzwald
Names Default To Here(1);
ys = [-0.999986, -1.49994, -1.99997];
xs = [1.3500e-12, 1.0600e-10, 1.9700e-9];
xs2 = Matrix(Eval List({1.3500e-12*10^12, 1.0600e-10*10^12, 1.9700e-9*10^12}));
ls = Linear Regression(ys, xs, << print to log);
ls2 = Linear Regression(ys, xs2, << print to log);
dt = New Table("",
New Column("Y", Numeric, Continuous, Values(ys)),
New Column("X1", Numeric, Continuous, Values(xs)),
New Column("X2", Numeric, Continuous, Values(xs2)),
);
biv1 = dt << Bivariate(Y(:Y), X(:X1), Fit Line({Line Color({230, 159, 0})}));
biv_estimates1 = Report(biv1)[Outline Box("Parameter Estimates"), Number Col Box("Estimate")];
Show(biv_estimates1 << get);
biv2 = dt << Bivariate(Y(:Y), X(:X2), Fit Line({Line Color({230, 159, 0})}));
biv_estimates2 = Report(biv2)[Outline Box("Parameter Estimates"), Number Col Box("Estimate")];
Show(biv_estimates2 << get);
Write();回复:拟合线和截距列公式,帮助解决错误我想知道这是否是精度问题。看起来该函数中的某些内容没有处理具有足够有效数字的输入。
现在可以使用您的修复并将 x 轴值乘以它可以处理的值。
谢谢!
回复:拟合线和截距列公式,帮助解决错误您好@GRoberts86 :为了完整起见,“错误”消息“无法估计参数估计的方差,因为 X 的秩等于 X 的行数”是因为您只有两个点,并且您用直线连接它们。因此,直线周围没有变化……也就是说,您实际上并没有执行统计程序,您只是在数学上连接两个点。但是,您可以使用统计包来执行此操作,通过矩阵代数,如下所示。
https://www.stat.cmu.edu/~cshalizi/mreg/15/lectures/13/lecture-13.pdf.
您调用的统计程序(线性回归(y,x)[1])试图做的不仅仅是数学上连接两个点。它还为斜率和截距提供置信区间、p 值等。但在您的情况下,由于您只有两个点(X 的秩 =2),因此没有变异性,因此没有置信区间等。
长话短说,“错误”实际上只是一个通知,表示不会有统计(与数学不同)输出。
回复:拟合线和截距列公式,帮助解决错误@MRB3855
经过一番思考,我意识到了这一点。如果你只处理 2 个点,那么使用经典的“直线方程” y=mc+c 是合适的。
不过,“静音”标志还是不错的,哈哈。