2013-12-23 3 views
5

내가 R에 새로운 오전 cv.lm() 를 사용하여 K-배 교차 유효성 검사를 수행하려고 참조 : 나는 길이를 나타내는 오류가 발생하고 http://www.statmethods.net/stats/regression.htmlK-배 교차 유효성 검사를 사용하여 cv.lm()

을 내 변수의 차이점은 다릅니다. 실제로 길이()를 사용하여 확인하는 동안 실제로 크기가 동일하다는 것을 알았습니다. 아래의 문제를 복제 할 수있는 최소한의 데이터 세트입니다

,

X Y 
277 5.20 
285 5.17 
297 4.96 
308 5.26 
308 5.11 
263 5.27 
278 5.20 
283 5.16 
268 5.17 
250 5.20 
275 5.18 
274 5.09 
312 5.03 
294 5.21 
279 5.29 
300 5.14 
293 5.09 
298 5.16 
290 4.99 
273 5.23 
289 5.32 
279 5.21 
326 5.14 
293 5.22 
256 5.15 
291 5.09 
283 5.09 
284 5.07 
298 5.27 
269 5.19 

은 교차 검증

# K-fold cross-validation, with K=10 
sampledata <- read.table("H:/sample.txt", header=TRUE) 
y.1 <- sampledata$Y 
x.1 <- sampledata$X 
fit=lm(y.1 ~ x.1) 
library(DAAG) 
cv.lm(df=sampledata, fit, m=10) 

터미널의 오류를 수행 할 아래의 코드를 사용,

Error in model.frame.default(formula = form, data = df[rows.in, ], drop.unused.levels = TRUE) : 
    variable lengths differ (found for 'x.1') 

인증,

> length(x.1) 
[1] 30 
> length(y.1) 
[1] 30 

위의 내용은 길이가 동일하다는 것을 확인합니다.

> str(x.1) 
int [1:30] 277 285 297 308 308 263 278 283 268 250 ... 
> str(y.1) 
num [1:30] 5.2 5.17 4.96 5.26 5.11 5.27 5.2 5.16 5.17 5.2 ... 

> is(y.1) 
[1] "numeric" "vector" 
> is(x.1) 
[1] "integer"    "numeric"    "vector"    "data.frameRowLabels" 

위의 데이터 세트를 추가로 확인하면 하나의 데이터 세트가 정수이고 다른 하나는 숫자임을 나타냅니다. 그러나 데이터 세트가 숫자에서 정수 또는 정수로 숫자로 변환 될 때에도 데이터 길이와 관련된 문제를 나타내는 동일한 오류가 화면에 나타납니다.

오류를 해결하려면 어떻게해야합니까?

2 일 전부터 처리에 실패했습니다. 인터넷을 이용한 제 연구에서 좋은 리드를 얻지 못했습니다.

Addional 관련 검색어 : 우리가 속성에서 설정 한 데이터의 헤더를 사용하는 경우에 맞게 작동 참조

,

fit=lm(Y ~ X, data=sampledata) 

A) 위의 구문의 차이가 무엇인지 ,

fit1=lm(sampledata$Y ~ sampledata$X) 

생각은 동일합니다.

#fit 1 works 
fit1=lm(Y ~ X, data=sampledata) 
cv.lm(df=sampledata, fit1, m=10) 

#fit 2 does not work 
fit2=lm(sampledata$Y ~ sampledata$X) 
cv.lm(df=sampledata, fit2, m=10) 

, 아래에서 문제가 DF = 샘플 데이터 헤더 "샘플 데이터의 $의 Y"로에있다 존재하지만 단지 $ Y가 존재하지 않습니다. , 너무 작동하지 않습니다 아래에 cv.lm을 manupulate하려고 우리가 변수를 조작 할 수 좋아하는 경우에, 방법 등을 위해 cv.lm()에서 사용하는 방법

cv.lm(fit2, m=10) 

B)

y.1 <- (sampledata$Y/sampledata$X) 
x.1 <- (1/sampledata$X) 

#fit 4 problem 
fit4=lm(y.1 ~ x.1) 
cv.lm(df=sampledata, fit4, m=10) 

함수에서 헤더 Y ~ X 대신 y.1과 x.1을 참조 할 수있는 방법이 있습니까?

감사합니다.

답변

2

왜 이런 일이 발생했는지 확실하지 않지만 lm()에 대한 데이터 인수를 지정하지 않았 음을 알았 기 때문에 이것이 내 첫 번째 추측이었습니다.

fit=lm(Y ~ X, data=sampledata) 

오류가 없어 졌으므로 충분한 대답 일 수 있습니다.

enter image description here

UPD : 오류 이유는 그와 Y.1 X.1가 cv.lm DF 대한 인수로서 제공되는 샘플 데이터에 존재하지 않는 것 인 화학식 Y.1 그래서 ~ x.1은 cv.lm 환경에서 의미가 없습니다.

+0

답변 해 주셔서 감사합니다. cv.lm()에서 헤더를 사용할 때 작동합니다. 대신에 cv.lm()에서 y.1과 x.1을 사용할 수있는 방법이 있습니까? 대부분의 경우 cv.lm()을 수행 할 때 헤더를 조작 할 것이기 때문입니다. 이 사실을 설명하기 위해 원본 글을 업데이트하십시오. –

관련 문제