这是我正在使用的数据集:http://archive.ics.uci.edu/ml/datasets/Wine+Quality
我正在使用R制作两个散点图:
> plot(chlorides~(1/alcohol),data=redwinedata)
> plot(chlorides~alcohol,data=redwinedata)
但两个图看起来完全一样(轴,点,一切)。任何人都知道为什么会这样吗?
答案 0 :(得分:9)
$ x $ vs $ y $的情节看起来与$ 1 / x $对$ y $的情节看起来不一样。我认为你犯了一个代码错误。您提供的代码不会转换预测变量。
您需要单独计算变量并将其传递给绘图或使用I
函数。请参阅下面的示例。
x = runif(100)
y = runif(100)
plot(y ~ x)
plot(y ~ (1/x)) # looks exactly the same. It's a plot of y vs. x.....
plot(y ~ I(1/x)) # does not look exactly the same
z = 1/x
plot(y ~ z) # looks just like the last call but not like the plot of y vs. x
答案 1 :(得分:1)
你认为你正在改变预测者......但你不是。
以下是使用内置数据集的小型可重现示例:
plot(dist~speed,cars)
plot(dist~1/speed,cars)
问题在于处理公式的事物(通过在第一个参数中使用~
调用)通过公式表达式传递处理公式的事物,然后将结果传递给计算算术表达式的事物并且通常由此产生的行为对于较新的用户而言是令人惊讶的。一些表达式由公式接口单独保留,其他表达式由它修改。
正如GoF_logistic所说,这就是你应该做的事情:
plot(dist~I(1/speed),cars)
(或计算变换后的变量,然后绘制它),但你也可以这样做:
with(cars,plot(1/speed,dist))
无论哪种方式,您都试图避免公式接口处理“1 / x”类型表达式。使用I()
使表达式在通过公式接口时保持不变;使用plot(x,y ...)
形式的绘图功能完全跳过公式界面。
你也需要避免这样的事情 - plot(dist~(speed^2))
出于同样的原因。
[虽然公式界面对ANOVA很有意义,但我希望看到它针对情节进行了修改,以便它更经常地为新手做一些不那么令人惊讶的事情(即使对于有经验的用户来说,它现在更常令人讨厌)。 plot(y~x^2)
或plot(y~1/x)
是否真的需要做除了他们脸上所要求的其他事情之外的任何事情?]
答案 2 :(得分:-2)
这是因为两个轴上的比例变化。