全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
6980 3
2017-05-04
悬赏 5 个论坛币 未解决
请问该如何用R做多元线性回归模型的留一法交叉验证呢,我尝试了如下代码,可是一直报错。
> dat <- read.csv(file.choose()) #载入数据表格
> lmcv<- function(pIC50=7.86-3.00*BEHe6+12.08*BIC2+2.15*E1u+5.81*HATS7p-0.26*Hy+0.16*L2s-0.65*Mor30e-57.18*R2v_A-91.85*R6v_A+20.62*R7e_A-0.03*RDF080m+35.84*R8p_A, loo = TRUE) {
+ N <- nrow(dat)
+         if (loo == TRUE) {
+                 pIC50test <- dat[-1, 14]
+                 newrsq <- numeric(N)
+                 pIC50pred <- numeric(N)
+                 for(i in 1:N){
+                         newtrain <- dat[-i,2:13]
+                         xtest <- dat[i, 2:13]
+                         newfm <- lm(pIC50~BEHe6+BIC2+E1u+HATS7p+Hy+L2s+Mor30e+R2v_A+R6v_A+R7e_A+RDF080m+R8p_A, dat = newtrain)
+                         newrsq <- summary(newfm)$r.squared
+                         pIC50pred <- predict(newfm, xtest)
+                 }
+         }
+         else {
+                 m <- 75
+                 n <- 1
+                 newrsq <- numeric(m)
+                 pIC50test <- numeric(m*n)
+                 pIC50pred <- numeric(m*n)
+                 for (i in 1:m) {
+                         j <- sample(N, n, replace = FALSE)
+                         newtrain <- dat[j, 2:13]
+                         xtest <- dat[j, -1]
+                         pIC50test[((i-1) * n + 1): (i * n)] <- dat[j, 14]
+                         newfm <- lm(pIC50~BEHe6+BIC2+E1u+HATS7p+Hy+L2s+Mor30e+R2v_A+R6v_A+R7e_A+RDF080m+R8p_A, dat = newtrain)
+                         pIC50pred[((i-1) * n + 1): (i * n)] <- predict(newfm, xtest)
+                 }
+         }
+         q.squared <- 1 - sum((pIC50test - pIC50pred)^2) / sum((pIC50test - mean(pIC50test))^2)
+         if (loo == TRUE) {
+                 SDEP <- sqrt(sum((pIC50test - pIC50pred)^2) / N)
+         }
+         else {
+                 SDEP <- sqrt(sum((pIC50test - pIC50pred)^2) / (m * n))
+         }
+         if (loo == TRUE) {
+                 return(list(q.squared = q.squared, SDEP = SDEP, newrsq = newrsq))
+         }
+         else {
+                 return(list(q.squared = q.squared, SDEP = SDEP))
+         }
+ }

> lmcv(lm(pIC50~BEHe6+BIC2+E1u+HATS7p+Hy+L2s+Mor30e+R2v_A-R6v_A+R7e_A+RDF080m+R8p_A))
Error in eval(predvars, data, env) : 找不到对象'pIC50'

不知道错在了哪里,还请各位大神多多指教。数据材料附上。

工作簿1.xlsx

大小:14.38 KB

 马上下载

二维码

扫码加我 拉你入群

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

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

全部回复
2017-5-4 15:45:37
或者是有什么程序包,可以用简单的公式推算出来?急急急、谢谢大家了
二维码

扫码加我 拉你入群

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

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

2017-5-5 13:04:38
已经搞定!
二维码

扫码加我 拉你入群

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

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

2020-3-9 16:43:01
jiangmengnan 发表于 2017-5-5 13:04
已经搞定!
你好,请问你最后是怎么解决的
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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