2013-04-26 5 views
1

내 데이터에 대해 적절한 결과를 얻으려고합니다. 내가 겪고있는 문제는 요소가 "참"일 때 선형 모델 (1 차 다항식)에 적합하고 요소가 "거짓"일 때 2 차 다항식에 적합하게하려는 것입니다. 어떻게해야 하나의 작품만을 사용하여 완성 할 수 있을까요? I는 결과 R lm 상호 작용하는 범주 형 및 제곱 연속 변수 사용 조건

Lm2<-lm(c~a + b + b*I(a^2), data=DumbData) 
summary(Lm2) 

시도

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<-data.frame(cbind(a,c)) 
DumbData<-cbind(DumbData,b=b) 

여기

summary(Lm2) 
Call: 
lm(formula = c ~ a + b + b * I(a^2), data = DumbData) 

Coefficients: 
      Estimate Std. Error t value Pr(>|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 

를 I는이 I I 1 1 차 원하는 양 발작 및 (^ 2) 및 제와 다른 다항식. 하나와 함께하려고하면 :

Lm2<-lm(c~a + b + I(b*I(a^2)), data=DumbData) 
Error in `contrasts<-`(`*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 

어떻게 여기에 적절한 상호 작용 조건을 얻을 수 있습니다 ???

감사합니다 Andrie, 아직 제가 누락 된 몇 가지 사항이 있습니다. 이 예제에서 변수 b는 논리 1입니다. 두 레벨의 요소가 작동하지 않으면 논리 1에서 요소 변수를 변환해야합니다. 내가 놓친 다른 한 가지는 조건이 아니라는 것입니다! (! b * a^2)! 다음과 같이 표시됩니다.

Call: lm(formula = c ~ a + I(b * a^2), data = dat) 
Coefficients: Estimate Std. Error t value Pr(>|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 *** 

수식과 함께 수식을 연결할 수 없습니다. 나는 조금 이상하다. 다음과 같은 라인을 따라

답변

1

시도 뭔가 :

Call: 
lm(formula = c ~ a + I(!b * a^2), data = dat) 

Residuals: 
    Min  1Q Median  3Q Max 
-4.60 -2.65 0.50 2.65 4.40 

Coefficients: 
       Estimate Std. Error t value Pr(>|t|)  
(Intercept)  10.5000  2.6950 3.896 0.005928 ** 
a     3.9000  0.4209 9.266 3.53e-05 *** 
I(!b * a^2)TRUE -13.9000  2.4178 -5.749 0.000699 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 3.764 on 7 degrees of freedom 
Multiple R-squared: 0.9367, Adjusted R-squared: 0.9186 
F-statistic: 51.75 on 2 and 7 DF, p-value: 6.398e-05 

참고 :

dat <- data.frame(
    a=c(1,2,3,4,5,6,7,8,9,10), 
    b=c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE), 
    c=c(10,8,20,15,30,21,40,25,50,31) 
) 

fit <- lm(c ~ a + I(!b * a^2), dat) 
summary(fit) 

이 결과

  • 내가 논리 값 TRUEFALSE 사용했다.
  • 이것은 각각 1과 0으로 강요합니다.
  • 나는 공식 내에 부정 (!b)을 사용했습니다.
+0

감사합니다 Andrie, 아직 제가 여기에 실종 된 경우가 있습니다. 이 예제에서 변수 b는 논리 1입니다. 두 레벨의 요소가 작동하지 않으면 논리 1에서 요소 변수를 변환해야합니다. 내가 놓친 다른 한 가지는 조건이 아니라는 것입니다! (! b * a^2)! 전화 : lm (수식 = c ~ a + I (b * a^2), 데이터 = dat) 계수 : 예상 표준. 오류 t 값 Pr (> | t |) (차단) 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 *** –

1

음, 어디 ...

Lm2<-lm(c~a + b + b*I(a^2), data=DumbData) 

두 번째 사실 "과"난 데 문제는 내가 요인이 때 선형 모델 (1 차 다항식을) 적합 할 것입니다 "라고 요소가 "거짓"인 경우 다차원 다항식을 사용하면 어떻게됩니까? 하나의 작품 만 사용하여 어떻게 처리 할 수 ​​있습니까? "

그런데 b가 모델에 직접 들어가는 것을 원하지 않는다고 추측합니까? 또한^2는 b가 거짓 인 경우에만 포함되어야합니다.

는 그래서 B가 참이면

lm(c~ a + I((!b) * a^2)) 

수 ... (즉,! B가 FALSE 같음) 다음^2 제로 (FALSE)를 곱하는 방정식에서 생략한다.

유일한 문제는 logical 대신 b를 factor로 정의한 것입니다. 그것은 치유 될 수 있습니다.정확한 될

# b=factor(c("true","false","true","false","true","false","true","false","true","false")) 
# could use TRUE and FALSE instead of "ture" and "false" 
# alternatively, after defining b as above, do 
# b <- b=="true" -- that would convert b to logical (i.e boolean TRUE and FALSe values) 

좋아, 당신은 "문자"로 B를 정의 있지만 변환 하였다 "요소"데이터 프레임 ("DumbData") 방식으로 당신에 대해

또 다른 작은 점을 추가 할 때 데이터 프레임을 정의했습니다.

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<-data.frame(cbind(a,c)) 
DumbData<-cbind(DumbData,b=b) 

여기에서 cbind는 필요하지 않습니다. 당신은 한 줄에 모두가 coud : 또한

Dumbdata<- data.frame(a,b,c) 
# shorter and cleaner!! 

, logical 사용 b를 변환 :

Dumbdata<- data.frame(a,b=b=="true",c) 

참고. 당신은 b = b == "true"라고 말할 필요가있다. 그러나 그것은 중복 된 것처럼 보이지만, RHS (b == "true")가 " 논리적 "(부울) 값입니다.