基本上,一旦它是对数刻度,我不知道如何在我的数据上绘制最佳拟合线.我使用lm()和abline()在我的绘图上放置了一个线性回归趋势线,但是现在添加了log ="xy",这只会产生一条水平线.

这是我正在尝试做的一个非常简单的例子(但是这里完全没有这条线):
lengths = c(10000,3000,3005,3005,3010,20000)
counts = c(3,1,1,2,1,3)
line=lm(counts~lengths)
plot(lengths, counts, col="green", log="xy")
abline(line, col="blue")
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多我在类似问题上找到的东西(例如使用log10()和lines()),但他们没有使用我的数据.
我知道这是一个非常基本的问题,抱歉.
我想用矩阵乘以矩阵的每一行.所以我有:
mat=matrix(1,2,4)
vec=c(1,2,3,4)
#works but ugly:
new.mat=mat
for(i in 1:nrow(mat)){
new.mat[i,]=mat[i,]*vec
}
Run Code Online (Sandbox Code Playgroud)
我以为我找到了'应用'的答案,但我无法以同样的方式工作.
我道歉,因为我之前已经问了同样的问题,但答案一直运作到现在为止.我使用这种方法生成了六个看起来很好的图,但现在我已经有了两个奇怪的图.您可以使用此示例看到此"缺乏适合度":
x=c(9222,187720,42162,7005,3121,7534,21957,272901,109667,1394312,12230,69607471,79183,6389,64859,32479,3535,9414098,2464,67917,59178,2278,33064,357535,11876,21036,11018,12499632,5160,84574)
y=c(0,4,1,0,1,0,0,1,5,13,0,322,0,0,1,1,1,32,0,0,0,0,0,0,0,0,0,33,1,1)
lin=lm(y~x)
plot(x, y, log="xy")
abline(lin, col="blue", untf=TRUE)
Run Code Online (Sandbox Code Playgroud)
这是我使用真实数据生成的图(左边是log-log,右边是normal):

我并不太关心缺失的0值,因为我认为lin仍会考虑这些因素,但是正如您在日志图中看到的那样,即使在(1,1)附近也没有开始.从它现在的样子看,我希望看到大约(1000,10)点.
有谁知道发生了什么?手动绘制lin的系数会有帮助吗?如果是这样,任何人都可以向我解释我将如何做到这一点?