3

だから私はスクリプトに以下を使用しています:

area <- c(1854,2001,2182,2520,4072,1627,1308,1092,854,1223,2231,1288,898,2328,1660,6018,5420,943,1625,1095,1484,929,1178,4072,2413)
weight1 <- c(24281,28474,33725,40707,76124,16263,12190,10153,8631,13690,34408,15375,8806,36245,20506,109489,104014,11308,23262,11778,20650,8771,12356,76124,28346)
weight <- weight1/1000

df <- data.frame(weight = log10(weight), area = log10(area))

fit_line <- predict(lm(area ~ weight, data=df))
fit_power <- predict(nls(area ~ i*weight^z, start=list(i=2,z=0.7), data=df))

plot(df$weight,df$area)
lines(df$weight,fit_line,col="red")
lines(sort(df$weight),sort(fit_power), col="blue")

ログを実行するには-ログプロット。で直線をプロットできますlm()が、パワーフィットを使用nls()すると、直線ではなく曲線がプロットされます。以下を参照してください。

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

パワーフィットを直線の形でプロットするにはどうすればよいですか、またはからどのように導出できますかlm()。だから私は次の形で答えを持っています:y = a * x ^ b

4

2 に答える 2

2

あなたのプロットは両対数プロットではありません。両対数プロットを行うには:

plot(log(area)~log(weight), df)

次に、線を合わせるには:

LM.Log <- lm(log(area)~log(weight), df)
abline(LM.Log, col="red")

そして、直線プロットをより効率的に曲線で描くには、次のようにします。

Power <- coef(LM.Log)[2]
LM.Normal <- lm(area~I(weight^Power)+0, df)
plot(area~weight, df)
plot(function(x) coef(LM.Normal)*x^Power, 0, 2, add=T, col="blue")
于 2012-12-19T20:00:22.297 に答える
1

おそらく、以下は有益でしょう...

df <- data.frame(weight, area, weightl = log10(weight), areal = log10(area))
df <- df[order(df$weight),]

fit_line <- predict(lm(areal ~ weightl, data=df))
fit_power <- predict(nls(area ~ i*weight^z, start=list(i=2,z=0.7), data=df))

plot(df$weightl, df$areal)
lines(df$weightl, fit_line, col="red")
lines(df$weightl, log10(fit_power), col="blue")

plot(df$weight, df$area)
lines(df$weight, 10^fit_line, col="red")
lines(df$weight, fit_power, col="blue")

私は、あなたが本当に生の値を通してパワーカーブを望んでいて、そのようなプロキシとしてlog10を取っていることを正しく願っています。したがって、必要なのは、生の重量と面積の関係の予測値を取得し、それらをログに記録して、すべてをロググラフに配置することです。または、対数値の線形を取得し、それらを両方とも生のグラフの曲線として配置します。上で作成された両方のプロットを調べます。

于 2012-12-19T19:52:37.957 に答える