我正在尝试完善一种比较回归和PCA的方法,其灵感来自博客脑瘫痪,这也是从SO的不同角度进行讨论的.在我忘记之前,非常感谢JD Long和Josh Ulrich的大部分核心.我将在下学期的课程中使用它.对不起,这很长!
更新:我找到了一种几乎可以使用的不同方法(如果可以,请修复它!).我把它贴在了底部.比我能想出的更智能,更简洁的方法!
我基本上遵循了之前的方案,直到某一点:生成随机数据,找出最佳拟合线,绘制残差.这显示在下面的第二个代码块中.但我也在挖掘并编写了一些函数来通过随机点(在这种情况下为数据点)绘制垂直于直线的直线.我认为这些工作正常,它们在First Code Chunk中显示,并且证明它们有效.
现在,第二个代码块使用与@JDLong相同的流程显示整个操作,我正在添加一个结果图的图像.黑色,红色的数据是回归,残差是粉红色,蓝色是第一个PC,浅蓝色应该是法线,但显然它们不是.第一代码块中绘制这些法线的函数似乎很好,但是演示中的某些东西是不正确的:我认为我必须误解某些东西或传递错误的值.我的法线是水平的,这似乎是一个有用的线索(但到目前为止,不是我).有谁能看到这里有什么问题?
谢谢,这让我烦恼了一会儿......

第一个代码块(绘制法线和证明它们起作用的函数):
##### The functions below are based very loosely on the citation at the end
pointOnLineNearPoint <- function(Px, Py, slope, intercept) {
# Px, Py is the point to test, can be a vector.
# slope, intercept is the line to check distance.
Ax <- Px-10*diff(range(Px))
Bx <- Px+10*diff(range(Px))
Ay <- Ax * slope + intercept
By <- Bx * slope + intercept
pointOnLine(Px, Py, Ax, Ay, …Run Code Online (Sandbox Code Playgroud) 我尝试使用abline函数在散点图上创建一个线性回归线.
x= c (1.0325477, 0.6746901, 1.0845737, 1.1123872, 1.1060822, 0.8595918, 0.8512941, 1.0148842, 1.0722369, 0.9019220 , 0.8809147, 1.0358256, 0.9903858, 1.0715174 , 1.1034405, 1.0143966,0.9802365, 0.7177169 , 0.9190783, 0.8408701 )
y= c (0.8550177, 0.8352162 ,1.0236998, 1.1071665, 0.6768144, 0.8449983 ,0.7616483, 0.8259199, 1.1539598, 1.4125006, 1.0511816, 0.9366184, 1.4101268, 1.2937913, 1.4147219 ,1.2943105 ,0.7859749, 0.6689330, 0.6940164, 0.8093392)
plot(x,y)
abline(lm(y ~ x))
Error in int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) :
plot.new has not been called yet
Run Code Online (Sandbox Code Playgroud)
请给我任何建议
假设我有一个带有列的数值数据矩阵,w, x, y, z我还想添加相当于的列,w*x, w*y, w*z, x*y, x*z, y*z因为我希望我的协变量矩阵包含所有成对交互.
有一个干净有效的方法吗?
我想编写一个程序,给定3D空间中的点列表,表示为浮点的x,y,z坐标数组,在此空间中输出最佳拟合线.该线可以/应该是单位矢量和线上的点的形式.
问题是我不知道如何做到这一点.我发现最接近的是这个链接,但老实说,我不明白他是如何从等式到等式的,当我们得到矩阵时,我很丢失.
是否有一个简单的二维线性回归的推广,我可以使用/可以有人解释(数学上)上述链接方法是否有效(以及使用它来计算最佳拟合线需要做什么)?
我对正交多项式的理解是它们采用的形式
y(x)= a1 + a2(x - c1)+ a3(x - c2)(x - c3)+ a4(x - c4)(x - c5)(x - c6)......最多为期望的条款
其中a1,a2 等是每个正交项的系数(在拟合之间变化),并且c1,c2 等是正交项内的系数,确定使得这些项保持正交性(使用相同x值的拟合之间一致)
我理解poly()用于拟合正交多项式.一个例子
x = c(1.160, 1.143, 1.126, 1.109, 1.079, 1.053, 1.040, 1.027, 1.015, 1.004, 0.994, 0.985, 0.977) # abscissae not equally spaced
y = c(1.217395, 1.604360, 2.834947, 4.585687, 8.770932, 9.996260, 9.264800, 9.155079, 7.949278, 7.317690, 6.377519, 6.409620, 6.643426)
# construct the orthogonal polynomial
orth_poly <- poly(x, degree …Run Code Online (Sandbox Code Playgroud) 我想执行Deming回归(或任何等效的回归方法,包括X和Y变量的不确定性,例如York回归).
在我的应用程序中,我有一个非常好的科学理由来故意将拦截设置为零.但是,我无法找到将其设置为零的方法,无论是在R包中deming,当我-1在公式中使用时都会出错:
df=data.frame(x=rnorm(10), y=rnorm(10), sx=runif(10), sy=runif(10))
library(deming)
deming(y~x-1, df, xstd=sy, ystd=sy)
Error in lm.wfit(x, y, wt/ystd^2) : 'x' must be a matrix
Run Code Online (Sandbox Code Playgroud)
在其他包(如mcr::mcreg或IsoplotR::york或MethComp::Deming)中,输入是两个向量x和y,因此我无法输入模型矩阵或修改公式.
你对如何实现这个有任何想法吗?谢谢.
考虑以下使用 PyTorch 实现的线性回归代码:
import torch
X = torch.tensor([1, 2, 3, 4], dtype=torch.float32)
Y = torch.tensor([2, 4, 6, 8], dtype=torch.float32)
w = torch.tensor(0.0, dtype=torch.float32, requires_grad=True)
def forward(x):
return w * x
def loss(y, y_pred):
return ((y_pred - y)**2).mean()
print(f'Prediction before training: f(5) = {forward(5).item():.3f}')
learning_rate = 0.01
n_iters = 100
for epoch in range(n_iters):
# predict = forward pass
y_pred = forward(X)
# loss
l = loss(Y, y_pred)
# calculate gradients = backward pass
l.backward()
# update weights
#w.data = …Run Code Online (Sandbox Code Playgroud) scikit-learn是否提供使用高斯或多项式内核进行回归的工具?我查看了API,但我没有看到.有人在scikit之上构建了一个包 - 学习这样做吗?
我已经绘制了一个二维直方图,我可以用线,点等添加到图中.现在我试图在密集点的区域应用线性回归拟合,但是我的线性回归线似乎完全偏离它的位置应该?为了证明这里是我左边的情节,有一个低回归拟合和线性拟合.
lines(lowess(na.omit(a),na.omit(b),iter=10),col='gray',lwd=3)
abline(lm(b[cc]~a[cc]),lwd=3)
Run Code Online (Sandbox Code Playgroud)
这里a和b是我的值,cc是最密集部分内的点(即大多数点在那里),红色+黄色+蓝色.

为什么我的回归线看起来不像右边那样(手绘合身)?如果我正在绘制一条最合适的线,它会在那里吗?
我有很多类似的情节,但我仍然得到相同的结果....

是否有任何替代线性回归拟合对我来说可能更好?
我在查询文件中的不同列上执行多次回归.我的任务是从R中的回归函数lm中提取某些结果.
到目前为止,我有,
> reg <- lm(query$y1 ~ query$x1 + query$x2)
> summary(reg)
Call:
lm(formula = query$y1 ~ query$x1 + query$x2)
Residuals:
1 2 3 4
7.68 -4.48 -7.04 3.84
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1287.26 685.75 1.877 0.312
query$x1 -29.30 20.92 -1.400 0.395
query$x2 -116.90 45.79 -2.553 0.238
Residual standard error: 11.97 on 1 degrees of freedom
Multiple R-squared: 0.9233, Adjusted R-squared: 0.7699
F-statistic: 6.019 on 2 and 1 DF, p-value: 0.277
Run Code Online (Sandbox Code Playgroud)
要提取系数,r平方和F统计,我使用以下内容:
reg$coefficients
summary(reg)$r.squared
summary(reg)$fstatistic
Run Code Online (Sandbox Code Playgroud)
我想提取0.2值的p值. …
r ×7
regression ×4
matrix ×2
algorithm ×1
best-fit ×1
coefficients ×1
gradient ×1
lm ×1
p-value ×1
pca ×1
python ×1
pytorch ×1
scatter-plot ×1
scikit-learn ×1