Ggplot2 में निरंतर अंतःक्रियाओं द्वारा निरंतर एक साजिश कैसे हो सकती है?


11

मान लें कि मेरे पास डेटा है:

x1 <- rnorm(100,2,10)
x2 <- rnorm(100,2,10)
y <- x1+x2+x1*x2+rnorm(100,1,2)
dat <- data.frame(y=y,x1=x1,x2=x2)
res <- lm(y~x1*x2,data=dat)
summary(res)

मैं निरंतर इंटरैक्शन द्वारा निरंतर को साजिश करना चाहता हूं जैसे कि एक्स एक्स एक्स पर है और एक्स 2 को 3 लाइनों द्वारा दर्शाया गया है, जो कि 0 के जेड-स्कोर पर एक्स 2 का प्रतिनिधित्व करता है, जो कि +1 के जेड-स्कोर पर है, और दूसरे पर। -1 का जेड-स्कोर, प्रत्येक पंक्ति का एक अलग रंग और लेबल वाला। मैं इसे ggplot2 का उपयोग कैसे कर सकता हूं?

उदाहरण के लिए, यह कुछ इस तरह दिख सकता है (हालांकि अलग-अलग रंगों की रेखाओं के बजाय अलग-अलग प्रकारों के साथ): उदाहरण छवि


क्या आप अन्य पैकेज / सॉफ़्टवेयर से एक उदाहरण छवि दिखा सकते हैं या अधिक विस्तृत विवरण दे सकते हैं कि आप क्या चाहते हैं?
दरोगासीग

जवाबों:


9

आपके नकली डेटा सेट के साथ यहां मेरा संस्करण है:

x1 <- rnorm(100,2,10)
x2 <- rnorm(100,2,10)
y <- x1+x2+x1*x2+rnorm(100,1,2)
dat <- data.frame(y=y,x1=x1,x2=x2)
res <- lm(y~x1*x2,data=dat)
z1 <- z2 <- seq(-1,1)
newdf <- expand.grid(x1=z1,x2=z2)

library(ggplot2)
p <- ggplot(data=transform(newdf, yp=predict(res, newdf)), 
            aes(y=yp, x=x1, color=factor(x2))) + stat_smooth(method=lm)
p + scale_colour_discrete(name="x2") + 
  labs(x="x1", y="mean of resp") + 
  scale_x_continuous(breaks=seq(-1,1)) + theme_bw()

मैं आपको एक्स / वाई-अक्ष लेबल और किंवदंती स्थिति के बारे में विवरण प्रबंधित करने देता हूं।

यहाँ छवि विवरण दर्ज करें


अच्छा लग रहा है, (निश्चित रूप से) को छोड़कर हमें पहले स्केल (X1) और स्केल (x2) की आवश्यकता होगी।
रुसलपिएरेस

1
@drnenexus हां, निश्चित रूप से (मेरे शुरुआती परीक्षणों में, मैंने आपके बजाय मानकीकृत एन (0; 1) चर का उपयोग किया था)।
chl

5

0 ( y0 कॉलम), -1 ( y1m कॉलम) और 1 ( y1p कॉलम) के Z- स्कोर के साथ y के लिए अनुमानों की गणना :

dat$y0 <- res$coefficients[[1]] + res$coefficients[[2]]*dat$x1 + res$coefficients[[3]]*0 + res$coefficients[[4]]*dat$x1*0
	dat$y1m <- res$coefficients[[1]] + res$coefficients[[2]]*dat$x1 + res$coefficients[[3]]*-1 + res$coefficients[[4]]*dat$x1*-1
dat$y1p <- res$coefficients[[1]] + res$coefficients[[2]]*dat$x1 + res$coefficients[[3]]*1 + res$coefficients[[4]]*dat$x1*1

आधार के साथ लाइनों को प्लॉट करना plot():

plot(dat$x1, dat$y0, type="l", xlab="x1", ylab="Estimates")
lines(dat$x1, dat$y1m, col="red")
lines(dat$x1, dat$y1p, col="blue")

यहाँ छवि विवरण दर्ज करें

Ggplot का उपयोग करने के लिए, आप geom_line को कॉल कर सकते हैं :

ggplot(dat, aes(x1, y0)) + geom_line() +
    geom_line(aes(x1, y1m), color="red") +
    geom_line(aes(x1, y1p), color="blue") +
    theme_bw() + opts(title="") + xlab("x1") + ylab("Estimates")

यहाँ छवि विवरण दर्ज करें


2
आप भविष्यवाणी का उपयोग कर भविष्यवाणियां प्राप्त कर सकते हैं। डेटा [, "y0"] <- भविष्यवाणी (Res, newdata = data.frame (X1 = dat [, "X1"], x2 = 0)) थोड़ा टाइपिंग बचाता है।
mpiktas

@mpiktas: धन्यवाद, मैं इसके बारे में नहीं जानता था predict, लेकिन उपयोगी लगता है।
दरोगासीग

1
मैं स्वयं ढलानों की गणना करने के बजाय पूर्वानुमान का उपयोग करने की सलाह देता हूं - यह विशेष रूप से बहुत आसान है जब आपके पास बातचीत या गैर-रेखीय घटक होते हैं।
हैली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.