假设我必须在回归中估计系数 a,b:
y=a*x+b*z+c
Run Code Online (Sandbox Code Playgroud)
我事先知道 y 总是在 y>=0 和 y<=x 的范围内,但回归模型有时会产生超出此范围的 y。
样本数据:
mydata<-data.frame(y=c(0,1,3,4,9,11),x=c(1,3,4,7,10,11),z=c(1,1,1,9,6,7))
round(predict(lm(y~x+z,data=mydata)),2)
1 2 3 4 5 6
-0.87 1.79 3.12 4.30 9.34 10.32
Run Code Online (Sandbox Code Playgroud)
第一个预测值 <0。
我试过没有截距的模型:所有预测都>0,但y的第三个预测>x(4.03>3)
round(predict(lm(y~x+z-1,data=mydata)),2)
1 2 3 4 5 6
0.76 2.94 4.03 4.67 8.92 9.68
Run Code Online (Sandbox Code Playgroud)
我还考虑对比例y/x 而不是 y进行建模:
mydata$y2x<-mydata$y/mydata$x
round(predict(lm(y2x~x+z,data=mydata)),2)
1 2 3 4 5 6
0.15 0.39 0.50 0.49 0.97 1.04
round(predict(lm(y2x~x+z-1,data=mydata)),2)
1 2 3 4 5 6
0.08 0.33 0.46 0.47 0.99 1.07
Run Code Online (Sandbox Code Playgroud)
但是现在第六个预测 >1,但比例应该在 [0,1] 范围内。
我还尝试应用glm …
我有一个如下形式的数据框:
a b c d e
0 0 1 0 1 0
1 0 0 0 1 1
2 1 1 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想折叠它,只将其中的一个折叠到一行,例如:
x
0 'bd'
1 'de'
2 'ab'
Run Code Online (Sandbox Code Playgroud)
提前致谢
我有两个大小相同的列表,一个具有数据类型(连续出现):
types = ["vigi","vigi","fruits","fruits","fruits","nothing","nothing","nothing","nothing"]
Run Code Online (Sandbox Code Playgroud)
第二个列表是关于数据的:
data = ["xx","tr","kl","ut","ew","uy","lp","eq","aq"]
Run Code Online (Sandbox Code Playgroud)
从数据列表中,我知道"xx","tr"
are"vigi"
和"kl","ut","ew"
are"fruits"
等等。
我每次需要将它们data
分成两个数据集:
data1 = data[indices for type "vigi"]
data2 = data[indices for the remaining (i.e. data for "fruits" and "nothing")]
Run Code Online (Sandbox Code Playgroud)
第二次将有:
data1 = data[indices for type "fruits"]
data2 = data[indices for the remaining (i.e. data for "vigi" and "nothing")]
Run Code Online (Sandbox Code Playgroud)
等等 ..
请提供任何帮助。