10

私はこのデータセットを持っています:

x <- c(0, 40, 80, 120, 160, 200)
y <- c(6.52, 5.10, 4.43, 3.99, 3.75, 3.60)

私は以下を使用して線形モデルを計算しましたlm()

model <- lm(y ~ x)

たとえば、x新しい値がある場合の予測値を知りたいのですが、関数を使用すると、新しい値のみが計算されます。yynew <- c(5.5, 4.5, 3.5)predict()y

x新しい値がある場合、どうすれば新しい値を予測できyますか?

4

3 に答える 3

4

私はあなたが代数を使って反転する必要があると思いy=a+b*xますx=(y-a)/b

cc <- coef(model)
(xnew <- (ynew-cc[1])/cc[2])
# [1]  31.43007 104.76689 178.10372

plot(x,y
abline(model)
points(xnew,ynew,col=2)

ここであなたの「データ」を見ると、非線形回帰の方が良いかもしれないと思います...

ここに画像の説明を入力してください

于 2012-08-22T15:35:59.870 に答える
4

これは化学の典型的な問題であるため(キャリブレーションから値を予測)、パッケージchemCalはを提供しますinverse.predict。ただし、この関数は「モデル式y〜xまたはy〜x-1のクラスlmまたはrlmの単変量モデルオブジェクト」に限定されます。

x <- c(0, 40, 80, 120, 160, 200)
y <- c(6.52, 5.10, 4.43, 3.99, 3.75, 3.60)
plot(x,y)
model <- lm(y ~ x)
abline(model)
require(chemCal)
ynew <- c(5.5, 4.5, 3.5)
xpred<-t(sapply(ynew,function(y) inverse.predict(model,y)[1:2]))
#  Prediction Standard Error
#[1,] 31.43007   -38.97289     
#[2,] 104.7669   -36.45131     
#[3,] 178.1037   -39.69539
points(xpred[,1],ynew,col="red")

警告:この関数は非常に遅く、多数の値を逆予測する必要がある場合には適していません。

私が正しく覚えていれば、ネガ。SEは、関数が勾配が常に正であることを期待しているために発生します。SEの絶対値はまだ正しいはずです。

于 2012-08-22T15:58:44.967 に答える
2

関係が単調でない場合、または複数の予測値がある場合は、特定のy値に対して複数のx値が存在する可能性があるため、その対処方法を決定する必要があります。

遅くなる可能性のある(そして前述の他のパッケージで使用されている方法である可能性がある)1つのオプションは、uniroot関数を使用することです。

x <- runif(100, min=-1,max=2)
y <- exp(x) + rnorm(100,0,0.2)

fit <- lm( y ~ poly(x,3), x=TRUE )
(tmp <- uniroot( function(x) predict(fit, data.frame(x=x)) - 4, c(-1, 2) )$root)
library(TeachingDemos)
plot(x,y)
Predict.Plot(fit, 'x', data=data.frame(x=x), add=TRUE, ref.val=tmp)

パッケージのTkPredict関数を使用して、ソリューションを目で確認できます。TeachingDemos

approxfunまたは、多くの予測ポイントを生成し、それらをまたはsplinfun関数にフィードして近似を生成することにより、かなり迅速な近似を取得できます。

tmpx <- seq(min(x), max(x), length.out=250)
tmpy <- predict(fit, data.frame(x=tmpx) )
tmpfun <- splinefun( tmpy, tmpx )
tmpfun(4)
于 2012-08-22T19:40:16.517 に答える