2014-09-05 6 views
-3

Я пытаюсь запустить бинарной логистической регрессии с использованием для петель в R. Мой код такой же заключается в следующем:логистической регрессии с использованием для петель R

mydata5<-read.table(file.choose(),header=T,sep=",") 
colnames(mydata5) 
Class <- 1:16 
Countries <- 1:5 
Months <- 1:7 
DayDiff <- 1:28 
mydata5$CT <- factor(mydata5$CT) 
mydata5$CC <- factor(mydata5$CC) 
mydata5$C <- factor(mydata5$C) 
mydata5$DD <- factor(mydata5$DD) 
mydata5$UM <- factor(mydata5$UM) 
for(i in seq(along=Class)) 
    { 
    mydata5$C=mydata5$C[i]; 

for(i2 in seq(along=Countries)) 
{ 
    mydata5$CC=mydata5$CC[i2]; 

for(i3 in seq(along=Months)) 
{ 
    mydata5$UM=mydata5$UM[i3]; 

for(i4 in seq(along=DayDiff)) 
{ 
    mydata5$DD=mydata5$DD[i4]; 

    lrfit5 <- glm(CT ~ C+CC+UM+DD, family = binomial(link = "logit"),data=mydata5) 
    summary(lrfit5) 
    library(lattice) 
    in_frame<-data.frame(C="mydata5$C[i]",CC="mydata5$CC[i2]",UM="mydata5$UM[i3]",DD="mydata5$DD[i4]") 
    predict(lrfit5,in_frame, type="response",se.fit=FALSE) 
} 
} 
} 
} 

Однако, я получаю следующее ошибка: ошибка в contrasts<- (*tmp*, значение = contr.funs [1 + ISOF [пп]]): контрасты могут быть применены только к факторам, с 2 или более уровней

Почему происходит ошибка? Кроме того, набор данных «mydata5» имеет около 50000 строк. Пожалуйста, помогите.

Спасибо заранее.

+0

У нас нет данных, поэтому мы не можем запустить это. Вы не говорите нам, в какой строке произошла ошибка (предположим: 'glm'). Почему вы не печатаете i, i2, i3 и i4 в цикле, чтобы узнать, происходит ли это в первый раз или в определенное время? Доходит ли это до очевидной проблемы с построением 'in_frame', где вы помещаете вещи в кавычки? Пожалуйста, улучшите этот вопрос. – Spacedman

+1

Чтение сообщений об ошибках и угадывание снова похоже на ошибку, которую вы получили бы, если бы попытались подгонять модель с данными, которые имели категориальные переменные только с одной категорией - например, пытались приспособить эффект для «пола» только с «мужскими» данными точки. Но это предположение, потому что у нас нет вашего файла данных или образца, чтобы попробовать его. – Spacedman

+0

Какова цель всех этих циклов?!? Похоже, вы ужасно обезображиваете свои данные со всеми этими причудливыми переназначениями. Как сказал @Spacedman, вы должны включить [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example), иначе мы не сможем проверить возможные решения или даже увидеть, где происходит ошибка. Я предполагаю, что в конце концов, «mydata» имеет все одинаковые значения ковариации после всех этих циклов благодаря векторной переработке. – MrFlick

ответ

0

Вы попытались сделать регрессию с коэффициентом, имеющим только один уровень. Так как вы не дали нам свои данные, мы не можем воспроизвести ваш анализ, но я могу просто воспроизвести ваше сообщение об ошибке:

> d = data.frame(x=runif(10),y=factor("M",levels=c("M","F"))) 
> d 
      x y 
1 0.07104688 M 
2 0.11948466 M 
3 0.20807068 M 
4 0.24049508 M 
5 0.44251492 M 
6 0.69775646 M 
7 0.44479983 M 
8 0.64814971 M 
9 0.75151207 M 
10 0.38810621 M 
> glm(x~y,data=d) 
Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
    contrasts can be applied only to factors with 2 or more levels 

Установив одно из значений коэффициента к «F» Я не получаю ошибку сообщение:

> d$y[5]="F" 
> glm(x~y,data=d) 

Call: glm(formula = x ~ y, data = d) 

Coefficients: 
(Intercept)   yF 
    0.39660  0.04591 

Degrees of Freedom: 9 Total (i.e. Null); 8 Residual 
Null Deviance:  0.5269 
Residual Deviance: 0.525 AIC: 4.91 

Так где-то в ваших петель (который мы не можем работать, потому что у нас нет данных) вы являются это делать.