楼主: jiangmengnan
7049 3

[问答] MLR模型的留一法交叉验证 [推广有奖]

  • 0关注
  • 1粉丝

学前班

70%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
36 点
帖子
3
精华
0
在线时间
1 小时
注册时间
2017-5-4
最后登录
2017-5-5

楼主
jiangmengnan 发表于 2017-5-4 15:39:44 |AI写论文
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'

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

关键词:交叉验证 MLR 多元线性回归模型 多元线性回归 线性回归模型 MLR模型留一法交叉验证

沙发
jiangmengnan 发表于 2017-5-4 15:45:37
或者是有什么程序包,可以用简单的公式推算出来?急急急、谢谢大家了

藤椅
jiangmengnan 发表于 2017-5-5 13:04:38
已经搞定!

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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-24 12:47