title: R lm interaction terms with categorical and squared continuous variables
body: <p>I am trying to get an lm fit for my data. The problem I am having is that I want to fit a linear model(1st order polynomial) when the factor is "true" and a second order polynomial when the factor is "false". How can I get that done using only one lm.  </p>
  
  <pre><code>a=c(1,2,3,4,5,6,7,8,9,10)
  b=factor(c("true","false","true","false","true","false","true","false","true","false"))
  c=c(10,8,20,15,30,21,40,25,50,31)
  DumbData&lt;-data.frame(cbind(a,c))
  DumbData&lt;-cbind(DumbData,b=b)
  </code></pre>
  
  <p>I have tried </p>
  
  <pre><code>Lm2&lt;-lm(c~a + b + b*I(a^2), data=DumbData)
  summary(Lm2)
  </code></pre>
  
  <p>that results in:</p>
  
  <pre><code>summary(Lm2)
  Call:
  lm(formula = c ~ a + b + b * I(a^2), data = DumbData)
  
  Coefficients:
               Estimate Std. Error t value Pr(&gt;|t|)    
  (Intercept)  -0.74483    1.12047  -0.665 0.535640    
  a             4.44433    0.39619  11.218 9.83e-05 ***
  btrue         6.78670    0.78299   8.668 0.000338 ***
  I(a^2)       -0.13457    0.03324  -4.049 0.009840 ** 
  btrue:I(a^2)  0.18719    0.01620  11.558 8.51e-05 ***
  ---
  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
  
  Residual standard error: 0.7537 on 5 degrees of freedom
  Multiple R-squared: 0.9982, Adjusted R-squared: 0.9967 
  F-statistic:   688 on 4 and 5 DF,  p-value: 4.896e-07 
  </code></pre>
  
  <p>here I have I(a^2) for both fits and i want 1 1st order and another with second order polynomials.
   If one tries with:</p>
  
  <pre><code> Lm2&lt;-lm(c~a + b + I(b*I(a^2)), data=DumbData)
  Error in `contrasts&lt;-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) : 
    contrasts can be applied only to factors with 2 or more levels
  In addition: Warning message:
  In Ops.factor(b, I(a^2)) : * not meaningful for factors
  </code></pre>
  
  <p>How can I get the proper interaction terms here???</p>
  
  <p>Thanks Andrie, there are still some things I am missing here. In this example the variable b is a logic one, if is a factor of two levels does not work, I guess I have to convert the factor variable in a logic one. The other thing I am missing is the not in the condition, I(!b*a^2) without the ! I get: </p>
  
  <pre><code>    Call: lm(formula = c ~ a + I(b * a^2), data = dat) 
  Coefficients: Estimate Std. Error t value Pr(&gt;|t|) 
  (Intercept) 7.2692 1.8425 3.945 0.005565 ** 
  a           2.3222 0.3258 7.128 0.000189 *** 
  I(b * a^2)  0.3005 0.0355 8.465 6.34e-05 ***
  </code></pre>
  
  <p>I can not relate the formulas with and without the ! condition, which is a bit strange to me.</p>