首先,請下載從http://alexandervanloon.nl/survey_oss.csv設置我的數據,然後執行腳本中的內容得到一些散點圖:abline和對數x軸給出情節水平迴歸線
# read data and attach it
survey <- read.table("survey_oss.csv", header=TRUE)
attach(survey)
# plot for inhabitants
png("scatterINHABT.png")
plot(INHABT, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1)
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
# plot for inhabitants divided by 1000
png("scatterINHABT_divided.png")
plot(INHABT/1000, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1)
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
# plot for inhabitants in logarithmic scale
png("scatterINHABT_log.png")
plot(INHABT, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1, log="x")
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
# plot for inhabitants in logarithmic scale and divided by 1000
png("scatterINHABT_log_divided.png")
plot(INHABT/1000, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS", las=1, log="x")
abline(lm(OSSADP~INHABT)) # regression line (y~x)
dev.off()
由於您可以看到,在第一個散點圖中,問題是R
決定使用科學記數法,並且由於異常值而使數據看起來很奇怪。這就是爲什麼我希望x軸上的居民擁有數千人,並且x軸也使用對數座標。
的問題是雙重的。首先,我可以通過簡單地將居民分爲1000來擺脫科學記數法,但是與第一種情節不同,這產生了平坦的水平迴歸線。我知道還有其他方法可以解決這個問題,例如Do not want scientific notation on plot axis,但我無法根據自己的情況調整代碼。
其次,x軸切換到對數標度也使得迴歸線平。谷歌指向https://stat.ethz.ch/pipermail/r-help/2006-January/086500.html作爲可能的解決方案的第一結果和我嘗試使用abline(lm(OSSADP~log10(INHABT)))
它建議在那裏,而是產生一個垂直迴歸線。如果我將這兩個數除以1000並且使用對數刻度,則該線也是水平的。
我沒有在數學和統計學背景的任何一個社會科學家,所以我擔心我可能會錯過一些東西很明顯,如果是這樣我的道歉。非常感謝您的幫助。
非常感謝您的回答。我決定使用千法除法,並簡單地用'xlim = c(0,215)'排除三個異常值,以便不需要對數刻度。但是,如果有人確實知道將該方法與對數x軸協調一致的解決方案,請分享。 – 2012-07-30 22:42:55
哦,如果我不包括選項'las = 1',R將垂直顯示y軸刻度的數字而不是水平。 – 2012-07-30 22:45:33