全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
10033 5
2010-03-14
悬赏 5 个论坛币 未解决
在R软件中,假若模拟出X和Y矩阵,则通过偏最小二乘回归可得到一个Y关于成分T的回归式。现在遇到的问题是,假如我生成100组数据做模拟回归,再生成50组数据想用拟合的回归方程做预测,不知道在R软件中这些该如何编写程序,R中有一个predict()命令,但是却老出问题,说“newdata中有50行而变量中有100行”。很是苦恼。急求大师帮忙啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-3-15 09:43:40
不会错的方法,就是参考data : yarn
最后加一column "train"
train : Logical vector with TRUE for the training samples
         and FALSE for the test samples

TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  
TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  
TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
FALSE FALSE FALSE FALSE FALSE FALSE FALSE

21 for training(data),
7 for testing(newdata).

library(pls)
data(yarn)
nir.mvr <- mvr(density ~ NIR, ncomp = 5, data = yarn[yarn$train,])
predict(nir.mvr, comps = 1:4, newdata = yarn[!yarn$train,])


要不然predictdata,若要分开模拟的话.
ncol(predictdata) = length(nir.mvr$Xmeans)

#package example
library(pls)
data(yarn)

nir.mvr <- mvr(density ~ NIR, ncomp = 5, data = yarn[yarn$train,])
predict(nir.mvr, comps = 1:4, newdata = yarn[!yarn$train,])


density

110 51.04992
22  50.72019
31  32.01454
41  34.29076
51  30.35994
61  20.57832
71  19.07786

#自行输入数据,利用function predict
predictdata=matrix(scan(file='predictdata.txt'),7)
predict(nir.mvr, comps = 1:4, newdata = predictdata)

density

[1,] 51.04992
[2,] 50.72019
[3,] 32.01454
[4,] 34.29076
[5,] 30.35994
[6,] 20.57832
[7,] 19.07786

#自行输入数据,自行运算.
nobs=dim(predictdata)[1]

B <- rowSums(coef(nir.mvr, comps = 1:4), dims = 2)
B0 <- nir.mvr$Ymeans - nir.mvr$Xmeans %*% B
pred <- predictdata %*% B + rep(B0, each = nobs)
pred

density

[1,] 51.04992
[2,] 50.72019
[3,] 32.01454
[4,] 34.29076
[5,] 30.35994
[6,] 20.57832
[7,] 19.07786

predictdata.txt
大小:(13.7 KB)

 马上下载

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-3-17 12:19:48
首先谢谢大师帮忙,不过有一点我还是不理解。在偏最小二乘做回归时,是数据Y对提取成分T的回归。用来做预测的数据是X,是不能直接根据线性回归系数估计式代入就能得到预测值的呀。
所以#自行输入数据,自行运算.
nobs=dim(predictdata)[1]

B <- rowSums(coef(nir.mvr, comps = 1:4), dims = 2)
B0 <- nir.mvr$Ymeans - nir.mvr$Xmeans %*% B
pred <- predictdata %*% B + rep(B0, each = nobs)
pred

density
[1,] 51.04992
[2,] 50.72019
[3,] 32.01454
[4,] 34.29076
[5,] 30.35994
[6,] 20.57832
[7,] 19.07786
这部分好像不能直接用啊。
问题就转化为,R软件中有没有关于pls回归式直接转化为Y关于原数据X的回归的呢?
还有就是,comps = 1:4,这个是什么意思?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-3-17 20:36:11
你有疑问的地方,我取自:
R package "pls" source code
predict.mvr.R  
line 42 - line45

42  ## Predict with a model containing the components `comps'
43  B <- rowSums(coef(object, comps = comps), dims = 2)
44  B0 <- object$Ymeans - object$Xmeans %*% B
45  pred <- newX %*% B + rep(B0, each = nobs)

comps = 1:4,是什么意思?
## Predicted responses for a single model with components 1, 2, 3, 4
comps = 1:4

## Predicted responses for models with 1, 2, 3 and 4 components
ncomp = 1:4

另补充:
建议你可参考matlab function plsregress.m
plsregress.m source code也许比较容易理解.
%matlab'example
load spectra
X = NIR;
y = octane;
[XL,yl,XS,YS,beta,PCTVAR] = plsregress(X,y,10);
yfit = [ones(size(X,1),1) X]*beta;
residuals = y-yfit;

%%%%
data(yarn)
在matalb执行的结果是:
Y1 = [ones(7,1) X1]*beta

Y1

51.0499

50.7202

32.0145

34.2908

30.3599

20.5783

19.0779



ps:
建议你看一下我发的这本书,有助观念分清.
Introduction to Multivariate Statistical Analysis in Chemometrics
4.7 Partial Least-Squares Regression

4.7.2 MATHEMATICAL ASPECTS


page 165/326 FIGURE 4.24

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-10 19:22:49
怎么得到方程呢
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-12-30 18:13:01
zhangxl121 发表于 2010-3-17 12:19
首先谢谢大师帮忙,不过有一点我还是不理解。在偏最小二乘做回归时,是数据Y对提取成分T的回归。用来做预测 ...
请问下,关于Warning message:
'newdata' had 6 rows but variables found have 12 rows
类似问题解决了吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群