2016-10-20 4 views
0

У меня есть 2 различных кадров данных, для которых я хотел бы выполнить линейную регрессиюР: Ошибка в модели линейной регрессии

Я написал следующий код для этого

mydir<- "/media/dev/Daten/Task1/subject1/t1" 
#multiple subject paths should be given here 
# read full paths 
myfiles<- list.files(mydir,pattern = "regional_vol*",full.names=T) 
# initialise the dataframe from first file 

df<- read.table(myfiles[1], header = F,row.names = NULL, skip = 3, nrows = 1,sep = "\t") 
# [-c(1:3),] 
df 
#read all the other files and update dataframe 
#we read 4 lines to read the header correctly, then remove 3 
ans<- lapply(myfiles[-1], function(x){ read.table(x, header = F, skip = 3, nrows = 1,sep = "\t")  }) 
ans 
#update dataframe 
#[-c(1:3),] 
lapply(ans, function(x){df<<-rbind(df,x)} ) 
#this should be the required dataframe 

uncorrect<- array(df) 

# Linear regression of ICV extracted from global size FSL 
# Location where your icv is located 
ICVdir <- "/media/dev/Daten/Task1/T1_Images" 
#loding csv file from ICV 
mycsv <- list.files(ICVdir,pattern = "*.csv",full.names = T) 
af<- read.csv(file = mycsv,header = TRUE) 
ICV<- as.data.frame(af[,2],drop=FALSE) 
#af[1,] 
#we take into consideration second column of csv 
#finalcsv <-lapply(mycsv[-1],fudnction(x){read.csv(file="global_size_FSL")}) 
subj1<- as.data.frame(rep(0.824,each=304)) 

plot(df ~ subj1, data = df, 
     xlab = "ICV value of each subject", 
     ylab = "Original uncorrected volume", 
     main="intercept calculation" 
     ) 

fit <- lm(subj1 ~ df) 

Кадр данных DF имеет 304 значения в следующем формате

6433 6433  
1430 1430  
1941 1941  
3059 3059  
3932 3932  
6851 6851 

и другого фрейма данных SUBJ1 имеет 304 значений в следующем формате

0.824  
0.824  
0.824  
0.824  
0.824 

Когда я запускаю мой код я подвергаясь следующие ошибки

Error in model.frame.default(formula = subj1 ~ df, drop.unused.levels = TRUE) : 
    invalid type (list) for variable 'subj1' 

любые предложения, почему значения data.frame из переменной SUBJ1 являются недопустимыми

+0

Похоже, вопрос StackOverflow. Вы пробовали 'str (subj1)'? Это может дать некоторые идеи – Jon

+0

@Jon, Да, я пробовал, он возвращал следующие значения: str (subj1): 'data.frame': \t 304 obs. из 1 переменной: $ rep (0.824, each = 304): num 0.824 0.824 0.824 0.824 0.824 0.824 0.824 0.824 0.824 0.824 .. – DevanDevak

+0

Я думаю, что R ожидает вектор, а не data.frame. Вы пытались использовать 'subj1 <- rep (0.824, each = 304)', не превращая его в df? – JAD

ответ

1

Как уже упоминалось, вы пытаетесь дать данные. frame как независимая переменная. Попробуйте:

fit <- lm(subj1 ~ ., data=df) 

Это будет использовать все переменные в кадре данных, до тех пор, как subj1 это имя зависимой переменной, а не кадр данных сама по себе.

Если df имеет два столбца, которые являются предикторами, а subj1 - предсказанная (зависимая) переменная, расчесывая два, давайте им соответствующие имена столбцов и создайте модель в формате выше.

Что-то вроде:

data <- cbind(df, subj1) 
names(data) <- c("var1", "var2", "subj1") 
fit <- lm(subj1 ~ var1 + var2, data=df) 

Edit: некоторые указатели:

  1. убедитесь, что вы используете один кадр данных, который содержит все ваших независимых переменных, и зависимые переменные.
  2. Число строк должно быть равным.
  3. Если независимая переменная в константе, она не имеет дисперсии для разных значений зависимой переменной и поэтому не будет иметь никакого значения. Если зависимая переменная является константой, нет смысла регрессировать - мы можем предсказать значение с точностью 100%.
+0

Я хотел бы получить наклон кривой регрессии, и выход регрессии не дает мне перехвата: следующий результат: Signif. коды: 0 '***' 0,001 '**' 0,01 '*' 0,05 '.' 0,1 '' 1 Остаточная стандартная ошибка: 1.948e-29 на 2 градусах свободы Множество R-квадратов: 0, \t Скорректировано R-квадрат: -150,5 F-статистики: 0 на 301 и 2 DF, р-значение: 1 предупреждение: в summary.lm (подходит): по существу, идеально подходит: резюме может быть ненадежным > – DevanDevak

+0

Это потому, что в коде, который вы отправили в op, переменная ответа 'subj1' является константой, поэтому перехват сам по себе, если является идеальным предиктором. Вам не нужно наклон, чтобы предсказать 'subj1', потому что вы знаете, что просто смотрите на него. – JAD

+0

следующая ошибка, которую я получаю: Ошибка в именах (данных) <- c ("var1", "var2", "subj1"): Атрибут 'names' [3] должен быть такой же длины, как вектор [ 2] – DevanDevak

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