尝试使用cv.lm函数时,我收到上述错误。请参阅我的代码
sample<-read.csv("UU2_1_lung_cancer.csv",header=TRUE,sep=",",na.string="NA")
sample1<-sample[2:2000,3:131]
samplex<-sample[2:50,3:131]
y<-as.numeric(sample1[1,])
y<-as.numeric(sample1[2:50,2])
x1<-as.numeric(sample1[2:50,3])
x2<-as.numeric(sample1[2:50,4])
x11<-x1[!is.na(y)]
x12<-x2[!is.na(y)]
y<-y[!is.na(y)]
fit1 <- lm(y ~ x11 + x12, data=sample)
fit1
x3<-as.numeric(sample1[2:50,5])
x4<-as.numeric(sample1[2:50,6])
x13<-x3[!is.na(y)]
x14<-x4[!is.na(y)]
fit2 <- lm(y ~ x11 + x12 + x13 + x14, data=sample)
anova(fit1,fit2)
install.packages("DAAG")
library("DAAG")
cv.lm(df=samplex, fit1, m=10) # 3 fold cross-validation
任何见解将不胜感激。
Example of data
ID peak height LCA001 LCA002 LCA003
N001786 32391.111 0.397 0.229 -0.281
N005356 32341.473 0.397 -0.655 -1.301
N002416 32215.474 -0.703 -0.214 -0.901
GS239 31949.777 0.354 0.118 0.272
N016343 31698.853 0.226 0.04 -0.006
N003255 31604.978 0.024 NA -0.534
N004358 31356.597 -0.252 -0.022 -0.407
N000122 31168.09 -0.487 -0.533 -0.134
GS10564 31106.103 -0.156 -0.141 -1.17
GS17987 31043.876 NA 0.253 0.553
N003674 30876.207 0.109 0.093 0.07
请参阅上面数据的示例
答案 0 :(得分:1)
首先,您错误地使用lm(..)
,或者至少以非常规方式使用data=sample
。指定sample
参数的目的是使公式使用对## not tested...
sample <- read.csv(...)
colnames(sample)[2:6] <- c("y","x1","x2","x3","x4")
fit1 <- lm(y~x1+x2, data=sample[2:50,],na.action=na.omit)
library(DAAG)
cv.lm(df=na.omit(sample[2:50,]),fit1,m=10)
的列的引用。通常,在公式引用中使用独立数据是一种非常糟糕的做法。
所以试试这个:
na.action=na.omit
这将为列2:6提供适当的名称,然后使用公式中的名称。参数lm(...)
告诉cv.lm(...)
函数排除相关列的任何中存在NA值的所有行。这实际上是默认值,因此在这种情况下不需要,但为了清楚起见,包括在内。
最后,cv.lm(df=samplex, fit1, m=10)
使用它的第二个参数来查找公式定义,所以在您的代码中:
cv.lm(df=samplex,y~x11+x12,m=10)
相当于:
x11
由于x12
中(可能)没有名为samplex
和cv.lm(...)
的列,并且由于您在外部定义了这些向量,因此{{1}}会引发您获得的错误。