2012-07-30 65 views
1

首先,請下載從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並且使用對數刻度,則該線也是水平的。

我沒有在數學和統計學背景的任何一個社會科學家,所以我擔心我可能會錯過一些東西很明顯,如果是這樣我的道歉。非常感謝您的幫助。

回答

0

前一段時間科學記數法被覆蓋了on the R mailing list,但是您可以控制R如何選擇何時去與科學記數法options()$scipen

options(scipen=10) 
plot(INHABT, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS") 

其次,你除以1000的問題是,你沒有一千倍在plotabline兩分。這將這樣的伎倆:

plot(INHABT/1000, OSSADP, xlab="Inhabitants", ylab="Adoption of OSS") 
abline(lm(OSSADP~I(INHABT/1000))) # Fixed regression line. 

I是neccessary因爲/符號在formula個不同的含義。

此外,您las參數是不必要的。

+0

非常感謝您的回答。我決定使用千法除法,並簡單地用'xlim = c(0,215)'排除三個異常值,以便不需要對數刻度。但是,如果有人確實知道將該方法與對數x軸協調一致的解決方案,請分享。 – 2012-07-30 22:42:55

+0

哦,如果我不包括選項'las = 1',R將垂直顯示y軸刻度的數字而不是水平。 – 2012-07-30 22:45:33