[R] Fit a 3-Dimensional Line to Data Points
Hans W. Borchers
hwborchers at gmail.com
Fri Jul 25 17:29:25 CEST 2008
S. M. Niaz Arifin <niazarifin <at> yahoo.com> writes:
>
> Hi Experts,
> I am new to R, and was wondering how to do 3D linear
> regression in R. In other words, I need to Fit a
> 3-Dimensional Line to Data Points (input).
>
> I googled before posting this, and found that it is
> possible in Matlab and other commercial packages. For
> example, see the Matlab link:
>
http://www.mathworks.com/products/statistics/demos.html?file=/products/demos/shipping/stats/orthoregdemo.html#10
>
> Is there a way to achieve this in R?
As a short self-test I translated the Matlab code into R where we take
as "best fit" the first principal component -- as in the Matlab example.
# I copied the Matlab matrix see below; load it from there first.
# X <- matrix(scan(stdin()), ncol=3, byrow=TRUE)
# -0.4326 -1.0767 -0.9895
# ...
#
N <- nrow(X)
meanX <- apply(X, 2, mean)
Xpca <- princomp(X)
dirVector <- Xpca$loadings[, 1]
Xfit1 <- matrix(rep(meanX, each=N), ncol=3) +
Xpca$score[, 1] %*% t(dirVector)
t <- c(min(Xpca$score[, 1])-.2, max(Xpca$score[, 1])+.2)
endpts <- rbind(meanX + t[1]*dirVector, meanX + t[2]*dirVector)
library(scatterplot3d)
s3d <- scatterplot3d(X[, 1], X[, 2], X[, 3], color="blue")
s3d$points3d(endpts[, 1], endpts[, 2], endpts[, 3], type="l",
col="red", lwd=2)
I leave it as an exercise to add the straight perpendicular segment from
the points to the line.
You can look at it interactively applying the RGL package !
Hans Werner Borchers
P.S.: Definition of X copied from the Matlab example
X <- matrix(scan(stdin()), ncol=3, byrow=TRUE)
-0.4326 -1.0767 -0.9895
-1.6656 0.2689 -2.7947
0.1253 0.5225 0.7053
0.2877 1.7158 -0.4033
-1.1465 0.3500 -0.6580
1.1909 -0.3924 1.0894
1.1892 0.6105 0.7931
-0.0376 -0.9963 -0.5846
0.3273 0.0463 -0.4308
0.1746 -0.0123 -0.1329
-0.1867 -0.0373 -0.9605
0.7258 -0.1663 -0.1853
-0.5883 0.9552 0.4620
2.1832 -1.3995 1.8350
-0.1364 0.3923 -1.0084
0.1139 0.9003 -0.0771
1.0668 0.9295 -0.1472
0.0593 0.5780 -0.9852
-0.0956 0.0204 -0.2554
-0.8323 0.4969 -0.0122
0.2944 0.6163 0.2148
-1.3362 -0.5177 -0.4395
0.7143 -0.2270 -0.2632
1.6236 0.0348 0.8565
-0.6918 -1.5837 -0.4571
0.8580 -0.0577 -0.2148
1.2540 0.3669 -0.0623
-1.5937 -0.0103 -0.5090
-1.4410 1.1262 -1.2071
0.5711 -0.2297 -0.0015
-0.3999 0.5307 0.1948
0.6900 0.9209 0.5309
0.8156 1.0850 -0.2560
0.7119 -0.8297 1.5774
1.2902 0.4658 1.0754
0.6686 0.3668 1.4688
1.1908 -0.7492 1.7739
-1.2025 -0.9675 -1.2144
-0.0198 1.0565 -1.0725
-0.1567 -0.1602 -0.1419
-1.6041 0.0612 -1.4099
0.2573 0.1377 -0.4227
-1.0565 -0.8339 -0.3004
1.4151 -0.2652 2.1121
-0.8051 0.2737 -1.0093
0.5287 -0.8250 -0.0866
0.2193 0.8093 -0.1305
-0.9219 0.3731 -0.2627
-2.1707 -1.2392 -1.9997
-0.0592 -0.2721 -0.8440
#EOF
More information about the R-help
mailing list