[R] Error when using anova(lm())

David Winsemius dwinsemius at comcast.net
Fri Oct 8 19:22:55 CEST 2010


On Oct 8, 2010, at 1:17 PM, Alison Callahan wrote:

> Hi again
>
> On Fri, Oct 8, 2010 at 1:13 PM, David Winsemius <dwinsemius at comcast.net 
> > wrote:
>>
>> On Oct 8, 2010, at 1:09 PM, Alison Callahan wrote:
>>
>>> See below.
>>>
>>> On Fri, Oct 8, 2010 at 1:01 PM, David Winsemius <dwinsemius at comcast.net 
>>> >
>>> wrote:
>>>>
>>>> On Oct 8, 2010, at 12:46 PM, Alison Callahan wrote:
>>>>
>>>>> Hello all,
>>>>>
>>>>> I am trying to perform an ANOVA on some data in a data frame,  
>>>>> but when
>>>>> I try to use lm(), I get the following error:
>>
>> The question that should have been posed was how did you use lm()?
>>
>> It could be that the inappropriate use of a factor as a dependent  
>> variable
>> was the cause. Did you use something like:
>>
>> lm(island_id ~ refseq_better, data=dfrm)  # ??
>>
> My usage of lm() was as follows:
>
> lmout <- lm(refseq_proportion~fiveprime,data=props_df)

I think all the relevant questions (and answer) are on the table which  
means the final question is :
  ....what does this return?

  is.factor(props_df$refseq_proportion)   # I predict "factor"

-- 
David.
>
>> Example:
>>> dfrm <- data.frame(a=factor(rnorm(10)), b=rnorm(10))
>>> lm(a ~ b, data=dfrm)
>> Error in storage.mode(y) <- "double" :
>>  invalid to change the storage mode of a factor
>> In addition: Warning message:
>> In model.response(mf, "numeric") :
>>  using type="numeric" with a factor response will be ignored
>>
>>
>>>>>
>>>>> Error in storage.mode(y) <- "double" :
>>>>>  invalid to change the storage mode of a factor
>>>>> In addition: Warning message:
>>>>> In model.response(mf, "numeric") :
>>>>>  using type="numeric" with a factor response will be ignored
>>>>>
>>>>> Here is a subset of my data:
>>>>>
>>>>>  island_id     refseq_better     total        refseq_proportion
>>>>> fiveprime   threeprime        island_size
>>>>>     1a            29                  57           
>>>>> 0.508771929824561
>>>>>  11127     201378               190251
>>>>>     1c            27                  90               0.3
>>>>>           6303879    6600994            297115
>>>>>     1d            33                 115         0.28695652173913
>>>>>  7001283    7421591            420308
>>>>>     2b            11                  42           
>>>>> 0.261904761904762
>>>>>  4381375    4520137            138762
>>>>>     2d            27                  81           
>>>>> 0.333333333333333
>>>>>  5203929    5497271            293342
>>>>>     3a            44                 141         0.312056737588652
>>>>>  28792      552044              523252
>>>>>
>>>>> When I use sapply(dataframe,mode) to check the modes of the  
>>>>> columns,
>>>>> this is my output:
>>>>>
>>>>>     island_id     refseq_better             total
>>>>>  refseq_proportion
>>>>>      "numeric"         "numeric"         "numeric"          
>>>>> "numeric"
>>>>>      fiveprime        threeprime       island_size
>>>>>      "numeric"         "numeric"         "numeric"
>>>>
>>>> So?
>>>>
>>>>> mode(factor(1:10))
>>>>
>>>> [1] "numeric"
>>>>
>>>> Storage mode is not the right question. "class" is the correct  
>>>> question.
>>>> Best would be to try is.factor()
>>>
>>> Looking at the error message, the problem does appear to be with
>>> storage mode ... is this affected by whether the variables are
>>> factors? Note this part of the error:
>>>
>>> Error in storage.mode(y) <- "double" :
>>> invalid to change the storage mode of a factor
>>>
>>>>
>>>>
>>>>> How do I need to change the format of my data frame so that I do  
>>>>> not
>>>>> get the above error?
>>>>
>>>> Figure out which of your columns are factors and apply the FAQ 7.12
>>>>
>>>> --
>>>> David.
>>>>>
>>>>> Thanks!
>>>>>
>>>>> Alison Callahan
>>>>> PhD candidate
>>>>
>>>>
>>>> David Winsemius, MD
>>>> West Hartford, CT
>>>>
>>>>
>>> Thanks,
>>>
>>> Alison
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>>

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list