5

R パッケージsegmentedを使用してモデルのパラメーターを計算しています。このモデルでは、応答変数がブレークポイントまで説明変数と線形に相関し、その後、応答変数が説明変数から独立します。言い換えれば、勾配 = 0 を持つ 2 番目の部分を持つセグメント化された線形モデルです。私がすでに行ったことは次のとおりです。

linear1 <- lm(Y ~ X)
linear2  <- segmented (linear1, seg.Z = ~ X, psi = 2)

これにより、最初の線は非常に優れたモデルが得られますが、2 番目の線は水平ではありません (ただし重要ではありません)。2行目を水平にしたい。(psi = 2 は、ブレークポイントを観察した場所です。)

また、「abline」を使用してプロットに破線を表示すると、モデルの最初の部分のみが表示され、「4 つの回帰係数のうち最初の 2 つだけを使用する」という警告が表示されます。モデルの両方の部分を表示するにはどうすればよいですか?

データを R に入力するには:

X <- c(0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0)
Y <- c(1.31, 1.60, 1.86, 2.16, 2.44, 2.71, 3.00, 3.24, 3.57, 3.81, 3.80, 3.83, 3.78, 3.94, 3.75, 3.89)
4

2 に答える 2

2

これは、ヘルプでセグメント化およびリンクされたパッケージによって提供されるクラス オブジェクトのplotメソッドを使用するのと同じくらい簡単です。segmentedsegmented

データがdata.frame d

linear2  <- segmented (linear1, seg.Z = ~ X, psi = 2, data = d)
plot(linear2)
points(Y~X, data = d)

ここに画像の説明を入力

水平線をごまかす簡単な方法は、係数をその線が水平になるために必要な値に置き換えることです

fudgedmodel <- linear2
fudgedmodel$coefficients[3] <- - fudgedmodel$coefficients[2]
plot(fudgedmodel)
points(Y~X, data = d)

ここに画像の説明を入力

于 2012-12-10T23:04:31.623 に答える
1

同じことを検索すると、R ヘルプ メーリング リストのこの投稿で適切な回答が見つかりました。

https://stat.ethz.ch/pipermail/r-help/2007-July/137625.html

これは、ソリューションに直接つながるその回答の編集版です。

library(segmented)

# simulate data - linear slope down until some point, at which slope=0
n<-50
x<-1:n/n
y<- 0-pmin(x-.5,0)+rnorm(50)*.03
plot(x,y) #This should be your scatterplot..
abline(0,0,lty=2)


# a parsimonious modelling: constrain right slope=0
# NB. This is probably what you want...
o<-lm(y~1)
xx<- -x
o2<-segmented(o,seg.Z=~xx,psi=list(xx=-.3))
slope(o2)
points(x,fitted(o2),col=2)


# now constrain \hat{\mu}(x)=0 for x>psi (you can do this if you know what the value of y is when x becomes independent)
o<-lm(y~0)
xx<- -x
o3<-segmented(o,seg.Z=~xx,psi=list(xx=-.3))
slope(o3)
points(x,fitted(o3),col=3)

このようなものを取得する必要があります。赤い点は最初の方法で、あなたにぴったりの方法です。緑色の点は 2 番目の方法で、x が独立する y の値が既にわかっている場合にのみ適用されます。

ここに画像の説明を入力

于 2014-02-17T01:56:20.127 に答える