- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有点云(xyz 坐标),我需要将其拟合到线性模型中。我想我会为此使用 lm()。
这是我尝试过的:
library(scatterplot3d)
# example points
x <- c(1,4,3,6,2,5)
y <- c(2,2,4,3,5,9)
z <- c(1,3,5,9,2,2)
# plot
s <- scatterplot3d(x,y,z, type="b")
# fit the model
ff = lm(z ~ x + y) ## in ff$coefficients are the line paramters z, mx, ny
# create coordinates for a short line (the fit) to plot
llx = c(min(x), max(x))
lly = c(min(y), max(y))
llz = c(
ff$coefficients[[1]] + llx[1] * ff$coefficients[[2]] + lly[1] * ff$coefficients[[3]],
ff$coefficients[[1]] + llx[2] * ff$coefficients[[2]] + lly[2] * ff$coefficients[[3]]
)
## create 2d coordinates to place in scatterplot
p0 <- s$xyz.convert(llx[1],lly[1],llz[1])
p1 <- s$xyz.convert(llx[2],lly[2],llz[2])
# draw line
segments(p0$x,p0$y,p1$x,p1$y,lwd=2,col=2)
不过,红线看起来很合身,但我不确定它是否合身。如果你旋转情节,它看起来不太好。
for(i in seq(from=30, to=60, by=1)){
s <- scatterplot3d(x,y,z, type="b", angle=i)
segments(p0$x,p0$y,p1$x,p1$y,lwd=2,col=2)
Sys.sleep(0.1)
}
这仅仅是因为线的二维投影吗?!?你能以某种方式更新坐标吗?我试图给 $xyz.convert() 函数一个“角度”属性,但没有成功。
此外,当我仅使用两个示例点时,拟合失败。
x <- c(1,4)
y <- c(2,5)
z <- c(1,3)
如果能确认我是否正确使用了 lm(),我将不胜感激。谢谢!
[编辑]
我了解到 lm() 根据我给它的模型 (z~x+y) 为数据拟合了一个平面。这不是我想要的。事实上,我完全误解了 lm() 。也适用于二维数据。例如。 lm(y~x) 尝试最小化拟合和数据之间的垂直空间。但是,我希望将数据视为完全独立的(空间数据)并最小化拟合和数据之间的垂线(如此处的第一段:http://mathpages.com/home/kmath110.htm)。
标记为正确的答案正是这样做的。该原理称为“主成分分析”。
最佳答案
lm(z ~ x + y)
的拟合点不是直线而是平面。您的段确实属于飞机。
s <- scatterplot3d(x,y,z, type="b")
s$plane3d(ff)
segments(p0$x,p0$y,p1$x,p1$y,lwd=2,col=2)
# rgl
library(rgl)
plot3d(x, y, z, type="s", rad=0.1)
planes3d(ff$coef[2], ff$coef[3], -1, ff$coef[1], col = 4, alpha = 0.3)
segments3d(llx, lly, llz, lwd=2, col=2)
你想要的是将一条线拟合到3维数据,换句话说,将3-dim概括为1-dim。我认为这条线由主成分分析的第一个成分组成(即 mean + t * PC1,这条线最小化总最小二乘法)。我提到了“R mailing help: Fit a 3-Dimensional Line to Data Points”和“MathWorks: Fitting an Orthogonal Regression Using Principal Components Analysis”。
x <- c(1,4,3,6,2,5)
y <- c(2,2,4,3,5,9)
z <- c(1,3,5,9,2,2)
xyz <- data.frame(x = x, y = y, z = z)
N <- nrow(xyz)
mean_xyz <- apply(xyz, 2, mean)
xyz_pca <- princomp(xyz)
dirVector <- xyz_pca$loadings[, 1] # PC1
xyz_fit <- matrix(rep(mean_xyz, each = N), ncol=3) + xyz_pca$score[, 1] %*% t(dirVector)
t_ends <- c(min(xyz_pca$score[,1]) - 0.2, max(xyz_pca$score[,1]) + 0.2) # for both ends of line
endpts <- rbind(mean_xyz + t_ends[1]*dirVector, mean_xyz + t_ends[2]*dirVector)
library(scatterplot3d)
s3d <- scatterplot3d(xyz, type="b")
s3d$points3d(endpts, type="l", col="blue", lwd=2)
for(i in 1:N) s3d$points3d(rbind(xyz[i,], xyz_fit[i,]), type="l", col="green3", lty=2)
library(rgl)
plot3d(xyz, type="s", rad=0.1)
abclines3d(mean_xyz, a = dirVector, col="blue", lwd=2) # mean + t * direction_vector
for(i in 1:N) segments3d(rbind(xyz[i,], xyz_fit[i,]), col="green3")
关于r - 将一条线拟合到 R 中的 3d 点云,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39915328/
如何迭代(一行)分割函数给我的每个类? 我试过这个: 编辑(抱歉) $("p").attr("class").split(' ').each (function (i,n){alert(n)}
我有一条垂直线和一条水平线,当我动态调整我的 Canvas 父级时,我想调整它们的大小。 (地标) 我希望水平线始终距 Canvas 的左右边界 25 处,距底部边界 13 处。 垂直线也是如此,距上
我有一个 y 变量,我试图在图形的顶部和底部针对两个相关的 x 轴绘制它(例如 y="立方体中的事物数",x1="立方体的边长", x2="立方体的体积")。我在 numpy 数组中有 y、x1、x2
我想画一条简单的水平线,并在这条线 flex 的地方制作动画。我有这个动画的视频。你能给我一些建议如何开始以及我必须使用哪个 js/css 吗? 都是关于矩形底部的线: http://www.stop
我是一名优秀的程序员,十分优秀!