1

自分のデータに適合する lm を取得しようとしています。私が抱えている問題は、因子が「真」の場合は線形モデル(1次多項式)を、因子が「偽」の場合は2次多項式を当てはめたいということです。1つのlmのみを使用してそれを行うにはどうすればよいですか。

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)

私が試してみました

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

その結果:

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(a^2) があり、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 です。2 レベルの因子が機能しない場合は、因子変数を論理 1 に変換する必要があると思います。私が見逃しているもう1つのことは、状態にないことです。I(!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 ***

! の有無にかかわらず数式を関連付けることはできません。私には少し奇妙です。

4

2 に答える 2

1

うーん...

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

あなたは、「私が抱えている問題は、因子が「true」の場合は線形モデル(1次多項式)を、因子が「false」の場合は2次多項式を当てはめたいということです。どうすればそれを行うことができますか1lmだけ」

そのことから、 b をモデルに直接入れたくないのではないでしょうか? さらに、a^2 は、b が false の場合にのみ含める必要があります。

それは...

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

b が真 (つまり、!b が FALSE に等しい) の場合、a^2 はゼロ (FALSE) で乗算され、式から省略されます。

唯一の問題は、 b を の代わりに factor として定義したことですlogical。それは治すことができます。

# 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」) に追加するときに「因子」に変換されました。

データ フレームの定義方法に関するもう 1 つのマイナー ポイント。

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 は不要です。すべてを 1 行で記述できます。

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

さらに、 b をlogical使用するように変換するには:

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

ノート。b=b=="true" と言う必要があります。冗長に思えますが、LHS (b) はデータ フレーム内の変数の名前を示しますが、RHS (b=="true") は "論理" (ブール値) 値。

于 2013-09-19T22:59:07.090 に答える
1

次の行に沿って何かを試してください。

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)

これにより、次の結果が得られます。

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 

ノート:

  • 論理値TRUEと を利用しましたFALSE
  • これらはそれぞれ 1 と 0 に強制されます。
  • !b数式内で否定を使用しました。
于 2013-04-26T21:34:12.933 に答える