2014-04-20 5 views
0

При попытке использовать cv.lm fucntion я получаю ошибку выше. См. Мой кодпеременная длина отличается от R

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

опубликовать выборку данных, необходимых для выполнения этого кода, и в какой момент вы получите ошибку – rawr

+0

ID \t высоту пика \t \t LCA001 LCA002 \t LCA003 N001786 \t \t 32391,111 0,397 0,229 \t \t -0,281 N005356 \t 32341,473 \t 0,397 \t -0,655 \t -1,301 N002416 \t 32215,474 \t -0,703 \t -0,214 \t -0,901 GS239 \t 31949,777 \t 0,354 0,118 \t \t 0,272 N016343 \t \t 31698,853 0,226 \t \t 0,04 -0,006 N003255 \t \t 31604,978 0,024 -0,17 \t \t -0,534 N004358 \t \t 31356,597 -0,252 -0,022 \t \t -0,407 N000122 \t \t 31168,09 -0,487 \t -0,533 \t -0.134 GS10564 \t 31106.103 \t -0,156 \t -0.141 \t -1.17 GS17987 \t 31043.876 \t \t \t 0,253 0,553 N003674 \t \t 30876,207 0,109 0,093 \t \t 0.07 – user3424320

+0

@rawr: Здесь выборка данных – user3424320

ответ

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) 

Это даст столбцы 2: 6 соответствующие имена, а затем использовать их в формуле. Аргумент na.action=na.omit сообщает функции lm(...) исключить все строки, где есть значение NA в любых соответствующих столбцов. Фактически это значение по умолчанию, поэтому в этом случае оно не нужно, но для ясности.

Наконец, cv.lm(...) использует это второй аргумент, чтобы найти определение формулы, так что в вашем коде:

cv.lm(df=samplex, fit1, m=10) 

эквивалентно:

cv.lm(df=samplex,y~x11+x12,m=10) 

Поскольку нет (presumeably) нет столбцов с именем x11 и x12 в samplex, и поскольку вы определяете эти векторы внешне, cv.lm(...) выдает ошибку, которую вы получаете.

+0

В этом уравнении, как один обрабатывать NA? – user3424320

+0

Хорошая точка. Очевидно, вы должны явно игнорировать NAs из аргумента 'df'. Смотрите мои правки. Это, похоже, работает над образцом, который вы предоставили. BTW: * намного лучше разместить данные в качестве редактирования вопроса, а не в комментариях. Введите 'dput (mydata)' и вставьте вывод в свой вопрос. – jlhoward

+0

@jlhowards: Я не вижу ваших изменений. Не могли бы вы повторно отправить то, что вы протестировали? – user3424320

Смежные вопросы